CMS 3D CMS Logo

L1TGlobalPrescalesVetosESProducer.cc
Go to the documentation of this file.
1 
10 // system include files
11 #include <memory>
12 #include <iostream>
13 #include <fstream>
14 #include <unistd.h>
15 #include <cstdio>
16 #include <cstdlib>
17 
18 #include "tmEventSetup/tmEventSetup.hh"
19 #include "tmEventSetup/esTriggerMenu.hh"
20 #include "tmEventSetup/esAlgorithm.hh"
21 #include "tmEventSetup/esCondition.hh"
22 #include "tmEventSetup/esObject.hh"
23 #include "tmEventSetup/esCut.hh"
24 #include "tmEventSetup/esScale.hh"
25 #include "tmGrammar/Algorithm.hh"
26 
33 
35 
38 
42 
43 using namespace std;
44 using namespace edm;
45 using namespace l1t;
46 //
47 // class declaration
48 //
49 
51 public:
54 
55  using ReturnType = std::unique_ptr<L1TGlobalPrescalesVetos>;
56 
57  ReturnType produce(const L1TGlobalPrescalesVetosRcd&);
58 
59 private:
61 
62  unsigned int m_numberPhysTriggers;
65 
66  std::vector<std::vector<int> > m_initialPrescaleFactorsAlgoTrig;
67  std::vector<unsigned int> m_initialTriggerMaskAlgoTrig;
69  std::map<int, std::vector<int> > m_initialTriggerAlgoBxMaskAlgoTrig;
70 };
71 
72 //
73 // constants, enums and typedefs
74 //
75 
76 //
77 // static data member definitions
78 //
79 
80 //
81 // constructors and destructor
82 //
84  : data_(new L1TGlobalPrescalesVetos()) {
85  //the following line is needed to tell the framework what
86  // data is being produced
87  setWhatProduced(this);
88  //setWhatProduced(this, conf.getParameter<std::string>("label"));
89 
91 
92  // directory in /data/Luminosity for the trigger menu
93  std::string menuDir = conf.getParameter<std::string>("TriggerMenuLuminosity");
94  //std::string menuDir = "startup";
95 
96  m_verbosity = conf.getParameter<int>("Verbosity");
97  m_bx_mask_default = conf.getParameter<int>("AlgoBxMaskDefault");
98 
99  // XML files
100  std::string prescalesFileName = conf.getParameter<std::string>("PrescaleXMLFile");
101  std::string algobxmaskFileName = conf.getParameter<std::string>("AlgoBxMaskXMLFile");
102  std::string finormaskFileName = conf.getParameter<std::string>("FinOrMaskXMLFile");
103  std::string vetomaskFileName = conf.getParameter<std::string>("VetoMaskXMLFile");
104 
105  // Full path
106  edm::FileInPath f1_prescale("L1Trigger/L1TGlobal/data/Luminosity/" + menuDir + "/" + prescalesFileName);
107  std::string m_prescaleFile = f1_prescale.fullPath();
108 
109  edm::FileInPath f1_mask_algobx("L1Trigger/L1TGlobal/data/Luminosity/" + menuDir + "/" + algobxmaskFileName);
110  std::string m_algobxmaskFile = f1_mask_algobx.fullPath();
111 
112  edm::FileInPath f1_mask_finor("L1Trigger/L1TGlobal/data/Luminosity/" + menuDir + "/" + finormaskFileName);
113  std::string m_finormaskFile = f1_mask_finor.fullPath();
114 
115  edm::FileInPath f1_mask_veto("L1Trigger/L1TGlobal/data/Luminosity/" + menuDir + "/" + vetomaskFileName);
116  std::string m_vetomaskFile = f1_mask_veto.fullPath();
117 
118  // XML payloads
119  std::string xmlPayload_prescale;
120  std::string xmlPayload_mask_algobx;
121  std::string xmlPayload_mask_finor;
122  std::string xmlPayload_mask_veto;
123 
124  std::vector<std::vector<int> > prescales;
125  std::vector<unsigned int> triggerMasks;
126  std::vector<int> triggerVetoMasks;
127  std::map<int, std::vector<int> > triggerAlgoBxMaskAlgoTrig;
128 
129  // Prescales
130  std::ifstream input_prescale;
131  input_prescale.open(m_prescaleFile);
132  if (not m_prescaleFile.empty() and not input_prescale) {
133  edm::LogError("L1TGlobalPrescalesVetosESProducer")
134  << "\nCould not find prescale file: " << m_prescaleFile
135  << "\nDeafulting to a single prescale column, with all prescales set to 1 (unprescaled)";
136 
137  const int inputDefaultPrescale = 1;
138  // by default, fill a single prescale column
139  prescales.push_back(std::vector<int>(m_numberPhysTriggers, inputDefaultPrescale));
140  } else {
141  while (!input_prescale.eof()) {
142  string tmp;
143  getline(input_prescale, tmp, '\n');
144  xmlPayload_prescale.append(tmp);
145  }
146 
147  l1t::XmlConfigParser xmlReader_prescale;
148  l1t::TriggerSystem ts_prescale;
149  ts_prescale.addProcessor("uGtProcessor", "uGtProcessor", "-1", "-1");
150 
151  // run the parser
152  xmlReader_prescale.readDOMFromString(xmlPayload_prescale); // initialize it
153  xmlReader_prescale.readRootElement(ts_prescale, "uGT"); // extract all of the relevant context
154  ts_prescale.setConfigured();
155 
156  const std::map<std::string, l1t::Parameter>& settings_prescale = ts_prescale.getParameters("uGtProcessor");
157  std::map<std::string, unsigned int> prescaleColumns = settings_prescale.at("prescales").getColumnIndices();
158 
159  unsigned int numColumns_prescale = prescaleColumns.size();
160 
161  int NumPrescaleSets = numColumns_prescale - 1;
163  std::vector<unsigned int> algoBits =
164  settings_prescale.at("prescales").getTableColumn<unsigned int>("algo/prescale-index");
165  int NumAlgos_prescale = *std::max_element(algoBits.begin(), algoBits.end()) + 1;
166 
167  if (NumPrescaleSets > 0) {
168  // Fill default prescale set
169  for (int iSet = 0; iSet < NumPrescaleSets; iSet++) {
170  prescales.push_back(std::vector<int>());
171  for (int iBit = 0; iBit < NumAlgos_prescale; ++iBit) {
172  int inputDefaultPrescale = 0; // only prescales that are set in the block below are used
173  prescales[iSet].push_back(inputDefaultPrescale);
174  }
175  }
176 
177  for (auto& col : prescaleColumns) {
178  if (col.second < 1)
179  continue; // we don't care for the algorithms' indicies in 0th column
180  int iSet = col.second - 1;
181  std::vector<unsigned int> prescalesForSet =
182  settings_prescale.at("prescales").getTableColumn<unsigned int>(col.first.c_str());
183  for (unsigned int row = 0; row < prescalesForSet.size(); row++) {
184  unsigned int prescale = prescalesForSet[row];
185  unsigned int algoBit = algoBits[row];
186  prescales[iSet][algoBit] = prescale;
187  }
188  }
189  }
190  }
191  input_prescale.close();
192 
194 
195  // finor mask
196  // set all masks to 1 (unmasked) by default
197  triggerMasks.insert(triggerMasks.end(), m_numberPhysTriggers, 1);
198 
199  std::ifstream input_mask_finor;
200  input_mask_finor.open(m_finormaskFile);
201  if (not m_finormaskFile.empty() and not input_mask_finor) {
202  edm::LogError("L1TGlobalPrescalesVetosESProducer")
203  << "\nCould not find finor mask file: " << m_finormaskFile
204  << "\nDeafulting the finor mask for all triggers to 1 (unmasked)";
205  } else {
206  while (!input_mask_finor.eof()) {
207  string tmp;
208  getline(input_mask_finor, tmp, '\n');
209  xmlPayload_mask_finor.append(tmp);
210  }
211 
212  l1t::XmlConfigParser xmlReader_mask_finor;
213  l1t::TriggerSystem ts_mask_finor;
214  ts_mask_finor.addProcessor("uGtProcessor", "uGtProcessor", "-1", "-1");
215 
216  // run the parser
217  xmlReader_mask_finor.readDOMFromString(xmlPayload_mask_finor); // initialize it
218  xmlReader_mask_finor.readRootElement(ts_mask_finor, "uGT"); // extract all of the relevant context
219  ts_mask_finor.setConfigured();
220 
221  const std::map<std::string, l1t::Parameter>& settings_mask_finor = ts_mask_finor.getParameters("uGtProcessor");
222 
223  std::vector<unsigned int> algo_mask_finor =
224  settings_mask_finor.at("finorMask").getTableColumn<unsigned int>("algo");
225  std::vector<unsigned int> mask_mask_finor =
226  settings_mask_finor.at("finorMask").getTableColumn<unsigned int>("mask");
227 
228  for (unsigned int row = 0; row < algo_mask_finor.size(); row++) {
229  unsigned int algoBit = algo_mask_finor[row];
230  unsigned int mask = mask_mask_finor[row];
231  if (algoBit < m_numberPhysTriggers)
232  triggerMasks[algoBit] = mask;
233  }
234  }
235  input_mask_finor.close();
236 
238 
239  // veto mask
240  // Setting veto mask to default 0 (no veto)
241  for (unsigned int iAlg = 0; iAlg < m_numberPhysTriggers; iAlg++)
242  triggerVetoMasks.push_back(0);
243 
244  std::ifstream input_mask_veto;
245  input_mask_veto.open(m_vetomaskFile);
246  if (not m_vetomaskFile.empty() and not input_mask_veto) {
247  edm::LogError("L1TGlobalPrescalesVetosESProducer") << "\nCould not find veto mask file: " << m_vetomaskFile
248  << "\nDeafulting the veto mask for all triggers to 1 (unmasked)";
249  } else {
250  while (!input_mask_veto.eof()) {
251  string tmp;
252  getline(input_mask_veto, tmp, '\n');
253  xmlPayload_mask_veto.append(tmp);
254  }
255 
256  l1t::XmlConfigParser xmlReader_mask_veto;
257  l1t::TriggerSystem ts_mask_veto;
258  ts_mask_veto.addProcessor("uGtProcessor", "uGtProcessor", "-1", "-1");
259 
260  // run the parser
261  xmlReader_mask_veto.readDOMFromString(xmlPayload_mask_veto); // initialize it
262  xmlReader_mask_veto.readRootElement(ts_mask_veto, "uGT"); // extract all of the relevant context
263  ts_mask_veto.setConfigured();
264 
265  const std::map<std::string, l1t::Parameter>& settings_mask_veto = ts_mask_veto.getParameters("uGtProcessor");
266  std::vector<unsigned int> algo_mask_veto = settings_mask_veto.at("vetoMask").getTableColumn<unsigned int>("algo");
267  std::vector<unsigned int> veto_mask_veto = settings_mask_veto.at("vetoMask").getTableColumn<unsigned int>("veto");
268 
269  for (unsigned int row = 0; row < algo_mask_veto.size(); row++) {
270  unsigned int algoBit = algo_mask_veto[row];
271  unsigned int veto = veto_mask_veto[row];
272  if (algoBit < m_numberPhysTriggers)
273  triggerVetoMasks[algoBit] = int(veto);
274  }
275  }
276  input_mask_veto.close();
277 
279 
280  // Algo bx mask
281  std::ifstream input_mask_algobx;
282  input_mask_algobx.open(m_algobxmaskFile);
283  if (not m_algobxmaskFile.empty() and not input_mask_algobx) {
284  edm::LogError("L1TGlobalPrescalesVetosESProducer")
285  << "\nCould not find bx mask file: " << m_algobxmaskFile << "\nNot filling the bx mask map";
286  } else {
287  while (!input_mask_algobx.eof()) {
288  string tmp;
289  getline(input_mask_algobx, tmp, '\n');
290  xmlPayload_mask_algobx.append(tmp);
291  }
292 
293  l1t::XmlConfigParser xmlReader_mask_algobx;
294  l1t::TriggerSystem ts_mask_algobx;
295  ts_mask_algobx.addProcessor("uGtProcessor", "uGtProcessor", "-1", "-1");
296 
297  // run the parser
298  xmlReader_mask_algobx.readDOMFromString(xmlPayload_mask_algobx); // initialize it
299  xmlReader_mask_algobx.readRootElement(ts_mask_algobx, "uGT"); // extract all of the relevant context
300  ts_mask_algobx.setConfigured();
301 
302  const std::map<std::string, l1t::Parameter>& settings_mask_algobx = ts_mask_algobx.getParameters("uGtProcessor");
303  std::map<std::string, unsigned int> mask_algobx_columns =
304  settings_mask_algobx.at("algorithmBxMask").getColumnIndices();
305  std::vector<unsigned int> bunches =
306  settings_mask_algobx.at("algorithmBxMask").getTableColumn<unsigned int>("bx/algo");
307 
308  unsigned int numCol_mask_algobx = mask_algobx_columns.size();
309 
310  int NumAlgoBitsInMask = numCol_mask_algobx - 1;
311  for (int iBit = 0; iBit < NumAlgoBitsInMask; iBit++) {
312  std::vector<unsigned int> algo =
313  settings_mask_algobx.at("algorithmBxMask").getTableColumn<unsigned int>(std::to_string(iBit).c_str());
314  for (unsigned int bx = 0; bx < bunches.size(); bx++) {
315  if (algo[bx] != unsigned(m_bx_mask_default))
316  triggerAlgoBxMaskAlgoTrig[bunches[bx]].push_back(iBit);
317  }
318  }
319  }
320  input_mask_algobx.close();
321 
322  // Set prescales to zero if masked
323  for (auto& prescale : prescales) {
324  for (unsigned int iBit = 0; iBit < prescale.size(); iBit++) {
325  // Add protection in case prescale table larger than trigger mask size
326  if (iBit >= triggerMasks.size()) {
327  edm::LogWarning("L1TGlobal") << "\nWarning: algoBit in prescale table >= triggerMasks.size() "
328  << "\nWarning: no information on masking bit or not, setting as unmasked "
329  << std::endl;
330  } else {
331  prescale[iBit] *= triggerMasks[iBit];
332  }
333  }
334  }
335 
337  m_initialTriggerMaskAlgoTrig = triggerMasks;
338  m_initialTriggerMaskVetoAlgoTrig = triggerVetoMasks;
339  m_initialTriggerAlgoBxMaskAlgoTrig = triggerAlgoBxMaskAlgoTrig;
340 }
341 
343  // do anything here that needs to be done at desctruction time
344  // (e.g. close files, deallocate resources etc.)
345 }
346 
347 //
348 // member functions
349 //
350 
351 // ------------ method called to produce the data ------------
353  const L1TGlobalPrescalesVetosRcd& iRecord) {
354  // configure the helper class parameters via its set funtions, e.g.:
359 
360  if (m_verbosity) {
361  LogDebug("L1TGlobal") << " ====> Prescales table <=== " << std::endl;
362  for (unsigned int ix = 0; ix < m_initialPrescaleFactorsAlgoTrig.size(); ix++) {
363  LogDebug("L1TGlobal") << " Prescale set = " << ix << std::endl;
364  for (unsigned int iy = 0; iy < m_initialPrescaleFactorsAlgoTrig[ix].size(); iy++) {
365  LogDebug("L1TGlobal") << "\t Algo " << iy << ": " << m_initialPrescaleFactorsAlgoTrig[ix][iy] << std::endl;
366  }
367  }
368 
369  LogDebug("L1TGlobal") << " ====> Trigger mask veto <=== " << std::endl;
370  for (unsigned int ix = 0; ix < m_initialTriggerMaskVetoAlgoTrig.size(); ix++) {
371  LogDebug("L1TGlobal") << "\t Algo " << ix << ": " << m_initialTriggerMaskVetoAlgoTrig[ix] << std::endl;
372  }
373 
374  LogDebug("L1TGlobal") << " ====> Algo bx mask <=== " << std::endl;
376  LogDebug("L1TGlobal") << "\t(empty map)" << std::endl;
377  for (auto& it : m_initialTriggerAlgoBxMaskAlgoTrig) {
378  LogDebug("L1TGlobal") << " bx = " << it.first << " : iAlg =";
379  std::vector<int> masked = it.second;
380  for (int& iAlg : masked) {
381  LogDebug("L1TGlobal") << " " << iAlg;
382  }
383  LogDebug("L1TGlobal") << " " << std::endl;
384  }
385  }
386 
387  // Return copy so that we don't give away our owned pointer to framework
388  return std::make_unique<L1TGlobalPrescalesVetos>(*data_.getWriteInstance());
389 }
390 
391 //define this as a plug-in
#define LogDebug(id)
T getParameter(std::string const &) const
auto setWhatProduced(T *iThis, const es::Label &iLabel={})
Definition: ESProducer.h:138
void setConfigured(bool state=true) noexcept
Definition: TriggerSystem.h:74
void setPrescaleFactorTable(std::vector< std::vector< int > > value)
std::vector< std::vector< int > > m_initialPrescaleFactorsAlgoTrig
delete x;
Definition: CaloConfig.h:22
L1TGlobalPrescalesVetosESProducer(const edm::ParameterSet &)
void readDOMFromString(const std::string &str, xercesc::DOMDocument *&doc)
void setTriggerMaskVeto(std::vector< int > value)
#define DEFINE_FWK_EVENTSETUP_MODULE(type)
Definition: ModuleFactory.h:60
std::map< int, std::vector< int > > m_initialTriggerAlgoBxMaskAlgoTrig
std::vector< unsigned int > m_initialTriggerMaskAlgoTrig
const std::map< std::string, Parameter > & getParameters(const char *processor) const
ReturnType produce(const L1TGlobalPrescalesVetosRcd &)
void readRootElement(TriggerSystem &aTriggerSystem, const std::string &sysId="")
HLT enums.
col
Definition: cuy.py:1010
void addProcessor(const char *processor, const char *role, const char *crate, const char *slot)
std::unique_ptr< L1TGlobalPrescalesVetos > ReturnType
std::string fullPath() const
Definition: FileInPath.cc:163
void setTriggerAlgoBxMask(std::map< int, std::vector< int > > value)
tmp
align.sh
Definition: createJobs.py:716
L1TGlobalPrescalesVetos * getWriteInstance()