CMS 3D CMS Logo

TT6ApvMask.cc
Go to the documentation of this file.
2 #include <cmath>
3 #include <numeric>
4 #include <algorithm>
5 using namespace std;
6 //
7 // Constructors:
8 //
9 TT6ApvMask::TT6ApvMask(int ctype, float ncut, float dcut, float tcut) {
10  theCalculationFlag_ = ctype;
11  theNoiseCut_ = ncut;
12  theDeadCut_ = dcut;
13  theTruncationCut_ = tcut;
14 }
15 
16 //
17 // Destructor :
18 //
20  if (false)
21  cout << "Destructing TT6ApvMask " << endl;
22 }
23 //
24 // Calculate the Mask
25 //
27  theMask_.clear();
29  double sumVal, sqSumVal, avVal, sqAvVal, rmsVal;
30  sort(temp_in.begin(), temp_in.end());
31  int nSize = in.size();
32  int cutLow = int(nSize * theTruncationCut_);
33  int cutHigh = int(nSize * theTruncationCut_);
34  int effSize = nSize - cutLow - cutHigh;
35  sumVal = 0.0;
36  sqSumVal = 0.0;
37  sumVal = accumulate((temp_in.begin() + cutLow), (temp_in.end() - cutHigh), 0.0);
38  sqSumVal = inner_product((temp_in.begin() + cutLow), (temp_in.end() - cutHigh), (temp_in.begin() + cutLow), 0.0);
39 
40  avVal = (effSize) ? sumVal / float(effSize) : 0.0;
41  sqAvVal = (effSize) ? sqSumVal / float(effSize) : 0.0;
42  rmsVal = (sqAvVal - avVal * avVal > 0.0) ? sqrt(sqAvVal - avVal * avVal) : 0.0;
43  if (false)
44  cout << " TT6ApvMask::calculateMask Mean " << avVal << " RMS " << rmsVal << " " << effSize << endl;
45  for (unsigned int i = 0; i < in.size(); i++) {
46  if (defineNoisy(static_cast<float>(avVal), static_cast<float>(rmsVal), in[i])) {
47  theMask_.push_back(noisy);
48  } else if (in[i] < theDeadCut_ * avVal) {
49  theMask_.push_back(dead);
50  } else {
51  theMask_.push_back(ok);
52  }
53  }
54 }
55 //
56 // Identification of Noisy strips (three options available : using cut on
57 // rms of noice distribution, using a percentage cut wrt the average, using
58 // a fixed cut
59 //
60 bool TT6ApvMask::defineNoisy(float avrg, float rms, float noise) {
61  bool temp;
62  temp = false;
63  if (theCalculationFlag_ == 1) {
64  if ((noise - avrg) > theNoiseCut_ * rms) {
65  temp = true;
66  if (false)
67  cout << " Mean " << avrg << " rms " << rms << " Noise " << noise << endl;
68  }
69  } else if (theCalculationFlag_ == 2) {
70  if ((noise - avrg) > avrg * theNoiseCut_)
71  temp = true;
72  } else if (theCalculationFlag_ == 3) {
73  if (noise > theNoiseCut_)
74  temp = true;
75  }
76  return temp;
77 }
std::vector< float > PedestalType
Definition: ApvAnalysis.h:44
TT6ApvMask(int ctype, float ncut, float dcut, float tcut)
Definition: TT6ApvMask.cc:9
void calculateMask(const ApvAnalysis::PedestalType &) override
Definition: TT6ApvMask.cc:26
bool defineNoisy(float avrg, float rms, float noise)
Definition: TT6ApvMask.cc:60
T sqrt(T t)
Definition: SSEVec.h:19
~TT6ApvMask() override
Definition: TT6ApvMask.cc:19