CMS 3D CMS Logo

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

#include <Stage2Layer2EtSumAlgorithmFirmware.h>

Inheritance diagram for l1t::Stage2Layer2EtSumAlgorithmFirmwareImp1:
l1t::Stage2Layer2EtSumAlgorithm

Public Member Functions

void processEvent (const std::vector< l1t::CaloTower > &towers, std::vector< l1t::EtSum > &sums) override
 
 Stage2Layer2EtSumAlgorithmFirmwareImp1 (CaloParamsHelper const *params)
 
 ~Stage2Layer2EtSumAlgorithmFirmwareImp1 () override=default
 
- Public Member Functions inherited from l1t::Stage2Layer2EtSumAlgorithm
virtual ~Stage2Layer2EtSumAlgorithm ()
 

Private Attributes

int32_t ettEtaMax_
 
int32_t ettEtaMaxHF_
 
int32_t metEtaMax_
 
int32_t metEtaMaxHF_
 
int32_t nTowEtaMax_
 
int32_t nTowThresholdHw_
 
CaloParamsHelper const * params_
 
int32_t towEtEcalSumThresh_
 
int32_t towEtMetThresh_
 
int32_t towEtSumEtThresh_
 

Detailed Description

Author
: Jim Brooke

Description: first iteration of stage 2 jet algo

Definition at line 22 of file Stage2Layer2EtSumAlgorithmFirmware.h.

Constructor & Destructor Documentation

l1t::Stage2Layer2EtSumAlgorithmFirmwareImp1::Stage2Layer2EtSumAlgorithmFirmwareImp1 ( CaloParamsHelper const *  params)

Definition at line 15 of file Stage2Layer2EtSumAlgorithmFirmwareImp1.cc.

References l1t::CaloParamsHelper::etSumEtaMax(), l1t::CaloParamsHelper::etSumEtThreshold(), ettEtaMax_, ettEtaMaxHF_, l1t::CaloTools::kHFEnd, metEtaMax_, metEtaMaxHF_, nTowEtaMax_, nTowThresholdHw_, params_, and l1t::CaloParamsHelper::towerLsbSum().

15  :
16  params_(params)
17 {
18 
19  // Add some LogDebug for these settings
24 
27 }
double etSumEtThreshold(unsigned isum) const
int etSumEtaMax(unsigned isum) const
static const int kHFEnd
Definition: CaloTools.h:41
double towerLsbSum() const
l1t::Stage2Layer2EtSumAlgorithmFirmwareImp1::~Stage2Layer2EtSumAlgorithmFirmwareImp1 ( )
overridedefault

Member Function Documentation

void l1t::Stage2Layer2EtSumAlgorithmFirmwareImp1::processEvent ( const std::vector< l1t::CaloTower > &  towers,
std::vector< l1t::EtSum > &  sums 
)
overridevirtual

Implements l1t::Stage2Layer2EtSumAlgorithm.

Definition at line 30 of file Stage2Layer2EtSumAlgorithmFirmwareImp1.cc.

