CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
L1TGlobalSummary.cc
Go to the documentation of this file.
1 // L1TGlobalSummary: Use L1TGlobalUtils to print summary of L1TGlobal output
2 //
3 // author: Brian Winer Ohio State
4 //
5 
6 #include <fstream>
7 #include <iomanip>
8 
18 
21 
23 
25 
26 using namespace edm;
27 using namespace std;
28 using namespace l1t;
29 
30 
31 // class declaration
32 class L1TGlobalSummary : public edm::one::EDAnalyzer<edm::one::WatchRuns> {
33 public:
34  explicit L1TGlobalSummary(const edm::ParameterSet&);
35  virtual ~L1TGlobalSummary(){};
36  virtual void analyze(const edm::Event&, const edm::EventSetup&) override;
37  virtual void beginRun(Run const&, EventSetup const&) override;
38  virtual void endRun(Run const&, EventSetup const&) override;
39  static void fillDescriptions(edm::ConfigurationDescriptions & descriptions);
40 
41 private:
49  int minBx_;
50  int maxBx_;
52 
53  std::vector<int> decisionCount_;
54  std::vector<int> intermCount_;
55  std::vector<int> finalCount_;
57 };
58 
60  algInputTag_ = iConfig.getParameter<InputTag>("AlgInputTag");
61  extInputTag_ = iConfig.getParameter<InputTag>("ExtInputTag");
62  algToken_ = consumes<BXVector<GlobalAlgBlk>>(algInputTag_);
63  extToken_ = consumes<BXVector<GlobalExtBlk>>(extInputTag_);
64  dumpRecord_ = iConfig.getParameter<bool>("DumpRecord");
65  dumpTriggerResults_ = iConfig.getParameter<bool>("DumpTrigResults");
66  dumpTriggerSummary_ = iConfig.getParameter<bool>("DumpTrigSummary");
67  minBx_ = iConfig.getParameter<int>("MinBx");
68  maxBx_ = iConfig.getParameter<int>("MaxBx");
69  gtUtil_ = new L1TGlobalUtil(iConfig, consumesCollector(), *this, algInputTag_, extInputTag_);
70  finalOrCount = 0;
71 }
72 
75  // These parameters are part of the L1T/HLT interface, avoid changing if possible::
76  desc.add<edm::InputTag> ("AlgInputTag", edm::InputTag(""))->setComment("InputTag for uGT Algorithm Block (required parameter: default value is invalid)");
77  desc.add<edm::InputTag> ("ExtInputTag", edm::InputTag(""))->setComment("InputTag for uGT External Block (required parameter: default value is invalid)");
78  // These parameters have well defined default values and are not currently
79  // part of the L1T/HLT interface. They can be cleaned up or updated at will:
80  desc.add<int> ("MinBx",0);
81  desc.add<int> ("MaxBx",0);
82  desc.add<bool> ("DumpTrigResults",false);
83  desc.add<bool> ("DumpRecord",false);
84  desc.add<bool> ("DumpTrigSummary",true);
85  descriptions.add("L1TGlobalSummary", desc);
86 }
87 
88 void L1TGlobalSummary::beginRun(Run const&, EventSetup const& evSetup){
89  decisionCount_.clear();
90  intermCount_.clear();
91  finalCount_.clear();
92 
93  finalOrCount = 0;
94  gtUtil_->retrieveL1Setup(evSetup);
95 
96  int size = gtUtil_->decisionsInitial().size();
97  decisionCount_ .resize(size);
98  intermCount_ .resize(size);
99  finalCount_ .resize(size);
100  std::fill(decisionCount_.begin(), decisionCount_.end(), 0);
101  std::fill(intermCount_.begin(), intermCount_.end(), 0);
102  std::fill(finalCount_.begin(), finalCount_.end(), 0);
103 
104 }
105 
107 
108  if(dumpTriggerSummary_) {
109 
110  const std::vector<std::pair<std::string, int> > prescales = gtUtil_->prescales();
111  const std::vector<std::pair<std::string, bool> > masks = gtUtil_->masks();
112  const std::vector<std::pair<std::string, bool> > vetoMasks = gtUtil_->vetoMasks();
113 
114  // Dump the results
115  LogVerbatim("L1TGlobalSummary") << " " << endl;
116  LogVerbatim("L1TGlobalSummary") << " L1T menu Name : " << gtUtil_->gtTriggerMenuName() << endl;
117  LogVerbatim("L1TGlobalSummary") << " L1T menu Version: " << gtUtil_->gtTriggerMenuVersion() << endl;
118  LogVerbatim("L1TGlobalSummary") << " L1T menu Comment: " << gtUtil_->gtTriggerMenuComment() << endl;
119  LogVerbatim("L1TGlobalSummary") << " " << endl;
120  LogVerbatim("L1TGlobalSummary") << " Bit Algorithm Name Init PScd Final PS Factor Masked Veto " << endl;
121  LogVerbatim("L1TGlobalSummary") << "============================================================================================================" << endl;
122  for(unsigned int i=0; i<prescales.size(); i++) {
123 
124 
125  // get the prescale and mask (needs some error checking here)
126  int resultInit = decisionCount_[i];
127  int resultPre = intermCount_[i];
128  int resultFin = finalCount_[i];
129 
130  std::string name = (prescales.at(i)).first;
131  int prescale = (prescales.at(i)).second;
132  bool mask = (masks.at(i)).second;
133  bool veto = (vetoMasks.at(i)).second;
134 
135  if(name != "NULL") LogVerbatim("L1TGlobalSummary") << std::dec << setfill(' ') << " " << setw(5) << i << " " << setw(40) << name.c_str() << " " << setw(7) << resultInit << setw(7) << resultPre << setw(7) << resultFin << setw(10) << prescale << setw(11) << mask << setw(9) << veto << endl;
136  }
137  LogVerbatim("L1TGlobalSummary") << " Final OR Count = " << finalOrCount <<endl;
138  LogVerbatim("L1TGlobalSummary") << "===========================================================================================================" << endl;
139  }
140 
141 }
142 
143 // loop over events
145 
147  iEvent.getByToken(algToken_,alg);
148 
150  iEvent.getByToken(extToken_,ext);
151 
152  LogDebug("l1t|Global") << "retrieved L1 GT data blocks" << endl;
153 
154  if(dumpTriggerResults_ || dumpTriggerSummary_) {
155 
156  //Fill the L1 result maps
157  gtUtil_->retrieveL1(iEvent,evSetup,algToken_);
158 
159  LogDebug("l1t|Global") << "retrieved L1 data from GT Util" << endl;
160 
161  // grab the map for the final decisions
162  const std::vector<std::pair<std::string, bool> > initialDecisions = gtUtil_->decisionsInitial();
163  const std::vector<std::pair<std::string, bool> > intermDecisions = gtUtil_->decisionsInterm();
164  const std::vector<std::pair<std::string, bool> > finalDecisions = gtUtil_->decisionsFinal();
165  const std::vector<std::pair<std::string, int> > prescales = gtUtil_->prescales();
166  const std::vector<std::pair<std::string, bool> > masks = gtUtil_->masks();
167  const std::vector<std::pair<std::string, bool> > vetoMasks = gtUtil_->vetoMasks();
168 
169  if ((decisionCount_.size() != gtUtil_->decisionsInitial().size())
170  ||(intermCount_.size() != gtUtil_->decisionsInterm().size())
171  ||(finalCount_.size() != gtUtil_->decisionsFinal().size())){
172  LogError("l1t|Global") << "gtUtil sizes inconsistent across run." << endl;
173  return;
174  }
175 
176  if(dumpTriggerResults_){
177  cout << " Bit Algorithm Name Init aBXM Final PS Factor Masked Veto " << endl;
178  cout << "============================================================================================================" << endl;
179  }
180  for(unsigned int i=0; i<initialDecisions.size(); i++) {
181 
182  // get the name and trigger result
183  std::string name = (initialDecisions.at(i)).first;
184  if(name == "NULL") continue;
185 
186  bool resultInit = (initialDecisions.at(i)).second;
187 
188  // get prescaled and final results (need some error checking here)
189  bool resultInterm = (intermDecisions.at(i)).second;
190  bool resultFin = (finalDecisions.at(i)).second;
191 
192  // get the prescale and mask (needs some error checking here)
193  int prescale = (prescales.at(i)).second;
194  bool mask = (masks.at(i)).second;
195  bool veto = (vetoMasks.at(i)).second;
196 
197  if (resultInit) decisionCount_[i]++;
198  if (resultInterm) intermCount_[i]++;
199  if (resultFin) finalCount_[i]++;
200 
201  //cout << i << " " << decisionCount_[i] << "\n";
202 
203  if(dumpTriggerResults_){
204  cout << std::dec << setfill(' ') << " " << setw(5) << i << " " << setw(40) << name.c_str() << " " << setw(7) << resultInit << setw(7) << resultInterm << setw(7) << resultFin << setw(10) << prescale << setw(11) << mask << setw(9) << veto << endl;
205  }
206  }
207  bool finOR = gtUtil_->getFinalOR();
208  if (finOR) finalOrCount++;
209  if(dumpTriggerResults_){
210  cout << " FinalOR = " << finOR <<endl;
211  cout << "===========================================================================================================" << endl;
212  }
213  }
214 
215  if (dumpRecord_){
216  int i = 0; // now now just printing BX=0...
217 
218  // Dump the coutput record
219  cout << " ------ ext ----------" << endl;
220  if(ext.isValid()) {
221  if(i>=ext->getFirstBX() && i<=ext->getLastBX()) {
222  for(std::vector<GlobalExtBlk>::const_iterator extBlk = ext->begin(i); extBlk != ext->end(i); ++extBlk) {
223  extBlk->print(cout);
224  }
225  } else {
226  cout << "No Ext Conditions stored for this bx " << i << endl;
227  }
228  } else {
229  LogError("L1TGlobalSummary") << "No ext Data in this event " << endl;
230  }
231 
232  // Dump the coutput record
233  cout << " ------ alg ----------" << endl;
234  if(alg.isValid()) {
235  if(i>=alg->getFirstBX() && i<=alg->getLastBX()) {
236  for(std::vector<GlobalAlgBlk>::const_iterator algBlk = alg->begin(i); algBlk != alg->end(i); ++algBlk) {
237  algBlk->print(cout);
238  }
239  } else {
240  cout << "No Alg Decisions stored for this bx " << i << endl;
241  }
242  } else {
243  LogError("L1TGlobalSummary") << "No alg Data in this event " << endl;
244  }
245  }
246 
247 }
248 
251 
#define LogDebug(id)
T getParameter(std::string const &) const
int i
Definition: DBlmapReader.cc:9
string fill
Definition: lumiContext.py:319
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:457
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
virtual void analyze(const edm::Event &, const edm::EventSetup &) override
L1TGlobalUtil * gtUtil_
U second(std::pair< T, U > const &p)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
int iEvent
Definition: GenABIO.cc:230
std::vector< int > finalCount_
std::vector< int > decisionCount_
ParameterDescriptionBase * add(U const &iLabel, T const &value)
bool isValid() const
Definition: HandleBase.h:75
virtual ~L1TGlobalSummary()
void add(std::string const &label, ParameterSetDescription const &psetDescription)
virtual void endRun(Run const &, EventSetup const &) override
constexpr uint32_t masks[]
Definition: CaloRecHit.cc:12
tuple cout
Definition: gather_cfg.py:145
T first(std::pair< T, U > const &p)
std::vector< int > intermCount_
tuple size
Write out results.
L1TGlobalSummary(const edm::ParameterSet &)
virtual void beginRun(Run const &, EventSetup const &) override
Definition: Run.h:42