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...
 
const std::string gtModelVerion () const
 
AXOL1TLConditionoperator= (const AXOL1TLCondition &)
 
void print (std::ostream &myCout) const override
 print condition More...
 
void setGtAXOL1TLTemplate (const AXOL1TLTemplate *)
 
void setModelVersion (const std::string modelversionname)
 
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

std::string m_AXOL1TLmodelversion = "NONE"
 
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(), gather_cfg::cout, 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 = m_AXOL1TLmodelversion;
94  hls4mlEmulator::ModelLoader loader(AXOL1TLmodelversion);
95  std::shared_ptr<hls4mlEmulator::Model> model;
96  model = loader.load_model();
97  cout << "loading model... " << AXOL1TLmodelversion << std::endl;
98 
99  // //pointers to objects
100  const BXVector<const l1t::Muon*>* candMuVec = m_gtGTB->getCandL1Mu();
103  const BXVector<const l1t::EtSum*>* candEtSumVec = m_gtGTB->getCandL1EtSum();
104 
105  const int NMuons = 4;
106  const int NJets = 10;
107  const int NEgammas = 4;
108  //const int NEtSums = 1;
109 
110  //number of indices in vector is #objects * 3 for et, eta, phi
111  const int MuVecSize = 12; //NMuons * 3; //so 12
112  const int JVecSize = 30; //NJets * 3; //so 30
113  const int EGVecSize = 12; //NEgammas * 3; //so 12
114  const int EtSumVecSize = 3; //NEtSums * 3; //so 3
115 
116  //total # inputs in vector is (4+10+4+1)*3 = 57
117  const int NInputs = 57;
118 
119  //define zero
120  ap_fixed<18, 13> fillzero = 0.0;
121 
122  //AD vector declaration, will fill later
123  ap_fixed<18, 13> ADModelInput[NInputs] = {};
124 
125  //initializing vector by type for my sanity
126  ap_fixed<18, 13> MuInput[MuVecSize];
127  ap_fixed<18, 13> JetInput[JVecSize];
128  ap_fixed<18, 13> EgammaInput[EGVecSize];
129  ap_fixed<18, 13> EtSumInput[EtSumVecSize];
130 
131  //declare result vectors +score
132  std::array<ap_fixed<10, 7>, 13> result;
133  ap_ufixed<18, 14> loss;
134  std::pair<std::array<ap_fixed<10, 7>, 13>, ap_ufixed<18, 14>>
135  ADModelResult; //model outputs a pair of the (result vector, loss)
136  float score = -1.0; //not sure what the best default is hm??
137 
138  //check number of input objects we actually have (muons, jets etc)
139  int NCandMu = candMuVec->size(useBx);
140  int NCandJet = candJetVec->size(useBx);
141  int NCandEG = candEGVec->size(useBx);
142  int NCandEtSum = candEtSumVec->size(useBx);
143 
144  //initialize arrays to zero (std::fill(first, last, value);)
145  std::fill(EtSumInput, EtSumInput + EtSumVecSize, fillzero);
146  std::fill(MuInput, MuInput + MuVecSize, fillzero);
147  std::fill(JetInput, JetInput + JVecSize, fillzero);
148  std::fill(EgammaInput, EgammaInput + EGVecSize, fillzero);
149  std::fill(ADModelInput, ADModelInput + NInputs, fillzero);
150 
151  //then fill the object vectors
152  //NOTE assume candidates are already sorted by pt
153  //loop over EtSums first, easy because there is max 1 of them
154  if (NCandEtSum > 0) { //check if not empty
155  for (int iEtSum = 0; iEtSum < NCandEtSum; iEtSum++) {
156  if ((candEtSumVec->at(useBx, iEtSum))->getType() == l1t::EtSum::EtSumType::kMissingEt) {
157  EtSumInput[0] =
158  ((candEtSumVec->at(useBx, iEtSum))->hwPt()) / 2; //have to do hwPt/2 in order to match original et inputs
159  // EtSumInput[1] = (candEtSumVec->at(useBx, iEtSum))->hwEta(); //this one is zero, so leave it zero
160  EtSumInput[2] = (candEtSumVec->at(useBx, iEtSum))->hwPhi();
161  }
162  }
163  }
164 
165  //next egammas
166  if (NCandEG > 0) { //check if not empty
167  for (int iEG = 0; iEG < NCandEG; iEG++) {
168  if (iEG < NEgammas) { //stop if fill the Nobjects we need
169  EgammaInput[0 + (3 * iEG)] = ((candEGVec->at(useBx, iEG))->hwPt()) /
170  2; //index 0,3,6,9 //have to do hwPt/2 in order to match original et inputs
171  EgammaInput[1 + (3 * iEG)] = (candEGVec->at(useBx, iEG))->hwEta(); //index 1,4,7,10
172  EgammaInput[2 + (3 * iEG)] = (candEGVec->at(useBx, iEG))->hwPhi(); //index 2,5,8,11
173  }
174  }
175  }
176 
177  //next muons
178  if (NCandMu > 0) { //check if not empty
179  for (int iMu = 0; iMu < NCandMu; iMu++) {
180  if (iMu < NMuons) { //stop if fill the Nobjects we need
181  MuInput[0 + (3 * iMu)] = ((candMuVec->at(useBx, iMu))->hwPt()) /
182  2; //index 0,3,6,9 //have to do hwPt/2 in order to match original et inputs
183  MuInput[1 + (3 * iMu)] = (candMuVec->at(useBx, iMu))->hwEta(); //index 1,4,7,10
184  MuInput[2 + (3 * iMu)] = (candMuVec->at(useBx, iMu))->hwPhi(); //index 2,5,8,11
185  }
186  }
187  }
188 
189  //next jets
190  if (NCandJet > 0) { //check if not empty
191  for (int iJet = 0; iJet < NCandJet; iJet++) {
192  if (iJet < NJets) { //stop if fill the Nobjects we need
193  JetInput[0 + (3 * iJet)] = ((candJetVec->at(useBx, iJet))->hwPt()) /
194  2; //index 0,3,6,9...27 //have to do hwPt/2 in order to match original et inputs
195  JetInput[1 + (3 * iJet)] = (candJetVec->at(useBx, iJet))->hwEta(); //index 1,4,7,10...28
196  JetInput[2 + (3 * iJet)] = (candJetVec->at(useBx, iJet))->hwPhi(); //index 2,5,8,11...29
197  }
198  }
199  }
200 
201  //now put it all together-> EtSum+EGamma+Muon+Jet into ADModelInput
202  int index = 0;
203  for (int idET = 0; idET < EtSumVecSize; idET++) {
204  ADModelInput[index++] = EtSumInput[idET];
205  }
206  for (int idEG = 0; idEG < EGVecSize; idEG++) {
207  ADModelInput[index++] = EgammaInput[idEG];
208  }
209  for (int idMu = 0; idMu < MuVecSize; idMu++) {
210  ADModelInput[index++] = MuInput[idMu];
211  }
212  for (int idJ = 0; idJ < JVecSize; idJ++) {
213  ADModelInput[index++] = JetInput[idJ];
214  }
215 
216  //now run the inference
217  model->prepare_input(ADModelInput); //scaling internal here
218  model->predict();
219  model->read_result(&ADModelResult); // this should be the square sum model result
220 
221  result = ADModelResult.first;
222  loss = ADModelResult.second;
223  score = ((loss).to_float()) * 16.0; //scaling to match threshold
224 
225  //number of objects/thrsholds to check
226  int iCondition = 0; // number of conditions: there is only one
227  int nObjInCond = m_gtAXOL1TLTemplate->nrObjects();
228 
229  if (iCondition >= nObjInCond || iCondition < 0) {
230  return false;
231  }
232 
233  const AXOL1TLTemplate::ObjectParameter objPar = (*(m_gtAXOL1TLTemplate->objectParameter()))[iCondition];
234 
235  // condGEqVal indicates the operator used for the condition (>=, =): true for >=
236  bool condGEqVal = m_gtAXOL1TLTemplate->condGEq();
237  bool passCondition = false;
238 
239  passCondition = checkCut(objPar.minAXOL1TLThreshold, score, condGEqVal);
240 
241  condResult |= passCondition; //condresult true if passCondition true else it is false
242 
243  //return result
244  return condResult;
245 }
const AXOL1TLTemplate * m_gtAXOL1TLTemplate
pointer to a AXOL1TLTemplate
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
std::string m_AXOL1TLmodelversion
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