References funct::abs(), l1t::CaloTools::calNrTowers(), l1t::CaloTools::CALO, l1t::CaloTools::caloEta(), l1t::CaloTools::cos_coeff, l1t::LUT::data(), l1t::CaloParamsHelper::egCompressShapesLUT(), l1t::CaloParamsHelper::egPUSParam(), stringResolutionProvider_cfi::et, l1t::CaloParamsHelper::etSumBypassEcalSumPUS(), l1t::CaloParamsHelper::etSumBypassEttPUS(), l1t::CaloParamsHelper::etSumBypassMetPUS(), l1t::CaloParamsHelper::etSumEcalSumPUSLUT(), l1t::CaloParamsHelper::etSumEcalSumPUSType(), l1t::CaloParamsHelper::etSumEttPUSLUT(), l1t::CaloParamsHelper::etSumEttPUSType(), l1t::CaloParamsHelper::etSumMetPUSLUT(), l1t::CaloParamsHelper::etSumMetPUSType(), ettEtaMax_, ettEtaMaxHF_, l1t::CaloTools::getTower(), l1t::L1Candidate::hwEta(), l1t::CaloTower::hwEtEm(), l1t::L1Candidate::hwPt(), l1t::L1Candidate::hwQual(), createfilelist::int, l1t::CaloTools::kHBHENrPhi, l1t::CaloTools::kHFBegin, l1t::CaloTools::kHFEnd, L1Analysis::kMinBiasHFM0, L1Analysis::kMinBiasHFM1, L1Analysis::kMinBiasHFP0, L1Analysis::kMinBiasHFP1, l1t::CaloTools::kSatEcal, l1t::CaloTools::kSatHcal, l1t::CaloTools::kSatTower, L1Analysis::kTotalEt, L1Analysis::kTotalEtEm, L1Analysis::kTotalEtHF, L1Analysis::kTotalEtx, L1Analysis::kTotalEtxHF, L1Analysis::kTotalEty, L1Analysis::kTotalEtyHF, L1Analysis::kTowerCount, MuonStationSelectors_cff::mb1, metEtaMax_, metEtaMaxHF_, l1t::CaloTools::mpEta(), nTowEtaMax_, nTowThresholdHw_, p4, params_, l1t::CaloParamsHelper::pileUpTowerThreshold(), l1t::CaloTools::sin_coeff, towEtEcalSumThresh_, towEtMetThresh_, towEtSumEtThresh_, and globals_cff::x1.

