32 edm::FileInPath f1(
"L1Trigger/L1TGlobal/data/Luminosity/startup/prescale_L1TGlobal.csv");
42 m_PreScaleColumn = psColumn;
57 if (m_l1GtMenuCacheID != l1GtMenuCacheID) {
61 m_l1GtMenu = l1GtMenu.
product();
64 m_algorithmMap = &(m_l1GtMenu->getAlgorithmMap());
67 resetDecisionVectors();
69 m_l1GtMenuCacheID = l1GtMenuCacheID;
73 if(!m_filledPrescales) {
76 resetPrescaleVectors();
80 loadPrescalesAndMasks();
83 m_prescaleFactorsAlgoTrig = &m_initialPrescaleFactorsAlgoTrig;
84 m_triggerMaskAlgoTrig = &m_initialTriggerMaskAlgoTrig;
85 m_triggerMaskVetoAlgoTrig = &m_initialTriggerMaskVetoAlgoTrig;
89 if(m_PreScaleColumn > m_prescaleFactorsAlgoTrig->size() || m_PreScaleColumn < 1) {
91 <<
"\nNo Prescale Set: " << m_PreScaleColumn
92 <<
"\nMax Prescale Set value : " << m_prescaleFactorsAlgoTrig->size()
93 <<
"\nSetting prescale column to 1"
97 LogDebug(
"l1t|Global") <<
"Grabing prescale column "<< m_PreScaleColumn << endl;
98 const std::vector<int>& prescaleSet = (*m_prescaleFactorsAlgoTrig)[m_PreScaleColumn-1];
100 for (std::map<std::string, L1TUtmAlgorithm>::const_iterator itAlgo = m_algorithmMap->begin(); itAlgo != m_algorithmMap->end(); itAlgo++) {
104 int algBit = (itAlgo->second).getIndex();
106 (m_prescales[algBit]).
first = algName;
107 (m_prescales[algBit]).
second = prescaleSet[algBit];
109 (m_masks[algBit]).
first = algName;
110 (m_masks[algBit]).
second = (*m_triggerMaskAlgoTrig)[algBit];
112 (m_vetoMasks[algBit]).
first = algName;
113 (m_vetoMasks[algBit]).
second = (*m_triggerMaskVetoAlgoTrig)[algBit];
116 m_filledPrescales =
true;
126 if(m_uGtAlgBlk.isValid()) {
128 std::vector<GlobalAlgBlk>::const_iterator algBlk = m_uGtAlgBlk->begin(0);
131 m_finalOR = algBlk->getFinalOR();
135 for (std::map<std::string, L1TUtmAlgorithm>::const_iterator itAlgo = m_algorithmMap->begin(); itAlgo != m_algorithmMap->end(); itAlgo++) {
139 int algBit = (itAlgo->second).getIndex();
141 bool decisionInitial = algBlk->getAlgoDecisionInitial(algBit);
142 (m_decisionsInitial[algBit]).
first = algName;
143 (m_decisionsInitial[algBit]).
second = decisionInitial;
145 bool decisionPrescaled = algBlk->getAlgoDecisionPreScaled(algBit);
146 (m_decisionsPrescaled[algBit]).
first = algName;
147 (m_decisionsPrescaled[algBit]).
second = decisionPrescaled;
149 bool decisionFinal = algBlk->getAlgoDecisionFinal(algBit);
150 (m_decisionsFinal[algBit]).
first = algName;
151 (m_decisionsFinal[algBit]).
second = decisionFinal;
157 <<
"Error no valid uGT Algorithm Data with Token provided " << endl;
164 std::ifstream inputPrescaleFile;
165 inputPrescaleFile.open(m_preScaleFileName);
167 std::vector<std::vector<int> > vec;
168 std::vector<std::vector<int> > prescale_vec;
170 std::vector<unsigned int> temp_triggerMask;
171 std::vector<unsigned int> temp_triggerVetoMask;
173 if( inputPrescaleFile ){
181 while( getline(inputPrescaleFile,line) ){
183 if( !line.compare(0, prefix1.size(), prefix1) )
continue;
186 istringstream
split(line);
191 while( split >> value ){
194 vec.push_back(std::vector<int>());
197 vec[
col].push_back(value);
210 int NumPrescaleSets = 0;
213 int maskVetoColumn = -1;
214 for(
int iCol=0; iCol<int(vec.size()); iCol++ ){
215 if( vec[iCol].
size() > 0 ){
216 int firstRow = vec[iCol][0];
218 if( firstRow > 0 ) NumPrescaleSets++;
219 else if( firstRow==-2 ) maskColumn = iCol;
220 else if( firstRow==-3 ) maskVetoColumn = iCol;
225 for(
unsigned int iBit = 0; iBit < m_numberPhysTriggers; ++iBit ){
226 unsigned int inputDefaultMask = 1;
227 unsigned int inputDefaultVetoMask = 0;
228 temp_triggerMask.push_back(inputDefaultMask);
229 temp_triggerVetoMask.push_back(inputDefaultVetoMask);
235 if( maskColumn>=0 || maskVetoColumn>=0 ){
236 for(
int iBit=1; iBit<int(vec[0].
size()); iBit++ ){
237 unsigned int algoBit = vec[0][iBit];
239 if( algoBit < m_numberPhysTriggers ){
241 unsigned int triggerMask = vec[maskColumn][iBit];
242 temp_triggerMask[algoBit] = triggerMask;
245 if( maskVetoColumn>=0 ){
246 unsigned int triggerVetoMask = vec[maskVetoColumn][iBit];
247 temp_triggerVetoMask[algoBit] = triggerVetoMask;
254 if( NumPrescaleSets > 0 ){
256 for(
int iSet=0; iSet<NumPrescaleSets; iSet++ ){
257 prescale_vec.push_back(std::vector<int>());
258 for(
unsigned int iBit = 0; iBit < m_numberPhysTriggers; ++iBit ){
259 int inputDefaultPrescale = 1;
260 prescale_vec[iSet].push_back(inputDefaultPrescale);
265 for(
int iBit=1; iBit<int(vec[0].
size()); iBit++ ){
266 unsigned int algoBit = vec[0][iBit];
268 if( algoBit < m_numberPhysTriggers ){
269 for(
int iSet=0; iSet<int(vec.size()); iSet++ ){
271 if( vec[iSet].
size() > 0 ){
272 useSet = vec[iSet][0];
276 if( useSet<0 )
continue;
278 int prescale = vec[iSet][iBit];
279 prescale_vec[useSet][algoBit] = prescale;
284 <<
"\nPrescale file has algo bit: " << algoBit
285 <<
"\nThis is larger than the number of triggers: " << m_numberPhysTriggers
286 <<
"\nSomething is wrong. Ignoring."
295 <<
"\nCould not find file: " << m_preScaleFileName
296 <<
"\nFilling the prescale vectors with prescale 1"
297 <<
"\nSetting prescale set to 1"
300 m_PreScaleColumn = 1;
303 prescale_vec.push_back(std::vector<int>());
304 for(
unsigned int iBit = 0; iBit < m_numberPhysTriggers; ++iBit ){
305 int inputDefaultPrescale = 1;
306 prescale_vec[
col].push_back(inputDefaultPrescale);
311 inputPrescaleFile.close();
313 m_initialPrescaleFactorsAlgoTrig = prescale_vec;
314 m_initialTriggerMaskAlgoTrig = temp_triggerMask;
315 m_initialTriggerMaskVetoAlgoTrig = temp_triggerVetoMask;
322 m_decisionsInitial.clear();
323 m_decisionsInitial.resize(m_numberPhysTriggers);
324 m_decisionsPrescaled.clear();
325 m_decisionsPrescaled.resize(m_numberPhysTriggers);
326 m_decisionsFinal.clear();
327 m_decisionsFinal.resize(m_numberPhysTriggers);
330 for(
unsigned int algBit = 0; algBit< m_numberPhysTriggers; algBit++) {
332 (m_decisionsInitial[algBit]).
first =
"NULL";
333 (m_decisionsInitial[algBit]).
second =
false;
335 (m_decisionsPrescaled[algBit]).
first =
"NULL";
336 (m_decisionsPrescaled[algBit]).
second =
false;
338 (m_decisionsFinal[algBit]).
first =
"NULL";
339 (m_decisionsFinal[algBit]).
second =
false;
350 m_prescales.resize(m_numberPhysTriggers);
352 for(
unsigned int algBit = 0; algBit< m_numberPhysTriggers; algBit++) {
354 (m_prescales[algBit]).
first =
"NULL";
355 (m_prescales[algBit]).
second = 1;
365 m_masks.resize(m_numberPhysTriggers);
367 m_vetoMasks.resize(m_numberPhysTriggers);
369 for(
unsigned int algBit = 0; algBit< m_numberPhysTriggers; algBit++) {
371 (m_masks[algBit]).
first =
"NULL";
372 (m_masks[algBit]).
second =
true;
374 (m_vetoMasks[algBit]).
first =
"NULL";
375 (m_vetoMasks[algBit]).
second =
false;
383 std::map<std::string, L1TUtmAlgorithm>::const_iterator itAlgo = m_algorithmMap->find(algName);
384 if(itAlgo != m_algorithmMap->end()) {
385 bit = (itAlgo->second).getIndex();
395 if((m_decisionsInitial[bit]).
first !=
"NULL") {
396 algName = (m_decisionsInitial[bit]).
first;
411 if((m_decisionsInitial[bit]).
first !=
"NULL") {
412 decision = (m_decisionsInitial[bit]).
second;
421 if((m_decisionsPrescaled[bit]).
first !=
"NULL") {
422 decision = (m_decisionsPrescaled[bit]).
second;
431 if((m_decisionsFinal[bit]).
first !=
"NULL") {
432 decision = (m_decisionsFinal[bit]).
second;
441 if((m_prescales[bit]).
first !=
"NULL") {
442 prescale = (m_prescales[bit]).
second;
451 if((m_masks[bit]).
first !=
"NULL") {
452 mask = (m_masks[bit]).
second;
462 if((m_vetoMasks[bit]).
first !=
"NULL") {
463 veto = (m_vetoMasks[bit]).
second;
473 if(getAlgBitFromName(algName,bit)) {
474 decision = (m_decisionsInitial[bit]).
second;
484 if(getAlgBitFromName(algName,bit)) {
485 decision = (m_decisionsPrescaled[bit]).
second;
495 if(getAlgBitFromName(algName,bit)) {
496 decision = (m_decisionsFinal[bit]).
second;
505 if(getAlgBitFromName(algName,bit)) {
506 prescale = (m_prescales[bit]).
second;
515 if(getAlgBitFromName(algName,bit)) {
516 mask = (m_masks[bit]).
second;
525 if(getAlgBitFromName(algName,bit)) {
526 veto = (m_vetoMasks[bit]).
second;
const bool getInitialDecisionByBit(int &bit, bool &decision) const
std::string m_preScaleFileName
const bool getAlgBitFromName(const std::string &AlgName, int &bit) const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
const bool getPrescaleByBit(int &bit, int &prescale) const
unsigned int m_PreScaleColumn
const bool getInitialDecisionByName(const std::string &algName, bool &decision) const
void retrieveL1(const edm::Event &iEvent, const edm::EventSetup &evSetup, edm::EDGetToken gtAlgToken)
initialize the class (mainly reserve)
void resetDecisionVectors()
clear decision vectors on a menu change
const bool getMaskByName(const std::string &algName, bool &mask) const
U second(std::pair< T, U > const &p)
const bool getFinalDecisionByName(const std::string &algName, bool &decision) const
void OverridePrescalesAndMasks(std::string filename, unsigned int psColumn=1)
const bool getAlgNameFromBit(int &bit, std::string &AlgName) const
const bool getVetoMaskByBit(int &bit, bool &veto) const
unsigned long long m_l1GtMenuCacheID
const bool getMaskByBit(int &bit, bool &mask) const
T const * product() const
const bool getVetoMaskByName(const std::string &algName, bool &veto) const
void resetPrescaleVectors()
const bool getFinalDecisionByBit(int &bit, bool &decision) const
const bool getPrescaleByName(const std::string &algName, int &prescale) const
const bool getPrescaledDecisionByName(const std::string &algName, bool &decision) const
std::string fullPath() const
void loadPrescalesAndMasks()
tuple size
Write out results.
const bool getPrescaledDecisionByBit(int &bit, bool &decision) const
unsigned int m_numberPhysTriggers