26 declareInterface<eFEXegAlgo>(
this);
39 return StatusCode::SUCCESS;
48 return StatusCode::FAILURE;
51 return StatusCode::SUCCESS;
99 unsigned int coresum = 0;
100 unsigned int totalsum = 0;
101 unsigned int envsum = 0;
121 for (
int i=iTotalStart; i<=iTotalEnd; ++i) {
122 for(
int j=0; j<=2; ++j) {
123 if (i>=iCoreStart && i <= iCoreEnd && j>=phiStart && j<=phiEnd) {
128 unsigned int tmptot_et;
getWindowET(2,j,i,tmptot_et);
129 totalsum += tmptot_et;
134 envsum = totalsum - coresum;
137 if (coresum > 0xffff) coresum = 0xffff;
138 if (envsum > 0xffff) envsum = 0xffff;
141 retavec.push_back(coresum);
142 retavec.push_back(envsum);
148 unsigned int hadsum = 0;
149 unsigned int emsum = 0;
160 for (
int i=0; i<3; ++i) {
161 for (
int j=0; j<=2; ++j) {
175 for (
int i=iCoreStart; i<=iCoreEnd; ++i) {
176 for(
int j=0; j<=2; ++j) {
177 unsigned int tmp_et_a, tmp_et_b;
180 emsum += ( tmp_et_a + tmp_et_b );
192 for (
int i = 0; i < 3; ++i) {
193 for (
int j = 0; j <= 2; ++j) {
201 if (j == 1 && (i == 1 || i == phi2)) {
215 for (
int i = iCoreStart; i <= iCoreEnd; ++i) {
216 for (
int j = phiStart; j <= phiEnd; ++j) {
217 unsigned int tmp_et_a, tmp_et_b;
220 emsum += (tmp_et_a + tmp_et_b);
225 if (emsum > 0xffff) emsum = 0xffff;
226 if (hadsum > 0xffff) hadsum = 0xffff;
229 rhadvec.push_back(emsum);
230 rhadvec.push_back(hadsum);
235 unsigned int numer = 0;
236 unsigned int den = 0;
243 for (
int i = iStart; i <= iEnd; ++i) {
246 for (
int j = 0; j <= 2; ++j) {
259 if (numer > 0xffff) numer = 0xffff;
262 output.push_back(den);
263 output.push_back(numer);
275 cellETs.resize(16,0);
307 std::vector<unsigned int> clusterCells;
312 unsigned int PS_ET = 0;
336 unsigned int L3_ET = clusterCells[14] + clusterCells[15];
339 unsigned int totET = PS_ET + L1_ET + L2_ET + L3_ET;
342 if (totET > 0xffff) totET = 0xffff;
352 for (
const auto& p : dmCorrections) {
353 if (p.first < 25 || p.first >= 50)
continue;
354 m_corrections[0][p.first - 25] = p.second[
"EmPS"].data<
int>();
355 m_corrections[1][p.first - 25] = p.second[
"EmFR"].data<
int>();
356 m_corrections[2][p.first - 25] = p.second[
"EmMD"].data<
int>();
357 if (
msg.level() <= MSG::DEBUG) {
358 msg << MSG::DEBUG <<
"DM Correction for etaIdx=" << (p.first - 25) <<
" : [" <<
m_corrections[0][p.first - 25] <<
","
367 if ( !
m_dmCorr || layer > 2 )
return ET;
377 else if (efexEta == 1 &&
m_fpgaid > 1) {
381 else if (efexEta == 1) {
390 static std::once_flag flag;
391 std::call_once(flag, [&]() {
397 if(dmCorrections->size()==0 && Gaudi::Hive::currentContext().eventID().time_stamp()>1672527600) {
399 throw std::runtime_error(
"No dead material corrections found in database for this event");
408 unsigned int factor = m_corrections.corr(layer, ieta);
415 unsigned int correction = ET;
416 for (
int bit = 6; bit >= 0; bit--) {
418 if (factor & (1<<bit))
428 std::unique_ptr<eFEXegTOB> out = std::make_unique<eFEXegTOB>();
431 std::vector<unsigned int> temvector;
436 out->setWstotNum(temvector[1]);
437 out->setWstotDen(temvector[0]);
439 out->setRhadEM(temvector[0]);
440 out->setRhadHad(temvector[1]);
442 out->setRetaCore(temvector[0]);
443 out->setRetaEnv(temvector[1]);
459 if (layer==1 || layer==2) {
460 outET = tmpTower->
getET(layer,etaID);
461 }
else if (layer==0 || layer==3 || layer==4) {
465 }
else if (SCID>=0 && SCID<4) {
467 if (layer==1 || layer==2) {
468 outET = tmpTower->
getET(layer,SCID);
469 }
else if (layer==0 || layer==3 || layer==4) {
478 if (layer==1 || layer==2) {
479 outET = tmpTower->
getET(layer,etaID);
480 }
else if (layer==0 || layer==3 || layer==4) {
487 if (outET > 0xffff) outET = 0xffff;
495 std::vector<unsigned int> & RetaSums,
496 std::vector<unsigned int> & RhadSums,
497 std::vector<unsigned int> & WstotSums)
517 unsigned int tmpID = 999;
518 unsigned int maxET = 0;
520 for (
int i=0; i<4 ; ++i) {
527 unsigned int iSeedET;
529 unsigned int cETDown;
537 unsigned int lETDown;
545 unsigned int rETDown;
549 if (iSeedET>=lET && iSeedET>rET
550 && iSeedET>=lETUp && iSeedET>cETUp && iSeedET>rETUp
551 && iSeedET>=lETDown && iSeedET>=cETDown && iSeedET>rETDown) {
552 if (iSeedET>=maxET) {
562 unsigned int tmp_et_up, tmp_et_down;
565 if (tmp_et_up >= tmp_et_down) {
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
#define ATH_CHECK
Evaluate an expression and check for errors.
void diff(const Jet &rJet1, const Jet &rJet2, std::map< std::string, double > varDiff)
Difference between jets - Non-Class function required by trigger.
This class is a collection of AttributeLists where each one is associated with a channel number.
virtual ~eFEXegAlgo()
Destructor.
virtual unsigned int getET()
virtual void getReta(std::vector< unsigned int > &)
virtual void getRealPhi(float &phi)
int m_eFEXegAlgoTowerID[3][3]
SG::ReadHandleKey< LVL1::eTowerContainer > m_eTowerContainerKey
Gaudi::Property< int > m_algoVersion
virtual void setup(int inputTable[3][3], int efex_id, int fpga_id, int central_eta)
virtual void getRealEta(float &eta)
virtual std::unique_ptr< eFEXegTOB > geteFEXegTOB()
virtual void getSums(unsigned int seed, bool UnD, std::vector< unsigned int > &RetaSums, std::vector< unsigned int > &RhadSums, std::vector< unsigned int > &WstotSums)
virtual StatusCode initialize()
standard Athena-Algorithm method
SG::ReadCondHandleKey< CondAttrListCollection > m_dmCorrectionsKey
eFEXegAlgo(const std::string &type, const std::string &name, const IInterface *parent)
Constructors.
virtual unsigned int dmCorrection(unsigned int ET, unsigned int layer)
virtual void getCoreEMTowerET(unsigned int &et)
virtual void getWstot(std::vector< unsigned int > &)
virtual void getWindowET(int layer, int jPhi, int SCID, unsigned int &)
virtual void getClusterCells(std::vector< unsigned int > &cellETs)
Return cell ET values used in cluster.
Gaudi::Property< bool > m_dmCorr
virtual void getRhad(std::vector< unsigned int > &)
virtual StatusCode safetyTest() const
virtual void getCoreHADTowerET(unsigned int &et)
const LVL1::eTower * findTower(int towerID) const
fast find method given identifier.
The eTower class is an interface object for eFEX trigger algorithms The purposes are twofold:
int getLayerTotalET(unsigned int layer) const
Get total ET sum of all cells in a given layer in MeV.
int getET(unsigned int layer, int cell=0) const
Get ET of a specified cell in MeV.
const_pointer_type cptr()
eFexTowerBuilder creates xAOD::eFexTowerContainer from supercells (LATOME) and triggerTowers (TREX) i...
Extra patterns decribing particle interation process.