31  {
32 
33  unsigned int ntowers(0);
35 
36  int nTT4 = CaloTools::calNrTowers(-1*params_->egPUSParam(1),
37  params_->egPUSParam(1),
38  1,72,towers,1+params_->pileUpTowerThreshold(),999,CaloTools::CALO);
39  if(nTT4 > 255) nTT4 = 255;
40  unsigned int compNTT4 = params_->egCompressShapesLUT()->data((0x1<<7)+(0x1<<8)+(0x1<<5)+nTT4);
41 
42 
43  // etaSide=1 is positive eta, etaSide=-1 is negative eta
44  for (int etaSide=1; etaSide>=-1; etaSide-=2) {
45 
46  int ex(0), ey(0), et(0);
47  int exHF(0), eyHF(0), etHF(0);
48  int etem(0);
49  unsigned int mb0(0), mb1(0);
50 
51  bool ettSat(false), ettHFSat(false), ecalEtSat(false), metSat(false), metHFSat(false);
52 
53  for (unsigned absieta=1; absieta<=(unsigned int)CaloTools::mpEta(CaloTools::kHFEnd); absieta++) {
54 
55  int ieta = etaSide * absieta;
56 
57  towEtMetThresh_ = 0;
60 
61  if(!params_->etSumBypassMetPUS()){
62  if(params_->etSumMetPUSType() == "LUT"){
63  unsigned int towEtMetLUTAddr = (compNTT4<<6) | (abs(ieta));
64  if(abs(ieta)<13) towEtMetLUTAddr = abs(ieta);
65  towEtMetThresh_ = params_->etSumMetPUSLUT()->data(towEtMetLUTAddr);
66  } else {
67  if(params_->etSumMetPUSType() != "None" && params_->etSumMetPUSType() != "none") {
68  edm::LogError("l1t|stage 2") << "Invalid PUS type in calo params. Not applying PUS to Stage 2 MET" << std::endl;
69  return;
70  }
71  }
72  }
73 
74  if(!params_->etSumBypassEttPUS()){
75  if(params_->etSumEttPUSType() == "LUT"){
76  unsigned int towEtSumEtLUTAddr = (compNTT4<<6) | (abs(ieta));
77  if(abs(ieta)<13) towEtSumEtLUTAddr = abs(ieta);
78  towEtSumEtThresh_ = params_->etSumEttPUSLUT()->data(towEtSumEtLUTAddr);
79  } else {
80  if(params_->etSumEttPUSType() != "None" && params_->etSumEttPUSType() != "none") {
81  edm::LogError("l1t|stage 2") << "Invalid PUS type in calo params. Not applying PUS to Stage 2 ETT" << std::endl;
82  return;
83  }
84  }
85  }
86 
88  if(params_->etSumEcalSumPUSType() == "LUT"){
89  unsigned int towEtEcalSumLUTAddr = (compNTT4<<6) | (abs(ieta));
90  if(abs(ieta)<13) towEtEcalSumLUTAddr = abs(ieta);
91  towEtEcalSumThresh_ = params_->etSumEcalSumPUSLUT()->data(towEtEcalSumLUTAddr);
92  } else {
93  if(params_->etSumEcalSumPUSType() != "None" && params_->etSumEcalSumPUSType() != "none") {
94  edm::LogError("l1t|stage 2") << "Invalid PUS type in calo params. Not applying PUS to Stage 2 Ecal ETT" << std::endl;
95  return;
96  }
97  }
98  }
99 
100  int ringEx(0), ringEy(0), ringEt(0);
101  int ringExHF(0), ringEyHF(0), ringEtHF(0);
102  int ringEtEm(0);
103  unsigned int ringMB0(0), ringMB1(0);
104  unsigned int ringNtowers(0);
105 
106  for (int iphi=1; iphi<=CaloTools::kHBHENrPhi; iphi++) {
107 
108  l1t::CaloTower tower = l1t::CaloTools::getTower(towers, CaloTools::caloEta(ieta), iphi);
109 
110 
111  // MET without HF
112 
113  if (tower.hwPt()>towEtMetThresh_ && CaloTools::mpEta(abs(tower.hwEta()))<=CaloTools::mpEta(metEtaMax_) && !metSat) {
114 
115  // x- and -y coefficients are truncated by after multiplication of Et by trig coefficient.
116  // The trig coefficients themselves take values [-1023,1023] and so were scaled by
117  // 2^10 = 1024, which requires bitwise shift to the right of the final value by 10 bits.
118  // This is accounted for at ouput of demux (see Stage2Layer2DemuxSumsAlgoFirmwareImp1.cc)
119  if(tower.hwPt() == CaloTools::kSatHcal || tower.hwPt() == CaloTools::kSatEcal || tower.hwPt() == CaloTools::kSatTower) metSat=true;
120  ringEx += (int) (tower.hwPt() * CaloTools::cos_coeff[iphi - 1] );
121  ringEy += (int) (tower.hwPt() * CaloTools::sin_coeff[iphi - 1] );
122  }
123 
124  // MET *with* HF
125  if (tower.hwPt()>towEtMetThresh_ && CaloTools::mpEta(abs(tower.hwEta()))<=CaloTools::mpEta(metEtaMaxHF_) && !metHFSat) {
126  if(tower.hwPt() == CaloTools::kSatHcal || tower.hwPt() == CaloTools::kSatEcal || tower.hwPt() == CaloTools::kSatTower) metHFSat=true;
127  ringExHF += (int) (tower.hwPt() * CaloTools::cos_coeff[iphi - 1] );
128  ringEyHF += (int) (tower.hwPt() * CaloTools::sin_coeff[iphi - 1] );
129  }
130 
131  // scalar sum
132  if (tower.hwPt()>towEtSumEtThresh_ && CaloTools::mpEta(abs(tower.hwEta()))<=CaloTools::mpEta(ettEtaMax_) && !ettSat){
133  if(tower.hwPt() == CaloTools::kSatHcal || tower.hwPt() == CaloTools::kSatEcal || tower.hwPt() == CaloTools::kSatTower) ettSat=true;
134  ringEt += tower.hwPt();
135  }
136 
137  // scalar sum including HF
138  if (tower.hwPt()>towEtSumEtThresh_ && CaloTools::mpEta(abs(tower.hwEta()))<=CaloTools::mpEta(ettEtaMaxHF_) && !ettHFSat) {
139  if(tower.hwPt() == CaloTools::kSatHcal || tower.hwPt() == CaloTools::kSatEcal || tower.hwPt() == CaloTools::kSatTower) ettHFSat=true;
140  ringEtHF += tower.hwPt();
141  }
142 
143  // scalar sum (EM)
144  if (tower.hwPt()>towEtEcalSumThresh_ && CaloTools::mpEta(abs(tower.hwEta()))<=CaloTools::mpEta(ettEtaMax_) && !ecalEtSat){
145  if(tower.hwPt() == CaloTools::kSatEcal || tower.hwPt() == CaloTools::kSatTower) ecalEtSat=true;
146  ringEtEm += tower.hwEtEm();
147  }
148 
149  // count HF tower HCAL flags
152  (tower.hwQual() & 0x4) > 0)
153  ringMB0 += 1;
156  (tower.hwQual() & 0x8) > 0)
157  ringMB1 += 1;
158 
159  // tower counting
160  if (tower.hwPt()>nTowThresholdHw_ && CaloTools::mpEta(abs(tower.hwEta()))<=nTowEtaMax_)
161  ringNtowers += 1;
162  }
163 
164  ex += ringEx;
165  ey += ringEy;
166  et += ringEt;
167  etHF += ringEtHF;
168  exHF += ringExHF;
169  eyHF += ringEyHF;
170 
171  etem += ringEtEm;
172 
173  mb0 += ringMB0;
174  mb1 += ringMB1;
175 
176  ntowers += ringNtowers;
177  }
178 
179  if (mb0>0xf) mb0 = 0xf;
180  if (mb1>0xf) mb1 = 0xf;
181 
182 
183  // saturate energy sums if saturated TP/tower
184 
185  if(ecalEtSat || etem > 0xffff) etem = 0xffff;
186  if(ettSat || et > 0xffff) et = 0xffff;
187  if(ettHFSat || etHF > 0xffff) etHF = 0xffff;
188  if(metSat || ex > 0x7fffffff) ex = 0x7fffffff;
189  if(metSat || ey > 0x7fffffff) ey = 0x7fffffff;
190  if(metHFSat || exHF > 0x7fffffff) exHF = 0x7fffffff;
191  if(metHFSat || eyHF > 0x7fffffff) eyHF = 0x7fffffff;
192 
193  l1t::EtSum etSumTotalEt(p4,l1t::EtSum::EtSumType::kTotalEt,et,0,0,0);
194  l1t::EtSum etSumEx(p4,l1t::EtSum::EtSumType::kTotalEtx,ex,0,0,0);
195  l1t::EtSum etSumEy(p4,l1t::EtSum::EtSumType::kTotalEty,ey,0,0,0);
196 
197  l1t::EtSum etSumTotalEtHF(p4,l1t::EtSum::EtSumType::kTotalEtHF,etHF,0,0,0);
198  l1t::EtSum etSumExHF(p4,l1t::EtSum::EtSumType::kTotalEtxHF,exHF,0,0,0);
199  l1t::EtSum etSumEyHF(p4,l1t::EtSum::EtSumType::kTotalEtyHF,eyHF,0,0,0);
200 
201  l1t::EtSum etSumTotalEtEm(p4,l1t::EtSum::EtSumType::kTotalEtEm,etem,0,0,0);
202 
205  if (etaSide<0) {
208  }
209  l1t::EtSum etSumMinBias0(p4,type0,mb0,0,0,0);
210  l1t::EtSum etSumMinBias1(p4,type1,mb1,0,0,0);
211 
212  etsums.push_back(etSumTotalEt);
213  etsums.push_back(etSumEx);
214  etsums.push_back(etSumEy);
215 
216  etsums.push_back(etSumTotalEtHF);
217  etsums.push_back(etSumExHF);
218  etsums.push_back(etSumEyHF);
219 
220  etsums.push_back(etSumTotalEtEm);
221 
222  etsums.push_back(etSumMinBias0);
223  etsums.push_back(etSumMinBias1);
224 
225  }
226 
227  //tower count is in aux: only on eta- side!!
228  l1t::EtSum etSumNtowers(p4,l1t::EtSum::EtSumType::kTowerCount,ntowers,0,0,0);
229  etsums.push_back(etSumNtowers);
230 
231 }
static int mpEta(int ieta)
Definition: CaloTools.cc:200
static const int64_t cos_coeff[72]
Definition: CaloTools.h:120
std::string const & etSumEttPUSType() const
int hwEtEm() const
Definition: CaloTower.cc:64
static const int64_t sin_coeff[72]
Definition: CaloTools.h:121
static const int kSatHcal
Definition: CaloTools.h:53
std::string const & etSumEcalSumPUSType() const
static const int kHFBegin
Definition: CaloTools.h:40
unsigned etSumBypassEttPUS() const
l1t::LUT * egCompressShapesLUT()
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:29
unsigned etSumBypassMetPUS() const
std::string const & etSumMetPUSType() const
static size_t calNrTowers(int iEtaMin, int iEtaMax, int iPhiMin, int iPhiMax, const std::vector< l1t::CaloTower > &towers, int minHwEt, int maxHwEt, SubDet etMode=CALO)
Definition: CaloTools.cc:139
double p4[4]
Definition: TauolaWrapper.h:92
static const int kHFEnd
Definition: CaloTools.h:41
int pileUpTowerThreshold() const
static const int kSatTower
Definition: CaloTools.h:55
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
int hwEta() const
Definition: L1Candidate.h:49
int hwQual() const
Definition: L1Candidate.h:51
double egPUSParam(int ipar) const
int hwPt() const
Definition: L1Candidate.h:48
static const int kHBHENrPhi
Definition: CaloTools.h:44
unsigned etSumBypassEcalSumPUS() const
et
define resolution functions of each parameter
static int caloEta(int ietaMP)
Definition: CaloTools.cc:210
static const l1t::CaloTower & getTower(const std::vector< l1t::CaloTower > &towers, int iEta, int iPhi)
Definition: CaloTools.cc:37
int data(unsigned int address) const
Definition: LUT.h:46
static const int kSatEcal
Definition: CaloTools.h:54
EtSumType
Definition: EtSum.h:25
l1t::LUT * etSumEcalSumPUSLUT()

