CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
HcalSeverityLevelComputer.cc
Go to the documentation of this file.
7 
8 
10  const std::string& mybit)
11 {
12  if (mybit == "HcalCellOff") setBit(HcalChannelStatus::HcalCellOff, mydef.chStatusMask);
13  else if (mybit == "HcalCellMask") setBit(HcalChannelStatus::HcalCellMask, mydef.chStatusMask);
14  else if (mybit == "HcalCellDead") setBit(HcalChannelStatus::HcalCellDead, mydef.chStatusMask);
15  else if (mybit == "HcalCellHot") setBit(HcalChannelStatus::HcalCellHot, mydef.chStatusMask);
16  else if (mybit == "HcalCellStabErr") setBit(HcalChannelStatus::HcalCellStabErr, mydef.chStatusMask);
17  else if (mybit == "HcalCellTimErr") setBit(HcalChannelStatus::HcalCellTimErr, mydef.chStatusMask);
18  else if (mybit == "HcalCellTrigMask") setBit(HcalChannelStatus::HcalCellTrigMask, mydef.chStatusMask);
19  else if (mybit == "HcalCellCaloTowerMask") setBit(HcalChannelStatus::HcalCellCaloTowerMask, mydef.chStatusMask);
20  else if (mybit == "HcalCellCaloTowerProb") setBit(HcalChannelStatus::HcalCellCaloTowerProb, mydef.chStatusMask);
21  else
22  { // error: unrecognized channel status name
23  edm::LogWarning ("HcalSeverityLevelComputer")
24  << "HcalSeverityLevelComputer: Error: ChannelStatusFlag >>" << mybit
25  << "<< unknown. Ignoring.";
26  return false;
27  }
28  return true;
29 }
30 
32  const std::string& mybit)
33 {
34  // HB, HE ++++++++++++++++++++
35  if (mybit == "HBHEHpdHitMultiplicity") setBit(HcalCaloFlagLabels::HBHEHpdHitMultiplicity, mydef.HBHEFlagMask);
36  else if (mybit == "HBHEPulseShape") setBit(HcalCaloFlagLabels::HBHEPulseShape, mydef.HBHEFlagMask);
37  else if (mybit == "HSCP_R1R2") setBit(HcalCaloFlagLabels::HSCP_R1R2, mydef.HBHEFlagMask);
38  else if (mybit == "HSCP_FracLeader") setBit(HcalCaloFlagLabels::HSCP_FracLeader, mydef.HBHEFlagMask);
39  else if (mybit == "HSCP_OuterEnergy") setBit(HcalCaloFlagLabels::HSCP_OuterEnergy, mydef.HBHEFlagMask);
40  else if (mybit == "HSCP_ExpFit") setBit(HcalCaloFlagLabels::HSCP_ExpFit, mydef.HBHEFlagMask);
41  else if (mybit == "HBHEFlatNoise") setBit(HcalCaloFlagLabels::HBHEFlatNoise, mydef.HBHEFlagMask);
42  else if (mybit == "HBHESpikeNoise") setBit(HcalCaloFlagLabels::HBHESpikeNoise, mydef.HBHEFlagMask);
43  else if (mybit == "HBHETriangleNoise") setBit(HcalCaloFlagLabels::HBHETriangleNoise, mydef.HBHEFlagMask);
44 
45  // These are multi-bit counters; we may have to revisit how to set them in the SLComputer in the future
46  else if (mybit=="HBHETimingTrustBits") setBit(HcalCaloFlagLabels::HBHETimingTrustBits, mydef.HBHEFlagMask );
47  else if (mybit=="HBHETimingShapedCutsBits") setBit(HcalCaloFlagLabels::HBHETimingShapedCutsBits, mydef.HBHEFlagMask);
48  else if (mybit=="HBHEIsolatedNoise") setBit(HcalCaloFlagLabels::HBHEIsolatedNoise, mydef.HBHEFlagMask );
49 
50  // HO ++++++++++++++++++++
51  else if (mybit == "HOBit") setBit(HcalCaloFlagLabels::HOBit, mydef.HOFlagMask);
52 
53  // HF ++++++++++++++++++++
54  else if (mybit == "HFLongShort") setBit(HcalCaloFlagLabels::HFLongShort, mydef.HFFlagMask);
55  else if (mybit == "HFDigiTime") setBit(HcalCaloFlagLabels::HFDigiTime, mydef.HFFlagMask);
56  else if (mybit == "HFInTimeWindow") setBit(HcalCaloFlagLabels::HFInTimeWindow, mydef.HFFlagMask);
57  else if (mybit == "HFS8S1Ratio") setBit(HcalCaloFlagLabels::HFS8S1Ratio, mydef.HFFlagMask);
58  else if (mybit == "HFPET") setBit(HcalCaloFlagLabels::HFPET, mydef.HFFlagMask);
59 
60  // ZDC ++++++++++++++++++++
61  else if (mybit == "ZDCBit") setBit(HcalCaloFlagLabels::ZDCBit, mydef.ZDCFlagMask);
62 
63  // Calib ++++++++++++++++++++
64  else if (mybit == "CalibrationBit") setBit(HcalCaloFlagLabels::CalibrationBit, mydef.CalibFlagMask);
65 
66  // Common subdetector bits ++++++++++++++++++++++
67  else if (mybit == "TimingSubtractedBit") setAllRHMasks(HcalCaloFlagLabels::TimingSubtractedBit, mydef);
68  else if (mybit == "TimingAddedBit") setAllRHMasks(HcalCaloFlagLabels::TimingAddedBit, mydef);
69  else if (mybit == "TimingErrorBit") setAllRHMasks(HcalCaloFlagLabels::TimingErrorBit, mydef);
70  else if (mybit == "ADCSaturationBit") setAllRHMasks(HcalCaloFlagLabels::ADCSaturationBit, mydef);
71  else if (mybit == "UserDefinedBit0") setAllRHMasks(HcalCaloFlagLabels::UserDefinedBit0, mydef);
72  else if (mybit == "UserDefinedBit1") setAllRHMasks(HcalCaloFlagLabels::UserDefinedBit1, mydef);
73  else if (mybit == "UserDefinedBit2") setAllRHMasks(HcalCaloFlagLabels::UserDefinedBit2, mydef);
74  // unknown -------------------
75  else
76  {
77  // error: unrecognized flag name
78  edm::LogWarning ("HcalSeverityLevelComputer")
79  << "HcalSeverityLevelComputer: Error: RecHitFlag >>" << mybit
80  << "<< unknown. Ignoring.";
81  return false;
82  }
83  return true;
84 }
85 
87 {
88  // initialize: get the levels and masks from the cfg:
89  typedef std::vector< edm::ParameterSet > myParameters;
90  myParameters myLevels = iConfig.getParameter<myParameters>((std::string)"SeverityLevels");
91 
92  // now run through the parameter set vector:
93  for ( myParameters::iterator itLevels = myLevels.begin(); itLevels != myLevels.end(); ++itLevels)
94  {
95  // create the basic object
97 
98  // get the level:
99  mydef.sevLevel = itLevels->getParameter<int>("Level");
100 
101  // get the RecHitFlags:
102  std::vector<std::string> myRecHitFlags =
103  itLevels->getParameter<std::vector <std::string> > ("RecHitFlags");
104 
105  // get channel statuses:
106  std::vector<std::string> myChStatuses =
107  itLevels->getParameter<std::vector <std::string> > ("ChannelStatus");
108 
109  // now translate the RecHitFlags and the ChannelStatuses into a mask each:
110  // create counters for invalid flags to be able to catch cases where a definition consists only of invalid bit names:
111  unsigned int bvalid = 0;
112  unsigned int bnonempty = 0;
113  // channel status:
114  for (unsigned k=0; k < myChStatuses.size(); k++)
115  {
116  if (myChStatuses[k].empty()) break; // empty string
117  bnonempty++;
118  bvalid+=getChStBit(mydef, myChStatuses[k]);
119  }
120  // RecHitFlag:
121  // HBHEStatusFlag, HOStatusFlag, HFStatusFlag, ZDCStatusFlag, CalibrationFlag
122  for (unsigned k=0; k < myRecHitFlags.size(); k++)
123  {
124  if (myRecHitFlags[k].empty()) break; // empty string
125  bnonempty++;
126  bvalid+=getRecHitFlag(mydef, myRecHitFlags[k]);
127  }
128 
129  // std::cout << "Made Severity Level:" << std::endl;
130  // std::cout << mydef << std::endl;
131 
132  // case where definition is made entirely out of invalid flags but not empty strings
133  if ((!bvalid) && (bnonempty))
134  {
135  edm::LogWarning ("HcalSeverityLevelComputer")
136  << "Warning: level " << mydef.sevLevel
137  << " consists of invalid definitions only: "
138  // << myRecHitFlags << "; " << myChStatuses
139  << " Ignoring definition.";
140  continue;
141  }
142 
143  // finally, append the masks to the mask vectors, sorting them according to level
144  std::vector<HcalSeverityDefinition>::iterator it = SevDef.begin();
145 
146  do
147  {
148  if (it == SevDef.end()) { SevDef.push_back(mydef); break; }
149 
150  if (it->sevLevel == mydef.sevLevel)
151  {
152  edm::LogWarning ("HcalSeverityLevelComputer")
153  << "HcalSeverityLevelComputer: Warning: level " << mydef.sevLevel
154  << " already defined. Ignoring new definition.";
155  break;
156  }
157 
158  if (it->sevLevel < mydef.sevLevel)
159  if (( (it+1) == SevDef.end()) || ( (it+1)->sevLevel > mydef.sevLevel ))
160  {
161  SevDef.insert(it+1, mydef);
162  break;
163  }
164 
165  it++;
166  }
167  while(it != SevDef.end());
168 
169  } //for (myParameters::iterator itLevels=myLevels.begin(); itLevels != myLevels.end(); ++itLevels)
170 
171  edm::LogInfo("HcalSeverityLevelComputer")
172  << "HcalSeverityLevelComputer - Summary of Severity Levels:" << std::endl;
173  for (std::vector<HcalSeverityDefinition>::iterator it = SevDef.begin(); it !=SevDef.end(); it++)
174  {
175  // debug: write the levels definitions on screen:
176  edm::LogInfo("HcalSeverityLevelComputer")
177  << (*it) << std::endl;
178  }
179 
180  //
181  // Now make the definition for recoveredRecHit
182  //
183  std::vector<std::string> myRecovered =
184  iConfig.getParameter<std::vector <std::string> > ("RecoveredRecHitBits");
186  for (unsigned k=0; k < myRecovered.size(); k++)
187  {
188  if (myRecovered[k].empty()) break;
189  getRecHitFlag( (*RecoveredRecHit_), myRecovered[k]);
190  }
191 
192  //
193  // Now make the definition for dropChannel
194  //
195  std::vector<std::string> myDrop =
196  iConfig.getParameter<std::vector <std::string> > ("DropChannelStatusBits");
198  for (unsigned k=0; k < myDrop.size(); k++)
199  {
200  if (myDrop[k].empty()) break;
201  getChStBit( (*DropChannel_), myDrop[k]);
202  }
203 
204  edm::LogInfo("HcalSeverityLevelComputer")
205  << "HcalSeverityLevelComputer - Summary for Recovered RecHit bits: \n"
206  << (*RecoveredRecHit_) << std::endl
207  << "HcalSeverityLevelComputer - Summary for Drop the Channel bits: \n"
208  << (*DropChannel_) << std::endl;
209 
210 
211 } // HcalSeverityLevelComputer::HcalSeverityLevelComputer
212 
213 
215 
216 
217 int HcalSeverityLevelComputer::getSeverityLevel(const DetId& myid, const uint32_t& myflag,
218  const uint32_t& mystatus) const
219 {
220  uint32_t myRecHitMask;
221  HcalGenericDetId myId(myid);
223 
224  // for (unsigned i=(SevDef.size()-1); i >= 0; i--) // Wrong
225  // Since i is unsigned, i >= 0 is always true,
226  // and the loop termination condition is never reached.
227  // We offset the loop index by one to fix this.
228  for (size_t j=(SevDef.size()); j > 0; j--)
229  {
230  size_t i = j - 1;
231  switch (mysubdet)
232  {
234  myRecHitMask = SevDef[i].HBHEFlagMask; break;
235  case HcalGenericDetId::HcalGenOuter : myRecHitMask = SevDef[i].HOFlagMask; break;
236  case HcalGenericDetId::HcalGenForward : myRecHitMask = SevDef[i].HFFlagMask; break;
237  case HcalGenericDetId::HcalGenZDC : myRecHitMask = SevDef[i].ZDCFlagMask; break;
238  case HcalGenericDetId::HcalGenCalibration : myRecHitMask = SevDef[i].CalibFlagMask; break;
239  default: myRecHitMask = 0;
240  }
241 
242  // for debugging:
243 // std::cout << std::hex << " SLD: RHMask 0x" << myRecHitMask
244 // << " chstmask 0x" << SevDef[i].chStatusMask
245 // << " RHmask & myflag 0x" << (myRecHitMask&myflag)
246 // << " chstmask & mystatus 0x" << (SevDef[i].chStatusMask&mystatus)
247 // << std::dec << " level = " << SevDef[i].sevLevel << std::endl;
248 
249  // true if:
250  // rechitmask empty and chstatusmask empty
251  // rechitmask empty and chstatusmask&mychstat true
252  // chstatusmask empty and rechitmask&myflag true
253  // rechitmask&myflag true OR chstatusmask&mychstat true
254 
255 
256  // if ( ( ( (!myRecHitMask) || (myRecHitMask & myflag) ) &&
257  if ( ( ( ( !SevDef[i].HBHEFlagMask
258  && !SevDef[i].HOFlagMask
259  && !SevDef[i].HFFlagMask
260  && !SevDef[i].ZDCFlagMask
261  && !SevDef[i].CalibFlagMask )
262  || (myRecHitMask & myflag) )
263  && ( (!SevDef[i].chStatusMask) || (SevDef[i].chStatusMask & mystatus) ) )
264  || ( (myRecHitMask & myflag) || (SevDef[i].chStatusMask & mystatus) ) )
265  return SevDef[i].sevLevel;
266 
267  }
268 
269  return -100; // default value, if no definition applies
270 }
271 
272 bool HcalSeverityLevelComputer::recoveredRecHit(const DetId& myid, const uint32_t& myflag) const
273 {
274  uint32_t myRecHitMask;
275  HcalGenericDetId myId(myid);
277 
278  switch (mysubdet)
279  {
281  myRecHitMask = RecoveredRecHit_->HBHEFlagMask; break;
282  case HcalGenericDetId::HcalGenOuter : myRecHitMask = RecoveredRecHit_->HOFlagMask; break;
283  case HcalGenericDetId::HcalGenForward : myRecHitMask = RecoveredRecHit_->HFFlagMask; break;
284  case HcalGenericDetId::HcalGenZDC : myRecHitMask = RecoveredRecHit_->ZDCFlagMask; break;
286  default: myRecHitMask = 0;
287  }
288 
289  if (myRecHitMask & myflag)
290  return true;
291 
292  return false;
293 }
294 
295 bool HcalSeverityLevelComputer::dropChannel(const uint32_t& mystatus) const
296 {
297  if (DropChannel_->chStatusMask & mystatus)
298  return true;
299 
300  return false;
301 }
302 
303 void HcalSeverityLevelComputer::setBit(const unsigned bitnumber, uint32_t& where)
304 {
305  uint32_t statadd = 0x1<<(bitnumber);
306  where = where|statadd;
307 }
308 
310 {
311  setBit(bitnumber, mydef.HBHEFlagMask);
312  setBit(bitnumber, mydef.HOFlagMask);
313  setBit(bitnumber, mydef.HFFlagMask);
314  setBit(bitnumber, mydef.ZDCFlagMask);
315  setBit(bitnumber, mydef.CalibFlagMask);
316 }
317 
319 {
320  s << "Hcal Severity Level Definition, Level = " << def.sevLevel << std::endl;
321  s << std::hex << std::showbase;
322  s << " channel status mask = " << def.chStatusMask << std::endl;
323  s << " HBHEFlagMask = " << def.HBHEFlagMask << std::endl;
324  s << " HOFlagMask = " << def.HOFlagMask << std::endl;
325  s << " HFFlagMask = " << def.HFFlagMask << std::endl;
326  s << " ZDCFlagMask = " << def.ZDCFlagMask << std::endl;
327  s << " CalibFlagMask = " << def.CalibFlagMask << std::dec << std::noshowbase << std::endl;
328  return s;
329 }
T getParameter(std::string const &) const
int i
Definition: DBlmapReader.cc:9
HcalSeverityLevelComputer(const edm::ParameterSet &)
std::ostream & operator<<(std::ostream &out, const ALILine &li)
Definition: ALILine.cc:187
std::vector< HcalSeverityDefinition > SevDef
bool recoveredRecHit(const DetId &myid, const uint32_t &myflag) const
int j
Definition: DBlmapReader.cc:9
bool dropChannel(const uint32_t &mystatus) const
HcalSeverityDefinition * RecoveredRecHit_
int k[5][pyjets_maxn]
Definition: DetId.h:20
bool getRecHitFlag(HcalSeverityDefinition &mydef, const std::string &mybit)
int getSeverityLevel(const DetId &myid, const uint32_t &myflag, const uint32_t &mystatus) const
void setBit(const unsigned bitnumber, uint32_t &where)
HcalSeverityDefinition * DropChannel_
string s
Definition: asciidump.py:422
HcalGenericSubdetector genericSubdet() const
void setAllRHMasks(const unsigned bitnumber, HcalSeverityDefinition &mydef)
JetCorrectorParameters::Definitions def
Definition: classes.h:10
bool getChStBit(HcalSeverityDefinition &mydef, const std::string &mybit)