CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
TrigPrimTask.cc
Go to the documentation of this file.
1 #include "../interface/TrigPrimTask.h"
2 
4 
9 
10 #include <iomanip>
11 
12 namespace ecaldqm
13 {
15  DQWorkerTask(),
16  realTps_(0),
17  runOnEmul_(false),
18  // HLTCaloPath_(""),
19  // HLTMuonPath_(""),
20  // HLTCaloBit_(false),
21  // HLTMuonBit_(false),
22  bxBinEdges_{1, 271, 541, 892, 1162, 1432, 1783, 2053, 2323, 2674, 2944, 3214, 3446, 3490, 3491, 3565},
23  bxBin_(0.),
24  towerReadouts_()
25  {
26  }
27 
28  void
30  {
31  runOnEmul_ = _params.getUntrackedParameter<bool>("runOnEmul");
32  if(!runOnEmul_){
33  MEs_.erase(std::string("EtMaxEmul"));
34  MEs_.erase(std::string("EmulMaxIndex"));
35  MEs_.erase(std::string("MatchedIndex"));
36  MEs_.erase(std::string("EtEmulError"));
37  MEs_.erase(std::string("FGEmulError"));
38  }
39  }
40 
41  void
43  {
45  }
46 
47  void
49  {
50  using namespace std;
51 
52  towerReadouts_.clear();
53 
54  realTps_ = 0;
55 
56  // HLTCaloBit_ = false;
57  // HLTMuonBit_ = false;
58 
59  int* pBin(std::upper_bound(bxBinEdges_, bxBinEdges_ + nBXBins + 1, _evt.bunchCrossing()));
60  bxBin_ = static_cast<int>(pBin - bxBinEdges_) - 0.5;
61 
62  // if(HLTCaloPath_.size() || HLTMuonPath_.size()){
63  // edm::TriggerResultsByName results(_evt.triggerResultsByName("HLT"));
64  // if(!results.isValid()) results = _evt.triggerResultsByName("RECO");
65  // if(results.isValid()){
66  // const vector<string>& pathNames(results.triggerNames());
67 
68  // size_t caloStar(HLTCaloPath_.find('*'));
69  // if(caloStar != string::npos){
70  // string caloSub(HLTCaloPath_.substr(0, caloStar));
71  // bool found(false);
72  // for(unsigned iP(0); iP < pathNames.size(); ++iP){
73  // if(pathNames[iP].substr(0, caloStar) == caloSub){
74  // HLTCaloPath_ = pathNames[iP];
75  // found = true;
76  // break;
77  // }
78  // }
79  // if(!found) HLTCaloPath_ = "";
80  // }
81 
82  // size_t muonStar(HLTMuonPath_.find('*'));
83  // if(muonStar != string::npos){
84  // string muonSub(HLTMuonPath_.substr(0, muonStar));
85  // bool found(false);
86  // for(unsigned iP(0); iP < pathNames.size(); ++iP){
87  // if(pathNames[iP].substr(0, muonStar) == muonSub){
88  // HLTMuonPath_ = pathNames[iP];
89  // found = true;
90  // break;
91  // }
92  // }
93  // if(!found) HLTMuonPath_ = "";
94  // }
95 
96  // if(HLTCaloPath_.size()){
97  // try{
98  // HLTCaloBit_ = results.accept(HLTCaloPath_);
99  // }
100  // catch(cms::Exception e){
101  // if(e.category() != "LogicError") throw e;
102  // HLTCaloPath_ = "";
103  // }
104  // }
105  // if(HLTMuonPath_.size()){
106  // try{
107  // HLTMuonBit_ = results.accept(HLTMuonPath_);
108  // }
109  // catch(cms::Exception e){
110  // if(e.category() != "LogicError") throw e;
111  // HLTMuonPath_ = "";
112  // }
113  // }
114  // }
115  // }
116  }
117 
118  template<typename DigiCollection>
119  void
120  TrigPrimTask::runOnDigis(DigiCollection const& _digis)
121  {
122  for(typename DigiCollection::const_iterator digiItr(_digis.begin()); digiItr != _digis.end(); ++digiItr){
123  EcalTrigTowerDetId ttid(getTrigTowerMap()->towerOf(digiItr->id()));
124  towerReadouts_[ttid.rawId()]++;
125  }
126  }
127 
128  void
130  {
131  MESet& meEtVsBx(MEs_.at("EtVsBx"));
132  MESet& meEtReal(MEs_.at("EtReal"));
133  MESet& meEtRealMap(MEs_.at("EtRealMap"));
134  MESet& meEtSummary(MEs_.at("EtSummary"));
135  MESet& meLowIntMap(MEs_.at("LowIntMap"));
136  MESet& meMedIntMap(MEs_.at("MedIntMap"));
137  MESet& meHighIntMap(MEs_.at("HighIntMap"));
138  MESet& meTTFlags(MEs_.at("TTFlags"));
139  MESet& meTTFMismatch(MEs_.at("TTFMismatch"));
140  MESet& meOccVsBx(MEs_.at("OccVsBx"));
141 
142  realTps_ = &_tps;
143 
144  double nTP[] = {0., 0., 0.};
145 
146  for(EcalTrigPrimDigiCollection::const_iterator tpItr(_tps.begin()); tpItr != _tps.end(); ++tpItr){
147  EcalTrigTowerDetId ttid(tpItr->id());
148  float et(tpItr->compressedEt());
149 
150  if(et > 0.){
151  if(ttid.subDet() == EcalBarrel)
152  nTP[0] += 1.;
153  else if(ttid.zside() < 0)
154  nTP[1] += 1.;
155  else
156  nTP[2] += 2.;
157  meEtVsBx.fill(ttid, bxBin_, et);
158  }
159 
160  meEtReal.fill(ttid, et);
161  meEtRealMap.fill(ttid, et);
162  meEtSummary.fill(ttid, et);
163 
164  int interest(tpItr->ttFlag() & 0x3);
165 
166  switch(interest){
167  case 0:
168  meLowIntMap.fill(ttid);
169  break;
170  case 1:
171  meMedIntMap.fill(ttid);
172  break;
173  case 3:
174  meHighIntMap.fill(ttid);
175  break;
176  default:
177  break;
178  }
179 
180  meTTFlags.fill(ttid, float(tpItr->ttFlag()));
181 
182  if((interest == 1 || interest == 3) && towerReadouts_[ttid.rawId()] != getTrigTowerMap()->constituentsOf(ttid).size())
183  meTTFMismatch.fill(ttid);
184  }
185 
186  meOccVsBx.fill(EcalBarrel, bxBin_, nTP[0]);
187  meOccVsBx.fill(-EcalEndcap, bxBin_, nTP[1]);
188  meOccVsBx.fill(EcalEndcap, bxBin_, nTP[2]);
189  }
190 
191  void
193  {
194  MESet& meEtMaxEmul(MEs_.at("EtMaxEmul"));
195  MESet& meEmulMaxIndex(MEs_.at("EmulMaxIndex"));
196  MESet& meMatchedIndex(MEs_.at("MatchedIndex"));
197  MESet& meEtEmulError(MEs_.at("EtEmulError"));
198  MESet& meFGEmulError(MEs_.at("FGEmulError"));
199 
200  for(EcalTrigPrimDigiCollection::const_iterator tpItr(_tps.begin()); tpItr != _tps.end(); ++tpItr){
201  EcalTrigTowerDetId ttid(tpItr->id());
202 
203  int et(tpItr->compressedEt());
204 
205  float maxEt(0.);
206  int iMax(0);
207  for(int iDigi(0); iDigi < 5; iDigi++){
208  float sampleEt((*tpItr)[iDigi].compressedEt());
209 
210  if(sampleEt > maxEt){
211  maxEt = sampleEt;
212  iMax = iDigi + 1;
213  }
214  }
215 
216  meEtMaxEmul.fill(ttid, maxEt);
217  if(maxEt > 0.)
218  meEmulMaxIndex.fill(ttid, iMax);
219 
220  bool match(true);
221  bool matchFG(true);
222 
224  if(realItr != realTps_->end()){
225 
226  int realEt(realItr->compressedEt());
227 
228  if(realEt > 0){
229 
230  int interest(realItr->ttFlag() & 0x3);
231  if((interest == 1 || interest == 3) && towerReadouts_[ttid.rawId()] == getTrigTowerMap()->constituentsOf(ttid).size()){
232 
233  if(et != realEt) match = false;
234  if(tpItr->fineGrain() != realItr->fineGrain()) matchFG = false;
235 
236  std::vector<int> matchedIndex(0);
237  for(int iDigi(0); iDigi < 5; iDigi++){
238  if((*tpItr)[iDigi].compressedEt() == realEt)
239  matchedIndex.push_back(iDigi + 1);
240  }
241 
242  if(!matchedIndex.size()) matchedIndex.push_back(0);
243  for(std::vector<int>::iterator matchItr(matchedIndex.begin()); matchItr != matchedIndex.end(); ++matchItr){
244  meMatchedIndex.fill(ttid, *matchItr + 0.5);
245 
246  // timing information is only within emulated TPs (real TPs have one time sample)
247  // if(HLTCaloBit_) MEs_[kTimingCalo].fill(ttid, float(*matchItr));
248  // if(HLTMuonBit_) MEs_[kTimingMuon].fill(ttid, float(*matchItr));
249  }
250  }
251 
252  }
253  }
254  else{
255  match = false;
256  matchFG = false;
257  }
258 
259  if(!match) meEtEmulError.fill(ttid);
260  if(!matchFG) meFGEmulError.fill(ttid);
261  }
262  }
263 
265 }
266 
T getUntrackedParameter(std::string const &, T const &) const
#define DEFINE_ECALDQM_WORKER(TYPE)
Definition: DQWorker.h:108
void beginEvent(edm::Event const &, edm::EventSetup const &) override
Definition: TrigPrimTask.cc:48
void setParams(edm::ParameterSet const &) override
Definition: TrigPrimTask.cc:29
std::vector< EcalTriggerPrimitiveDigi >::const_iterator const_iterator
int bunchCrossing() const
Definition: EventBase.h:66
std::map< uint32_t, unsigned > towerReadouts_
Definition: TrigPrimTask.h:44
uint32_t rawId() const
get the raw id
Definition: DetId.h:43
void addDependencies(DependencySet &) override
Definition: TrigPrimTask.cc:42
EcalTrigTowerConstituentsMap const * getTrigTowerMap()
void runOnEmulTPs(EcalTrigPrimDigiCollection const &)
std::vector< DetId > constituentsOf(const EcalTrigTowerDetId &id) const
Get the constituent detids for this tower id.
void runOnDigis(DigiCollection const &)
const_iterator end() const
EcalTrigPrimDigiCollection const * realTps_
Definition: TrigPrimTask.h:32
int bxBinEdges_[nBXBins+1]
Definition: TrigPrimTask.h:41
void runOnRealTPs(EcalTrigPrimDigiCollection const &)
MESetCollection MEs_
Definition: DQWorker.h:75
iterator find(key_type k)
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
Definition: Utils.h:10
volatile std::atomic< bool > shutdown_flag false
void push_back(Dependency const &_d)
Definition: DQWorkerTask.h:50
const_iterator begin() const