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

References l1t::ConditionEvaluation::print().

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

257  {
258  myCout << "Dummy Print for AXOL1TLCondition" << std::endl;
259  m_gtAXOL1TLTemplate->print(myCout);
260 
262 }
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 253 of file AXOL1TLCondition.cc.

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

253  {
254  m_AXOL1TLmodelversion = modelversionname;
255 }
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().