◆ gtModelVerion()

const std::string l1t::AXOL1TLCondition::gtModelVerion ( ) const
inline

Definition at line 63 of file AXOL1TLCondition.h.

References m_AXOL1TLmodelversion.

63 { return m_AXOL1TLmodelversion; }
std::string m_AXOL1TLmodelversion

◆ 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 252 of file AXOL1TLCondition.cc.

References l1t::ConditionEvaluation::print().

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

252  {
253  myCout << "Dummy Print for AXOL1TLCondition" << std::endl;
254  m_gtAXOL1TLTemplate->print(myCout);
255 
257 }
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

◆ setModelVersion()

void AXOL1TLCondition::setModelVersion ( const std::string  modelversionname)

Definition at line 248 of file AXOL1TLCondition.cc.

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

248  {
249  m_AXOL1TLmodelversion = modelversionname;
250 }
std::string m_AXOL1TLmodelversion

◆ 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_AXOL1TLmodelversion

std::string l1t::AXOL1TLCondition::m_AXOL1TLmodelversion = "NONE"
private

Definition at line 78 of file AXOL1TLCondition.h.

Referenced by gtModelVerion().

◆ m_gtAXOL1TLTemplate

const AXOL1TLTemplate* l1t::AXOL1TLCondition::m_gtAXOL1TLTemplate
private

pointer to a AXOL1TLTemplate

Definition at line 72 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 75 of file AXOL1TLCondition.h.

Referenced by gtGTB().