CMS 3D CMS Logo

HcalDataFrameFilter.cc
Go to the documentation of this file.
6 
8 
9  template <class DataFrame>
10  bool check(const DataFrame& df, bool capcheck, bool dvercheck) {
11  if (capcheck || dvercheck) {
12  int lastcapid=0, capid=0;
13  for (int i=0; i<df.size(); i++) {
14  capid=df[i].capid();
15  if (capcheck && i!=0 && ((lastcapid+1)%4)!=capid)
16  return false;
17  if (dvercheck && ( df[i].er() || !df[i].dv() ))
18  return false;
19  lastcapid=capid;
20  }
21  }
22  return true;
23  }
24 
25  template<>
26  bool check<QIE10DataFrame>(const QIE10DataFrame& df, bool capcheck, bool linkerrcheck) {
27  if (linkerrcheck && df.linkError()) return false;
28  if (capcheck) {
29  for (int i=0; i<df.samples(); i++) {
30  if (!df[i].ok()) return false;
31  }
32  }
33  return true;
34  }
35 
36  template<>
37  bool check<QIE11DataFrame>(const QIE11DataFrame& df, bool capcheck, bool linkerrcheck) {
38  if (linkerrcheck && df.linkError()) return false;
39  if (capcheck && df.capidError()) return false;
40  return true;
41  }
42 
43 
44  template <class DataFrame>
45  double energySum(const DataFrame& df, int fs, int ls, const HcalDbService* conditions=nullptr) {
46  double es=0;
47  for (int i=fs; i<=ls && i<=df.size(); i++)
48  es+=df[i].nominal_fC();
49  return es;
50  }
51 
52  template <>
53  double energySum<QIE11DataFrame>(const QIE11DataFrame& df, int fs, int ls, const HcalDbService* conditions) {
54  const HcalQIECoder* channelCoder = conditions->getHcalCoder(df.id());
55  const HcalQIEShape* shape = conditions->getHcalShape(channelCoder);
56  CaloSamples tool;
57  HcalCoderDb coder(*channelCoder, *shape);
58  coder.adc2fC(df, tool);
59  double es=0;
60  for (int i=fs; i<=ls && i<=(int)df.samples(); i++)
61  es+=tool[i];
62  return es;
63  }
64 
65 }
66 
67 
68 HcalDataFrameFilter::HcalDataFrameFilter(bool requireCapid, bool requireDVER, bool energyFilter, int firstSample, int lastSample, double minAmpl) :
69  requireCapid_(requireCapid), requireDVER_(requireDVER), energyFilter_(energyFilter),
70  firstSample_(firstSample), lastSample_(lastSample), minimumAmplitude_(minAmpl), conditions_(nullptr) {
71 }
72 
74  conditions_ = conditions;
75 }
76 
79  for (HBHEDigiCollection::const_iterator i=incol.begin(); i!=incol.end(); i++) {
81  r.countBadQualityDigi(i->id());
83  output.push_back(*i);
84  }
85  return output;
86 }
87 
88 
91  for (HODigiCollection::const_iterator i=incol.begin(); i!=incol.end(); i++) {
93  r.countBadQualityDigi(i->id());
95  output.push_back(*i);
96 
97  }
98  return output;
99 }
100 
103  for (HcalCalibDigiCollection::const_iterator i=incol.begin(); i!=incol.end(); i++) {
105  r.countBadQualityDigi(i->id());
107  output.push_back(*i);
108 
109  }
110  return output;
111 }
112 
115  for (HFDigiCollection::const_iterator i=incol.begin(); i!=incol.end(); i++) {
117  r.countBadQualityDigi(i->id());
119  output.push_back(*i);
120  }
121  return output;
122 }
123 
126  for (ZDCDigiCollection::const_iterator i=incol.begin(); i!=incol.end(); i++) {
128  r.countBadQualityDigi(i->id());
130  output.push_back(*i);
131  }
132  return output;
133 }
134 
137  for (QIE10DigiCollection::const_iterator i=incol.begin(); i!=incol.end(); i++) {
138  QIE10DataFrame df(*i);
140  r.countBadQualityDigi(i->id());
141  // Never exclude QIE10 digis as their absence would be
142  // treated as a digi with zero charged deposited in that channel
143  output.push_back(df);
144  }
145  return output;
146 }
147 
150  for (QIE11DigiCollection::const_iterator i=incol.begin(); i!=incol.end(); i++) {
151  QIE11DataFrame df(*i);
153  r.countBadQualityDigi(i->id());
155  output.push_back(df);
156  }
157  return output;
158 }
159 
160 
163 }
164 
boost::transform_iterator< IterHelp, boost::counting_iterator< int > > const_iterator
bool check< QIE11DataFrame >(const QIE11DataFrame &df, bool capcheck, bool linkerrcheck)
#define nullptr
bool check< QIE10DataFrame >(const QIE10DataFrame &df, bool capcheck, bool linkerrcheck)
std::vector< T >::const_iterator const_iterator
void push_back(T const &t)
bool check(const DataFrame &df, bool capcheck, bool dvercheck)
double energySum< QIE11DataFrame >(const QIE11DataFrame &df, int fs, int ls, const HcalDbService *conditions)
double energySum(const DataFrame &df, int fs, int ls, const HcalDbService *conditions=0)
const_iterator begin() const
void adc2fC(const HBHEDataFrame &df, CaloSamples &lf) const override
Definition: HcalCoderDb.cc:68
const_iterator end() const
def ls(path, rec=False)
Definition: eostools.py:349
bool active() const
whether any filters are on
const_iterator end() const
void setConditions(const HcalDbService *conditions)
get conditions
HBHEDigiCollection filter(const HBHEDigiCollection &incol, HcalUnpackerReport &r)
filter HB/HE data frames
HcalDataFrameFilter(bool requireCapid, bool requireDVER, bool energyFilter, int firstSample=-1, int lastSample=-1, double minAmpl=-1)
const HcalDbService * conditions_
const_iterator begin() const