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 (0) cout << "Destructing TT6ApvMask " << endl;
21 }
22 //
23 // Calculate the Mask
24 //
26 
27  theMask_.clear();
28  ApvAnalysis::PedestalType temp_in(in);
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),
39  (temp_in.begin()+cutLow), 0.0);
40 
41  avVal = (effSize) ? sumVal/float(effSize):0.0;
42  sqAvVal = (effSize) ? sqSumVal/float(effSize):0.0;
43  rmsVal = (sqAvVal - avVal*avVal > 0.0) ? sqrt(sqAvVal - avVal*avVal):0.0;
44  if (0) cout << " TT6ApvMask::calculateMask Mean " << avVal <<
45  " RMS " << rmsVal << " " << effSize << endl;
46  for (unsigned int i=0; i<in.size(); i++){
47  if (defineNoisy( static_cast<float>(avVal),
48  static_cast<float>(rmsVal),in[i])) {
49  theMask_.push_back(noisy);
50  } else if (in[i] < theDeadCut_*avVal) {
51  theMask_.push_back(dead);
52  } else {
53  theMask_.push_back(ok);
54  }
55  }
56 }
57 //
58 // Identification of Noisy strips (three options available : using cut on
59 // rms of noice distribution, using a percentage cut wrt the average, using
60 // a fixed cut
61 //
62 bool TT6ApvMask::defineNoisy(float avrg,float rms,float noise){
63  bool temp;
64  temp=false;
65  if (theCalculationFlag_ == 1){
66  if ((noise-avrg) > theNoiseCut_*rms) {
67  temp=true;
68  if (0) cout << " Mean " << avrg << " rms " << rms << " Noise " << noise << endl;
69  }
70  } else if (theCalculationFlag_ == 2){
71  if ((noise-avrg) > avrg*theNoiseCut_) temp=true;
72  } else if (theCalculationFlag_ == 3){
73  if (noise > theNoiseCut_) temp=true;
74  }
75  return temp;
76 }
std::vector< float > PedestalType
Definition: ApvAnalysis.h:48
TT6ApvMask(int ctype, float ncut, float dcut, float tcut)
Definition: TT6ApvMask.cc:9
void calculateMask(const ApvAnalysis::PedestalType &)
Definition: TT6ApvMask.cc:25
virtual ~TT6ApvMask()
Definition: TT6ApvMask.cc:19
bool defineNoisy(float avrg, float rms, float noise)
Definition: TT6ApvMask.cc:62
T sqrt(T t)
Definition: SSEVec.h:18