CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
l1t::AXOL1TLCondition Class Reference

#include <AXOL1TLCondition.h>

Inheritance diagram for l1t::AXOL1TLCondition:
l1t::ConditionEvaluation

Public Member Functions

 AXOL1TLCondition ()
 
 AXOL1TLCondition (const GlobalCondition *, const GlobalBoard *)
 from base template condition (from event setup usually) More...
 
 AXOL1TLCondition (const AXOL1TLCondition &)
 
const bool evaluateCondition (const int bxEval) const override
 the core function to check if the condition matches More...
 
const AXOL1TLTemplategtAXOL1TLTemplate () const
 get / set the pointer to a Condition More...
 
const GlobalBoardgtGTB () const
 get / set the pointer to GTL More...
 
AXOL1TLConditionoperator= (const AXOL1TLCondition &)
 
void print (std::ostream &myCout) const override
 print condition More...
 
void setGtAXOL1TLTemplate (const AXOL1TLTemplate *)
 
void setuGtB (const GlobalBoard *)
 set the pointer to uGT GlobalBoard More...
 
 ~AXOL1TLCondition () override
 
- Public Member Functions inherited from l1t::ConditionEvaluation
 ConditionEvaluation ()
 constructor More...
 
bool condLastResult () const
 get the latest result for the condition More...
 
int condMaxNumberObjects () const
 
void evaluateConditionStoreResult (const int bxEval)
 call evaluateCondition and save last result More...
 
CombinationsInCond const & getCombinationsInCond () const
 get all the object combinations evaluated to true in the condition More...
 
virtual std::string getNumericExpression () const
 get numeric expression More...
 
void setCondMaxNumberObjects (int condMaxNumberObjectsValue)
 
void setVerbosity (const int verbosity)
 
virtual ~ConditionEvaluation ()
 destructor More...
 

Private Member Functions

void copy (const AXOL1TLCondition &cp)
 copy function for copy constructor and operator= More...
 

Private Attributes

const AXOL1TLTemplatem_gtAXOL1TLTemplate
 pointer to a AXOL1TLTemplate More...
 
const GlobalBoardm_gtGTB
 pointer to uGt GlobalBoard, to be able to get the trigger objects More...
 

Additional Inherited Members

- Protected Member Functions inherited from l1t::ConditionEvaluation
template<class Type1 >
const bool checkBit (const Type1 &mask, const unsigned int bitNumber) const
 check if a bit with a given number is set in a mask More...
 
template<class Type1 , class Type2 >
const bool checkCut (const Type1 &cutL, const Type2 &value, bool condGEqValue) const
 
template<class Type1 >
const bool checkIndex (const Type1 &indexLo, const Type1 &indexHi, const unsigned int index) const
 check if a index is in a given range More...
 
template<class Type1 >
const bool checkRangeDeltaEta (const unsigned int obj1Eta, const unsigned int obj2Eta, const Type1 &lowerR, const Type1 &upperR, const unsigned int nEtaBits) const
 check if a value is in a given deltaEta range More...
 
template<class Type1 >
const bool checkRangeDeltaPhi (const unsigned int obj1Phi, const unsigned int obj2Phi, const Type1 &lowerR, const Type1 &upperR) const
 check if a value is in a given deltaPhi range More...
 
template<class Type1 >
const bool checkRangeEta (const unsigned int bitNumber, const std::vector< Type1 > &windows, const unsigned int nEtaBits) const
 
template<class Type1 >
const bool checkRangePhi (const unsigned int bitNumber, const Type1 &W1beginR, const Type1 &W1endR, const Type1 &W2beginR, const Type1 &W2endR) const
 check if a value is in a given phi range and outside of a veto range More...
 
template<class Type1 >
const bool checkRangeTfMuonIndex (const unsigned int bitNumber, const std::vector< Type1 > &windows) const
 check if a value is in a given muon track finder index range More...
 
template<class Type1 , class Type2 >
const bool checkThreshold (const Type1 &thresholdL, const Type1 &thresholdH, const Type2 &value, bool condGEqValue) const
 
template<class Type1 , class Type2 >
const bool checkUnconstrainedPt (const Type1 &thresholdL, const Type1 &thresholdH, const Type2 &value, bool condGEqValue) const
 
CombinationsInCondcombinationsInCond () const
 get all the object combinations (to fill it...) More...
 
