CMS 3D CMS Logo

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 
17 
20 
22 
24 
25 using namespace edm;
26 using namespace std;
27 using namespace l1t;
28 
29 // class declaration
30 class L1TGlobalSummary : public edm::one::EDAnalyzer<edm::one::WatchRuns> {
31 public:
32  explicit L1TGlobalSummary(const edm::ParameterSet&);
33  ~L1TGlobalSummary() override{};
34  void analyze(const edm::Event&, const edm::EventSetup&) override;
35  void beginRun(Run const&, EventSetup const&) override;
36  void endRun(Run const&, EventSetup const&) override;
37  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
38 
39 private:
48  int minBx_;
49  int maxBx_;
51 
52  std::vector<int> decisionCount_;
53  std::vector<int> intermCount_;
54  std::vector<int> finalCount_;
56 };
57 
59  algInputTag_ = iConfig.getParameter<InputTag>("AlgInputTag");
60  extInputTag_ = iConfig.getParameter<InputTag>("ExtInputTag");
61  algToken_ = consumes<BXVector<GlobalAlgBlk>>(algInputTag_);
62  extToken_ = consumes<BXVector<GlobalExtBlk>>(extInputTag_);
63  dumpRecord_ = iConfig.getParameter<bool>("DumpRecord");
64  dumpTriggerResults_ = iConfig.getParameter<bool>("DumpTrigResults");
65  dumpTriggerSummary_ = iConfig.getParameter<bool>("DumpTrigSummary");
66  readPrescalesFromFile_ = iConfig.getParameter<bool>("ReadPrescalesFromFile");
67  minBx_ = iConfig.getParameter<int>("MinBx");
68  maxBx_ = iConfig.getParameter<int>("MaxBx");
70  if (dumpTriggerResults_ || dumpTriggerSummary_) {
71  useEventSetupIn = l1t::UseEventSetupIn::RunAndEvent;
72  }
73  gtUtil_ = new L1TGlobalUtil(iConfig, consumesCollector(), *this, algInputTag_, extInputTag_, useEventSetupIn);
74  finalOrCount = 0;
75 
76  if (readPrescalesFromFile_) {
77  std::string preScaleFileName = iConfig.getParameter<std::string>("psFileName");
78  unsigned int preScColumn = iConfig.getParameter<int>("psColumn");
79  gtUtil_->OverridePrescalesAndMasks(preScaleFileName, preScColumn);
80  }
81 }
82 
85  // These parameters are part of the L1T/HLT interface, avoid changing if possible::
86  desc.add<edm::InputTag>("AlgInputTag", edm::InputTag(""))
87  ->setComment("InputTag for uGT Algorithm Block (required parameter: default value is invalid)");
88  desc.add<edm::InputTag>("ExtInputTag", edm::InputTag(""))
89  ->setComment("InputTag for uGT External Block (required parameter: default value is invalid)");
90  // These parameters have well defined default values and are not currently
91  // part of the L1T/HLT interface. They can be cleaned up or updated at will:
92  desc.add<int>("MinBx", 0);
93  desc.add<int>("MaxBx", 0);
94  desc.add<bool>("DumpTrigResults", false);
95  desc.add<bool>("DumpRecord", false);
96  desc.add<bool>("DumpTrigSummary", true);
97  desc.add<bool>("ReadPrescalesFromFile", false);
98  desc.add<std::string>("psFileName", "prescale_L1TGlobal.csv")
99  ->setComment("File should be located in directory: L1Trigger/L1TGlobal/data/Luminosity/startup");
100  desc.add<int>("psColumn", 0);
101  descriptions.add("L1TGlobalSummary", desc);
102 }
103 
104 void L1TGlobalSummary::beginRun(Run const&, EventSetup const& evSetup) {
105  decisionCount_.clear();
106  intermCount_.clear();
107  finalCount_.clear();
108 
109  finalOrCount = 0;
110  gtUtil_->retrieveL1Setup(evSetup);
111 
112  int size = gtUtil_->decisionsInitial().size();
113  decisionCount_.resize(size);
114  intermCount_.resize(size);
115  finalCount_.resize(size);
116  std::fill(decisionCount_.begin(), decisionCount_.end(), 0);
117  std::fill(intermCount_.begin(), intermCount_.end(), 0);
118  std::fill(finalCount_.begin(), finalCount_.end(), 0);
119 }
120 
122  if (dumpTriggerSummary_) {
123  LogVerbatim out("L1TGlobalSummary");
124  if (gtUtil_->valid()) {
125  out << "================== L1 Trigger Report "
126  "=====================================================================\n";
127  out << '\n';
128  out << " L1T menu Name : " << gtUtil_->gtTriggerMenuName() << '\n';
129  out << " L1T menu Version: " << gtUtil_->gtTriggerMenuVersion() << '\n';
130  out << " L1T menu Comment: " << gtUtil_->gtTriggerMenuComment() << '\n';
131  out << '\n';
132  out << " Bit Algorithm Name Init PScd Final PS Factor Num Bx "
133  "Masked\n";
134  out << "========================================================================================================="
135  "===\n";
136  auto const& prescales = gtUtil_->prescales();
137  auto const& masks = gtUtil_->masks();
138  for (unsigned int i = 0; i < prescales.size(); i++) {
139  // get the prescale and mask (needs some error checking here)
140  int resultInit = decisionCount_[i];
141  int resultPre = intermCount_[i];
142  int resultFin = finalCount_[i];
143 
144  auto const& name = prescales.at(i).first;
145  if (name != "NULL") {
146  double prescale = prescales.at(i).second;
147  auto const& mask = masks.at(i).second;
148  out << std::dec << setfill(' ') << " " << setw(5) << i << " " << setw(40) << name << " " << setw(7)
149  << resultInit << setw(7) << resultPre << setw(7) << resultFin << setw(10) << prescale << setw(11)
150  << mask.size() << '\n';
151  }
152  }
153  out << " Final OR Count = " << finalOrCount << '\n';
154  out << "========================================================================================================="
155  "===\n";
156  } else {
157  out << "================== No Level-1 Trigger menu "
158  "===============================================================\n";
159  }
160  }
161 }
162 
163 // loop over events
166  iEvent.getByToken(algToken_, alg);
167 
169  iEvent.getByToken(extToken_, ext);
170 
171  LogDebug("l1t|Global") << "retrieved L1 GT data blocks" << endl;
172 
173  if (dumpTriggerResults_ || dumpTriggerSummary_) {
174  //Fill the L1 result maps
175  gtUtil_->retrieveL1(iEvent, evSetup, algToken_);
176 
177  LogDebug("l1t|Global") << "retrieved L1 data from GT Util" << endl;
178 
179  // grab the map for the final decisions
180  const std::vector<std::pair<std::string, bool>> initialDecisions = gtUtil_->decisionsInitial();
181  const std::vector<std::pair<std::string, bool>> intermDecisions = gtUtil_->decisionsInterm();
182  const std::vector<std::pair<std::string, bool>> finalDecisions = gtUtil_->decisionsFinal();
183  const std::vector<std::pair<std::string, double>> prescales = gtUtil_->prescales();
184  const std::vector<std::pair<std::string, std::vector<int>>> masks = gtUtil_->masks();
185 
186  if ((decisionCount_.size() != gtUtil_->decisionsInitial().size()) ||
187  (intermCount_.size() != gtUtil_->decisionsInterm().size()) ||
188  (finalCount_.size() != gtUtil_->decisionsFinal().size())) {
189  LogError("l1t|Global") << "gtUtil sizes inconsistent across run." << endl;
190  return;
191  }
192 
193  if (dumpTriggerResults_) {
194  cout << "\n===================================== Trigger Results for BX=0 "
195  "=============================================\n"
196  << endl;
197  cout << " Bit Algorithm Name Init aBXM Final PS Factor Num Bx "
198  "Masked"
199  << endl;
200  cout << "========================================================================================================"
201  "===="
202  << endl;
203  }
204  for (unsigned int i = 0; i < initialDecisions.size(); i++) {
205  // get the name and trigger result
206  std::string name = (initialDecisions.at(i)).first;
207  if (name == "NULL")
208  continue;
209 
210  bool resultInit = (initialDecisions.at(i)).second;
211 
212  // get prescaled and final results (need some error checking here)
213  bool resultInterm = (intermDecisions.at(i)).second;
214  bool resultFin = (finalDecisions.at(i)).second;
215 
216  // get the prescale and mask (needs some error checking here)
217  double prescale = (prescales.at(i)).second;
218  std::vector<int> mask = (masks.at(i)).second;
219 
220  if (resultInit)
221  decisionCount_[i]++;
222  if (resultInterm)
223  intermCount_[i]++;
224  if (resultFin)
225  finalCount_[i]++;
226 
227  //cout << i << " " << decisionCount_[i] << "\n";
228 
229  if (dumpTriggerResults_) {
230  cout << std::dec << setfill(' ') << " " << setw(5) << i << " " << setw(40) << name.c_str() << " "
231  << setw(7) << resultInit << setw(7) << resultInterm << setw(7) << resultFin << setw(10) << prescale
232  << setw(11) << mask.size() << endl;
233  }
234  }
235  bool finOR = gtUtil_->getFinalOR();
236  if (finOR)
237  finalOrCount++;
238  if (dumpTriggerResults_) {
239  cout << " FinalOR = " << finOR << endl;
240  cout << "========================================================================================================"
241  "==="
242  << endl;
243  }
244  }
245 
246  if (dumpRecord_) {
247  //int i = 0; // now now just printing BX=0...
248  for (int i = minBx_; i <= maxBx_; i++) {
249  // Dump the coutput record
250  cout << " ------ Bx= " << i << " ext ----------" << endl;
251  if (ext.isValid()) {
252  if (i >= ext->getFirstBX() && i <= ext->getLastBX()) {
253  for (std::vector<GlobalExtBlk>::const_iterator extBlk = ext->begin(i); extBlk != ext->end(i); ++extBlk) {
254  extBlk->print(cout);
255  cout << std::dec;
256  }
257  } else {
258  cout << "No Ext Conditions stored for this bx " << i << endl;
259  }
260  } else {
261  LogError("L1TGlobalSummary") << "No ext Data in this event " << endl;
262  }
263 
264  // Dump the coutput record
265  cout << " ------ Bx= " << i << " alg ----------" << endl;
266  if (alg.isValid()) {
267  if (i >= alg->getFirstBX() && i <= alg->getLastBX()) {
268  for (std::vector<GlobalAlgBlk>::const_iterator algBlk = alg->begin(i); algBlk != alg->end(i); ++algBlk) {
269  algBlk->print(cout);
270  cout << std::dec;
271  }
272  } else {
273  cout << "No Alg Decisions stored for this bx " << i << endl;
274  }
275  } else {
276  LogError("L1TGlobalSummary") << "No alg Data in this event " << endl;
277  }
278  }
279  }
280 }
281 
ConfigurationDescriptions.h
L1TGlobalSummary::minBx_
int minBx_
Definition: L1TGlobalSummary.cc:48
Ecal2004TBTDCRanges_v1_cff.endRun
endRun
Definition: Ecal2004TBTDCRanges_v1_cff.py:4
ext
Definition: memstream.h:15
EDAnalyzer.h
mps_fire.i
i
Definition: mps_fire.py:428
MessageLogger.h
L1TGlobalSummary::finalCount_
std::vector< int > finalCount_
Definition: L1TGlobalSummary.cc:54
L1TGlobalSummary::maxBx_
int maxBx_
Definition: L1TGlobalSummary.cc:49
edm::Run
Definition: Run.h:45
edm
HLT enums.
Definition: AlignableModifier.h:19
GlobalExtBlk.h
gather_cfg.cout
cout
Definition: gather_cfg.py:144
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89353
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
l1t::UseEventSetupIn::Run
edm::second
U second(std::pair< T, U > const &p)
Definition: ParameterSet.cc:222
l1t::UseEventSetupIn
UseEventSetupIn
Definition: L1TGlobalUtil.h:42
edm::one::EDAnalyzer
Definition: EDAnalyzer.h:30
edm::Handle
Definition: AssociativeIterator.h:50
L1TGlobalSummary::dumpRecord_
bool dumpRecord_
Definition: L1TGlobalSummary.cc:44
L1TGlobalSummary::intermCount_
std::vector< int > intermCount_
Definition: L1TGlobalSummary.cc:53
edm::first
T first(std::pair< T, U > const &p)
Definition: ParameterSet.cc:217
L1TGlobalSummary::extToken_
EDGetToken extToken_
Definition: L1TGlobalSummary.cc:43
MakerMacros.h
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
L1TGlobalSummary::dumpTriggerResults_
bool dumpTriggerResults_
Definition: L1TGlobalSummary.cc:45
edm::ConfigurationDescriptions::add
void add(std::string const &label, ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:57
L1TGlobalSummary::L1TGlobalSummary
L1TGlobalSummary(const edm::ParameterSet &)
Definition: L1TGlobalSummary.cc:58
L1TGlobalSummary::endRun
void endRun(Run const &, EventSetup const &) override
Definition: L1TGlobalSummary.cc:121
l1t::L1TGlobalUtil
Definition: L1TGlobalUtil.h:44
L1TGlobalSummary::algInputTag_
InputTag algInputTag_
Definition: L1TGlobalSummary.cc:40
fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
L1TGlobalSummary::finalOrCount
int finalOrCount
Definition: L1TGlobalSummary.cc:55
L1TGlobalSummary::readPrescalesFromFile_
bool readPrescalesFromFile_
Definition: L1TGlobalSummary.cc:47
EDGetToken.h
L1TGlobalSummary::dumpTriggerSummary_
bool dumpTriggerSummary_
Definition: L1TGlobalSummary.cc:46
edm::ConfigurationDescriptions
Definition: ConfigurationDescriptions.h:28
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
ntuplemaker.fill
fill
Definition: ntuplemaker.py:304
L1TGlobalSummary::beginRun
void beginRun(Run const &, EventSetup const &) override
Definition: L1TGlobalSummary.cc:104
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:223
L1TGlobalSummary::analyze
void analyze(const edm::Event &, const edm::EventSetup &) override
Definition: L1TGlobalSummary.cc:164
edm::ParameterSet
Definition: ParameterSet.h:47
Event.h
l1t
delete x;
Definition: CaloConfig.h:22
hltrates_dqm_sourceclient-live_cfg.prescales
prescales
Definition: hltrates_dqm_sourceclient-live_cfg.py:90
iEvent
int iEvent
Definition: GenABIO.cc:224
L1TGlobalSummary::algToken_
EDGetToken algToken_
Definition: L1TGlobalSummary.cc:42
GlobalAlgBlk.h
analyze
example_stream void analyze(const edm::Event &, const edm::EventSetup &) override
edm::EventSetup
Definition: EventSetup.h:57
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
edm::EDGetToken
Definition: EDGetToken.h:35
prescale
Definition: PrescaleEventFilter.cc:32
l1t::UseEventSetupIn::RunAndEvent
InputTag.h
submitPVResolutionJobs.desc
string desc
Definition: submitPVResolutionJobs.py:251
std
Definition: JetResolutionObject.h:76
Frameworkfwd.h
L1TGlobalSummary::extInputTag_
InputTag extInputTag_
Definition: L1TGlobalSummary.cc:41
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
EventSetup.h
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
L1TGlobalUtil.h
L1TGlobalSummary::~L1TGlobalSummary
~L1TGlobalSummary() override
Definition: L1TGlobalSummary.cc:33
MillePedeFileConverter_cfg.out
out
Definition: MillePedeFileConverter_cfg.py:31
L1TGlobalSummary::gtUtil_
L1TGlobalUtil * gtUtil_
Definition: L1TGlobalSummary.cc:50
L1TGlobalSummary
Definition: L1TGlobalSummary.cc:30
ParameterSet.h
L1TGlobalSummary_cfi.L1TGlobalSummary
L1TGlobalSummary
Definition: L1TGlobalSummary_cfi.py:4
edm::HandleBase::isValid
bool isValid() const
Definition: HandleBase.h:70
L1TGlobalSummary::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Definition: L1TGlobalSummary.cc:83
edm::Event
Definition: Event.h:73
edm::Log
Definition: MessageLogger.h:70
TauDecayModes.dec
dec
Definition: TauDecayModes.py:143
edm::InputTag
Definition: InputTag.h:15
L1TGlobalSummary::decisionCount_
std::vector< int > decisionCount_
Definition: L1TGlobalSummary.cc:52
findQualityFiles.size
size
Write out results.
Definition: findQualityFiles.py:443