@@ -147,6 +147,10 @@ void l1t::TriggerMenuParser::setVecAXOL1TLTemplate(const std::vector<std::vector
147147 m_vecAXOL1TLTemplate = vecAXOL1TLTempl;
148148}
149149
150+ void l1t::TriggerMenuParser::setVecCICADATemplate (const std::vector<std::vector<CICADATemplate> >& vecCICADATempl) {
151+ m_vecCICADATemplate = vecCICADATempl;
152+ }
153+
150154void l1t::TriggerMenuParser::setVecExternalTemplate (
151155 const std::vector<std::vector<ExternalTemplate> >& vecExternalTempl) {
152156 m_vecExternalTemplate = vecExternalTempl;
@@ -227,6 +231,7 @@ void l1t::TriggerMenuParser::parseCondFormats(const L1TUtmTriggerMenu* utmMenu)
227231 m_vecEnergySumTemplate.resize (m_numberConditionChips);
228232 m_vecEnergySumZdcTemplate.resize (m_numberConditionChips);
229233 m_vecAXOL1TLTemplate.resize (m_numberConditionChips);
234+ m_vecCICADATemplate.resize (m_numberConditionChips);
230235 m_vecExternalTemplate.resize (m_numberConditionChips);
231236
232237 m_vecCorrelationTemplate.resize (m_numberConditionChips);
@@ -326,6 +331,9 @@ void l1t::TriggerMenuParser::parseCondFormats(const L1TUtmTriggerMenu* utmMenu)
326331 condition.getType () == esConditionType::AnomalyDetectionTrigger) {
327332 parseAXOL1TL (condition, chipNr);
328333
334+ // parse CICADA
335+ } else if (condition.getType () == esConditionType::CicadaTrigger) {
336+ parseCICADA (condition, chipNr);
329337 // parse Muons
330338 } else if (condition.getType () == esConditionType::SingleMuon ||
331339 condition.getType () == esConditionType::DoubleMuon ||
@@ -2903,6 +2911,75 @@ bool l1t::TriggerMenuParser::parseExternal(L1TUtmCondition condExt, unsigned int
29032911 return true ;
29042912}
29052913
2914+ // Parse the CICADA condition and insert the entry into the conditions mapping
2915+ bool l1t::TriggerMenuParser::parseCICADA (L1TUtmCondition condCICADA, unsigned int chipNr) {
2916+ using namespace tmeventsetup ;
2917+
2918+ std::string condition = " cicada" ;
2919+ std::string type = l1t2string (condCICADA.getType ());
2920+ std::string name = l1t2string (condCICADA.getName ());
2921+
2922+ LogDebug (" TriggerMenuParser" ) << " ****************************************** " << std::endl
2923+ << " (in parseCICADA) " << std::endl
2924+ << " condition = " << condition << std::endl
2925+ << " type = " << type << std::endl
2926+ << " name = " << name << std::endl;
2927+ const int nrObj = 1 ;
2928+ GtConditionType cType = TypeCICADA;
2929+
2930+ std::vector<CICADATemplate::ObjectParameter> objParameter (nrObj);
2931+
2932+ if (int (condCICADA.getObjects ().size ()) != nrObj) {
2933+ edm::LogError (" TriggerMenuParser" ) << " condCICADA objects: nrObj = " << nrObj
2934+ << " condCICADA.getObjects().size() = " << condCICADA.getObjects ().size ()
2935+ << std::endl;
2936+ return false ;
2937+ }
2938+
2939+ L1TUtmObject object = condCICADA.getObjects ().at (0 );
2940+ int relativeBx = object.getBxOffset ();
2941+ bool gEq = (object.getComparisonOperator () == esComparisonOperator::GE);
2942+
2943+ float lowerThresholdInd = 0 ; // May need to be float to match CICADA?
2944+ float upperThresholdInd = -1 ;
2945+
2946+ const std::vector<L1TUtmCut>& cuts = object.getCuts ();
2947+ for (size_t kk = 0 ; kk < cuts.size (); kk++) {
2948+ const L1TUtmCut& cut = cuts.at (kk);
2949+
2950+ switch (cut.getCutType ()) {
2951+ case esCutType::CicadaScore:
2952+ lowerThresholdInd = cut.getMinimum ().value ;
2953+ upperThresholdInd = cut.getMaximum ().value ;
2954+ }
2955+ }
2956+
2957+ objParameter[0 ].minCICADAThreshold = lowerThresholdInd;
2958+ objParameter[0 ].maxCICADAThreshold = upperThresholdInd;
2959+
2960+ CICADATemplate cicadaCond (name);
2961+ cicadaCond.setCondType (cType);
2962+ cicadaCond.setCondGEq (gEq );
2963+ cicadaCond.setCondChipNr (chipNr);
2964+ cicadaCond.setCondRelativeBx (relativeBx);
2965+ cicadaCond.setConditionParameter (objParameter);
2966+
2967+ if (edm::isDebugEnabled ()) {
2968+ std::ostringstream myCoutStream;
2969+ cicadaCond.print (myCoutStream);
2970+ LogTrace (" TriggerMenuParser" ) << myCoutStream.str () << " \n " << std::endl;
2971+ }
2972+
2973+ if (!insertConditionIntoMap (cicadaCond, chipNr)) {
2974+ edm::LogError (" TriggerMenuParser" ) << " Error: duplicate CICADA condition (" << name << " )" << std::endl;
2975+ return false ;
2976+ }
2977+
2978+ (m_vecCICADATemplate[chipNr]).push_back (cicadaCond);
2979+
2980+ return true ;
2981+ }
2982+
29062983/* *
29072984 * parseCorrelation Parse a correlation condition and
29082985 * insert an entry to the conditions map
0 commit comments