- Protected Attributes inherited from l1t::ConditionEvaluation
CombinationsInCond m_combinationsInCond
 store all the object combinations evaluated to true in the condition More...
 
bool m_condLastResult
 the last result of evaluateCondition() More...
 
int m_condMaxNumberObjects
 
int m_verbosity
 verbosity level More...
 

Detailed Description

Definition at line 29 of file AXOL1TLCondition.h.

Constructor & Destructor Documentation

◆ AXOL1TLCondition() [1/3]

AXOL1TLCondition::AXOL1TLCondition ( )

constructors default

Definition at line 47 of file AXOL1TLCondition.cc.

48  // empty
49 }

◆ AXOL1TLCondition() [2/3]

AXOL1TLCondition::AXOL1TLCondition ( const GlobalCondition axol1tlTemplate,
const GlobalBoard ptrGTB 
)

from base template condition (from event setup usually)

Definition at line 52 of file AXOL1TLCondition.cc.

54  m_gtAXOL1TLTemplate(static_cast<const AXOL1TLTemplate*>(axol1tlTemplate)),
55  m_gtGTB(ptrGTB) {}
const AXOL1TLTemplate * m_gtAXOL1TLTemplate
pointer to a AXOL1TLTemplate
const GlobalBoard * m_gtGTB
pointer to uGt GlobalBoard, to be able to get the trigger objects

◆ AXOL1TLCondition() [3/3]

AXOL1TLCondition::AXOL1TLCondition ( const AXOL1TLCondition cp)

Definition at line 69 of file AXOL1TLCondition.cc.

References copy().

69 : ConditionEvaluation() { copy(cp); }
void copy(const AXOL1TLCondition &cp)
copy function for copy constructor and operator=

◆ ~AXOL1TLCondition()

AXOL1TLCondition::~AXOL1TLCondition ( )
override

Definition at line 72 of file AXOL1TLCondition.cc.

72  {
73  // empty
74 }

Member Function Documentation

◆ copy()

void AXOL1TLCondition::copy ( const AXOL1TLCondition cp)
private

copy function for copy constructor and operator=

Definition at line 58 of file AXOL1TLCondition.cc.

Referenced by AXOL1TLCondition().

58  {
59  m_gtAXOL1TLTemplate = cp.gtAXOL1TLTemplate();
60  m_gtGTB = cp.gtGTB();
61 
62  m_condMaxNumberObjects = cp.condMaxNumberObjects();
63  m_condLastResult = cp.condLastResult();
64  m_combinationsInCond = cp.getCombinationsInCond();
65 
66  m_verbosity = cp.m_verbosity;
67 }
const AXOL1TLTemplate * m_gtAXOL1TLTemplate
pointer to a AXOL1TLTemplate
CombinationsInCond m_combinationsInCond
store all the object combinations evaluated to true in the condition
int m_verbosity
verbosity level
const GlobalBoard * m_gtGTB
pointer to uGt GlobalBoard, to be able to get the trigger objects
bool m_condLastResult
the last result of evaluateCondition()

◆ evaluateCondition()

const bool AXOL1TLCondition::evaluateCondition ( const int  bxEval) const
overridevirtual

the core function to check if the condition matches

Implements l1t::ConditionEvaluation.

Definition at line 88 of file AXOL1TLCondition.cc.

References BXVector< T >::at(), MillePedeFileConverter_cfg::e, Exception, ntuplemaker::fill, l1trig_cff::hwEta, l1trig_cff::hwPhi, l1trig_cff::hwPt, L1Analysis::kMissingEt, web.browse_db::loader, AXOL1TLTemplate::ObjectParameter::minAXOL1TLThreshold, ReggeGribovPartonMC_EposLHC_2760GeV_PbPb_cfi::model, mps_fire::result, offlineSlimmedPrimaryVertices_cfi::score, BXVector< T >::size(), and AlCaHLTBitMon_QueryRunRegistry::string.