Member Data Documentation

int32_t l1t::Stage2Layer2EtSumAlgorithmFirmwareImp1::ettEtaMax_
private
int32_t l1t::Stage2Layer2EtSumAlgorithmFirmwareImp1::ettEtaMaxHF_
private
int32_t l1t::Stage2Layer2EtSumAlgorithmFirmwareImp1::metEtaMax_
private
int32_t l1t::Stage2Layer2EtSumAlgorithmFirmwareImp1::metEtaMaxHF_
private
int32_t l1t::Stage2Layer2EtSumAlgorithmFirmwareImp1::nTowEtaMax_
private
int32_t l1t::Stage2Layer2EtSumAlgorithmFirmwareImp1::nTowThresholdHw_
private
CaloParamsHelper const* l1t::Stage2Layer2EtSumAlgorithmFirmwareImp1::params_
private
int32_t l1t::Stage2Layer2EtSumAlgorithmFirmwareImp1::towEtEcalSumThresh_
private

Definition at line 32 of file Stage2Layer2EtSumAlgorithmFirmware.h.

Referenced by processEvent().

int32_t l1t::Stage2Layer2EtSumAlgorithmFirmwareImp1::towEtMetThresh_
private

Definition at line 30 of file Stage2Layer2EtSumAlgorithmFirmware.h.

Referenced by processEvent().

int32_t l1t::Stage2Layer2EtSumAlgorithmFirmwareImp1::towEtSumEtThresh_
private

Definition at line 31 of file Stage2Layer2EtSumAlgorithmFirmware.h.

Referenced by processEvent().