88  {
89  bool condResult = false;
90  int useBx = bxEval + m_gtAXOL1TLTemplate->condRelativeBx();
91 
92  //HLS4ML stuff
93  std::string AXOL1TLmodelversion = "GTADModel_" + m_gtAXOL1TLTemplate->modelVersion(); //loading from menu/template
94 
95  //otherwise load model (if possible) and run inference
96  hls4mlEmulator::ModelLoader loader(AXOL1TLmodelversion);
97  std::shared_ptr<hls4mlEmulator::Model> model;
98 
99  try {
100  model = loader.load_model();
101  } catch (std::runtime_error& e) {
102  // for stopping with exception if model version cannot be loaded
103  throw cms::Exception("ModelError")
104  << " ERROR: failed to load AXOL1TL model version \"" << AXOL1TLmodelversion
105  << "\" that was specified in menu. Model version not found in cms-hls4ml externals.";
106  }
107 
108  // //pointers to objects
109  const BXVector<const l1t::Muon*>* candMuVec = m_gtGTB->getCandL1Mu();
112  const BXVector<const l1t::EtSum*>* candEtSumVec = m_gtGTB->getCandL1EtSum();
113 
114  const int NMuons = 4;
115  const int NJets = 10;
116  const int NEgammas = 4;
117  //const int NEtSums = 1;
118 
119  //number of indices in vector is #objects * 3 for et, eta, phi
120  const int MuVecSize = 12; //NMuons * 3; //so 12
121  const int JVecSize = 30; //NJets * 3; //so 30
122  const int EGVecSize = 12; //NEgammas * 3; //so 12
123  const int EtSumVecSize = 3; //NEtSums * 3; //so 3
124 
125  //total # inputs in vector is (4+10+4+1)*3 = 57
126  const int NInputs = 57;
127 
128  //types of inputs and outputs
129  typedef ap_fixed<18, 13> inputtype;
130  typedef std::array<ap_fixed<10, 7, AP_RND_CONV, AP_SAT>, 8> resulttype; //v3
131  typedef ap_ufixed<18, 14> losstype;
132  typedef std::pair<resulttype, losstype> pairtype;
133  // typedef std::array<ap_fixed<10, 7>, 13> resulttype; //deprecated v1 type:
134 
135  //define zero
136  inputtype fillzero = 0.0;
137 
138  //AD vector declaration, will fill later
139  inputtype ADModelInput[NInputs] = {};
140 
141  //initializing vector by type for my sanity
142  inputtype MuInput[MuVecSize];
143  inputtype JetInput[JVecSize];
144  inputtype EgammaInput[EGVecSize];
145  inputtype EtSumInput[EtSumVecSize];
146 
147  //declare result vectors +score
148  resulttype result;
149  losstype loss;
150  pairtype ADModelResult; //model outputs a pair of the (result vector, loss)
151  float score = -1.0; //not sure what the best default is hm??
152 
153  //check number of input objects we actually have (muons, jets etc)
154  int NCandMu = candMuVec->size(useBx);
155  int NCandJet = candJetVec->size(useBx);
156  int NCandEG = candEGVec->size(useBx);
157  int NCandEtSum = candEtSumVec->size(useBx);
158 
159  //initialize arrays to zero (std::fill(first, last, value);)
160  std::fill(EtSumInput, EtSumInput + EtSumVecSize, fillzero);
161  std::fill(MuInput, MuInput + MuVecSize, fillzero);
162  std::fill(JetInput, JetInput + JVecSize, fillzero);
163  std::fill(EgammaInput, EgammaInput + EGVecSize, fillzero);
164  std::fill(ADModelInput, ADModelInput + NInputs, fillzero);
165 
166  //then fill the object vectors
167  //NOTE assume candidates are already sorted by pt
168  //loop over EtSums first, easy because there is max 1 of them
169  if (NCandEtSum > 0) { //check if not empty
170  for (int iEtSum = 0; iEtSum < NCandEtSum; iEtSum++) {
171  if ((candEtSumVec->at(useBx, iEtSum))->getType() == l1t::EtSum::EtSumType::kMissingEt) {
172  EtSumInput[0] =
173  ((candEtSumVec->at(useBx, iEtSum))->hwPt()) / 2; //have to do hwPt/2 in order to match original et inputs
174  // EtSumInput[1] = (candEtSumVec->at(useBx, iEtSum))->hwEta(); //this one is zero, so leave it zero
175  EtSumInput[2] = (candEtSumVec->at(useBx, iEtSum))->hwPhi();
176  }
177  }
178  }
179 
180  //next egammas
181  if (NCandEG > 0) { //check if not empty
182  for (int iEG = 0; iEG < NCandEG; iEG++) {
183  if (iEG < NEgammas) { //stop if fill the Nobjects we need
184  EgammaInput[0 + (3 * iEG)] = ((candEGVec->at(useBx, iEG))->hwPt()) /
185  2; //index 0,3,6,9 //have to do hwPt/2 in order to match original et inputs
186  EgammaInput[1 + (3 * iEG)] = (candEGVec->at(useBx, iEG))->hwEta(); //index 1,4,7,10
187  EgammaInput[2 + (3 * iEG)] = (candEGVec->at(useBx, iEG))->hwPhi(); //index 2,5,8,11
188  }
189  }
190  }
191 
192  //next muons
193  if (NCandMu > 0) { //check if not empty
194  for (int iMu = 0; iMu < NCandMu; iMu++) {
195  if (iMu < NMuons) { //stop if fill the Nobjects we need
196  MuInput[0 + (3 * iMu)] = ((candMuVec->at(useBx, iMu))->hwPt()) /
197  2; //index 0,3,6,9 //have to do hwPt/2 in order to match original et inputs
198  MuInput[1 + (3 * iMu)] = (candMuVec->at(useBx, iMu))->hwEta(); //index 1,4,7,10
199  MuInput[2 + (3 * iMu)] = (candMuVec->at(useBx, iMu))->hwPhi(); //index 2,5,8,11
200  }
201  }
202  }
203 
204  //next jets
205  if (NCandJet > 0) { //check if not empty
206  for (int iJet = 0; iJet < NCandJet; iJet++) {
207  if (iJet < NJets) { //stop if fill the Nobjects we need
208  JetInput[0 + (3 * iJet)] = ((candJetVec->at(useBx, iJet))->hwPt()) /
209  2; //index 0,3,6,9...27 //have to do hwPt/2 in order to match original et inputs
210  JetInput[1 + (3 * iJet)] = (candJetVec->at(useBx, iJet))->hwEta(); //index 1,4,7,10...28
211  JetInput[2 + (3 * iJet)] = (candJetVec->at(useBx, iJet))->hwPhi(); //index 2,5,8,11...29
212  }
213  }
214  }
215 
216  //now put it all together-> EtSum+EGamma+Muon+Jet into ADModelInput
217  int index = 0;
218  for (int idET = 0; idET < EtSumVecSize; idET++) {
219  ADModelInput[index++] = EtSumInput[idET];
220  }
221  for (int idEG = 0; idEG < EGVecSize; idEG++) {
222  ADModelInput[index++] = EgammaInput[idEG];
223  }
224  for (int idMu = 0; idMu < MuVecSize; idMu++) {
225  ADModelInput[index++] = MuInput[idMu];
226  }
227  for (int idJ = 0; idJ < JVecSize; idJ++) {
228  ADModelInput[index++] = JetInput[idJ];
229  }
230 
231  //now run the inference
232  model->prepare_input(ADModelInput); //scaling internal here
233  model->predict();
234  model->read_result(&ADModelResult); // this should be the square sum model result
235 
236  result = ADModelResult.first;
237  loss = ADModelResult.second;
238  score = ((loss).to_float()) * 16.0; //scaling to match threshold
239 
240  //number of objects/thrsholds to check
241  int iCondition = 0; // number of conditions: there is only one
242  int nObjInCond = m_gtAXOL1TLTemplate->nrObjects();
243 
244  if (iCondition >= nObjInCond || iCondition < 0) {
245  return false;
246  }
247 
248  const AXOL1TLTemplate::ObjectParameter objPar = (*(m_gtAXOL1TLTemplate->objectParameter()))[iCondition];
249 
250  // condGEqVal indicates the operator used for the condition (>=, =): true for >=
251  bool condGEqVal = m_gtAXOL1TLTemplate->condGEq();
252  bool passCondition = false;
253 
254  passCondition = checkCut(objPar.minAXOL1TLThreshold, score, condGEqVal);
255 
256  condResult |= passCondition; //condresult true if passCondition true else it is false
257 
258  //return result
259  return condResult;
260 }
const AXOL1TLTemplate * m_gtAXOL1TLTemplate
pointer to a AXOL1TLTemplate
const std::string & modelVersion() const
unsigned size(int bx) const
const bool condGEq() const
get / set condition GEq flag
const bool checkCut(const Type1 &cutL, const Type2 &value, bool condGEqValue) const
const T & at(int bx, unsigned i) const
const std::vector< ObjectParameter > * objectParameter() const
const GlobalBoard * m_gtGTB
pointer to uGt GlobalBoard, to be able to get the trigger objects
const BXVector< const l1t::L1Candidate * > * getCandL1Jet() const
pointer to Jet data list
Definition: GlobalBoard.h:161
const BXVector< const l1t::EtSum * > * getCandL1EtSum() const
pointer to EtSum data list
Definition: GlobalBoard.h:167
const BXVector< const l1t::Muon * > * getCandL1Mu() const
return global muon trigger candidate
Definition: GlobalBoard.h:152
const int & condRelativeBx() const
get / set the condition relative bx
const int nrObjects() const
get number of trigger objects
const BXVector< const l1t::L1Candidate * > * getCandL1EG() const
pointer to EG data list
Definition: GlobalBoard.h:158

◆ gtAXOL1TLTemplate()

const AXOL1TLTemplate* l1t::AXOL1TLCondition::gtAXOL1TLTemplate ( ) const
inline

get / set the pointer to a Condition

Definition at line 53 of file AXOL1TLCondition.h.

References m_gtAXOL1TLTemplate.

53 { return m_gtAXOL1TLTemplate; }
const AXOL1TLTemplate * m_gtAXOL1TLTemplate
pointer to a AXOL1TLTemplate

◆ gtGTB()

const GlobalBoard* l1t::AXOL1TLCondition::gtGTB ( ) const
inline

get / set the pointer to GTL

Definition at line 58 of file AXOL1TLCondition.h.

References m_gtGTB.

58 { return m_gtGTB; }
const GlobalBoard * m_gtGTB
pointer to uGt GlobalBoard, to be able to get the trigger objects

◆ operator=()

l1t::AXOL1TLCondition & AXOL1TLCondition::operator= ( const AXOL1TLCondition cp)

Definition at line 77 of file AXOL1TLCondition.cc.

References filterCSVwithJSON::copy.

77  {
78  copy(cp);
79  return *this;
80 }
void copy(const AXOL1TLCondition &cp)
copy function for copy constructor and operator=

◆ print()

void AXOL1TLCondition::print ( std::ostream &  myCout) const
overridevirtual

print condition

Reimplemented from l1t::ConditionEvaluation.

Definition at line 262 of file AXOL1TLCondition.cc.

References l1t::ConditionEvaluation::print().

Referenced by l1t::GlobalBoard::runGTL().

262  {
263  myCout << "Dummy Print for AXOL1TLCondition" << std::endl;
264  m_gtAXOL1TLTemplate->print(myCout);
265 
267 }
const AXOL1TLTemplate * m_gtAXOL1TLTemplate
pointer to a AXOL1TLTemplate
void print(std::ostream &myCout) const override
print the condition
virtual void print(std::ostream &myCout) const
print condition

◆ setGtAXOL1TLTemplate()

void AXOL1TLCondition::setGtAXOL1TLTemplate ( const AXOL1TLTemplate caloTempl)

Definition at line 83 of file AXOL1TLCondition.cc.

83 { m_gtAXOL1TLTemplate = caloTempl; }
const AXOL1TLTemplate * m_gtAXOL1TLTemplate
pointer to a AXOL1TLTemplate

◆ setuGtB()

void AXOL1TLCondition::setuGtB ( const GlobalBoard ptrGTB)

set the pointer to uGT GlobalBoard

Definition at line 86 of file AXOL1TLCondition.cc.

86 { m_gtGTB = ptrGTB; }
const GlobalBoard * m_gtGTB
pointer to uGt GlobalBoard, to be able to get the trigger objects

Member Data Documentation

◆ m_gtAXOL1TLTemplate

const AXOL1TLTemplate* l1t::AXOL1TLCondition::m_gtAXOL1TLTemplate
private

pointer to a AXOL1TLTemplate

Definition at line 67 of file AXOL1TLCondition.h.

Referenced by gtAXOL1TLTemplate().

◆ m_gtGTB

const GlobalBoard* l1t::AXOL1TLCondition::m_gtGTB
private

pointer to uGt GlobalBoard, to be able to get the trigger objects

Definition at line 70 of file AXOL1TLCondition.h.

Referenced by gtGTB().