144 LogDebug(
"l1t|stage 2") <<
"L1TStage2Layer1Producer::produce function called..." << std::endl;
181 std::unique_ptr< std::vector<CaloTower> > localInTowers (
new std::vector<CaloTower>(CaloTools::caloTowerHashMax()+1));
182 std::unique_ptr< std::vector<CaloTower> > localOutTowers (
new std::vector<CaloTower>());
187 for (ecalItr=ecalTPs->
begin(); ecalItr!=ecalTPs->
end(); ++ecalItr, ++nEcal) {
189 int ieta = ecalItr->id().ieta();
190 int iphi = ecalItr->id().iphi();
192 int ietIn = ecalItr->compressedEt();
193 bool ifg = ecalItr->fineGrain();
198 et = ecalScale->
et( ietIn,
abs(ieta), (ieta>0) );
207 int itow = CaloTools::caloTowerHash(ieta, iphi);
208 localInTowers->at(itow).setHwEtEm(ietOut);
209 localInTowers->at(itow).setHwQual( localInTowers->at(itow).hwQual() | (ifg ? 0x8 : 0x0) );
216 for (hcalItr=hcalTPs->
begin(); hcalItr!=hcalTPs->
end(); ++hcalItr, ++nHcal) {
218 int ieta = hcalItr->id().ieta();
219 int iphi = hcalItr->id().iphi();
220 int ver = hcalItr->id().version();
223 if (
abs(ieta)>=CaloTools::kHFBegin && ver!=1)
continue;
225 int ietIn = hcalItr->SOI_compressedEt();
226 int ifg = hcalItr->SOI_fineGrain();
232 if (
abs(ieta) >= CaloTools::kHFBegin)
233 et = hcalScale->
et( ietIn, CaloTools::kHFBegin, (ieta>0) );
235 et = hcalScale->
et( ietIn,
abs(ieta), (ieta>0) );
238 et = decoder->
hcaletValue(hcalItr->id(), hcalItr->t0());
244 unsigned itow = CaloTools::caloTowerHash(ieta, iphi);
247 LogDebug(
"L1TDebug") <<
" HCAL TP : " << ieta <<
", " << iphi <<
", " << ietIn <<
", " << et <<
", " << ietOut <<
", " << itow <<
", " << CaloTools::caloTowerHashMax() <<
", " << localInTowers->size() << std::endl;
249 localInTowers->at(itow).setHwEtHad(ietOut);
250 localInTowers->at(itow).setHwQual( localInTowers->at(itow).hwQual() | (ifg ? 0x4 : 0x0) );
255 for (
int ieta=-1*CaloTools::kHFEnd; ieta<=CaloTools::kHFEnd; ieta++) {
257 for (
int iphi=0; iphi<=CaloTools::kHBHENrPhi; iphi++) {
259 if(!CaloTools::isValidIEtaIPhi(ieta,iphi))
continue;
261 unsigned itow = CaloTools::caloTowerHash(ieta, iphi);
264 int ietEcal = localInTowers->at(itow).hwEtEm();
265 int ietHcal = localInTowers->at(itow).hwEtHad();
267 int iet = ietEcal + ietHcal;
270 LogDebug(
"L1TDebug") <<
" L1Tow : " << ieta <<
", " << iphi <<
", " << itow <<
", " << iet <<
", " << ietEcal <<
", " << ietHcal << std::endl;
272 localInTowers->at(itow).setHwPt(iet);
273 localInTowers->at(itow).setHwEta(ieta);
274 localInTowers->at(itow).setHwPhi(iphi);
276 int ietby2 = round(
double(ietHcal) / 2. );
277 int ietby4 = round(
double(ietHcal) / 4. );
280 if (
abs(ieta)>29 && iphi % 2 == 1) {
281 localInTowers->at(itow).setHwPt(ietby2);
282 localInTowers->at(itow).setHwEtHad(ietby2);
283 int itow_next = CaloTools::caloTowerHash(ieta, iphi+1);
284 localInTowers->at(itow_next).setHwPt(ietby2);
285 localInTowers->at(itow_next).setHwEtHad(ietby2);
288 if (
abs(ieta)>39 && iphi % 4 == 3) {
289 localInTowers->at(itow).setHwPt(ietby4);
290 localInTowers->at(itow).setHwEtHad(ietby4);
291 int itow_next = CaloTools::caloTowerHash(ieta, iphi+1);
292 localInTowers->at(itow_next).setHwPt(ietby4);
293 localInTowers->at(itow_next).setHwEtHad(ietby4);
294 itow_next = CaloTools::caloTowerHash(ieta, iphi-1);
295 localInTowers->at(itow_next).setHwPt(ietby4);
296 localInTowers->at(itow_next).setHwEtHad(ietby4);
297 itow_next = CaloTools::caloTowerHash(ieta, iphi-2);
298 localInTowers->at(itow_next).setHwPt(ietby4);
299 localInTowers->at(itow_next).setHwEtHad(ietby4);
313 processor_->processEvent(*localInTowers, *localOutTowers);
316 for(std::vector<CaloTower>::const_iterator tower = localOutTowers->begin();
317 tower != localOutTowers->end();
320 towersColl->push_back(ibx, *tower);
322 LogDebug(
"L1TDebug") <<
"BX=" << ibx <<
", N(Tower in)=" << localInTowers->size() <<
", N(Tower out)=" << localOutTowers->size() << std::endl;
std::vector< edm::EDGetToken > ecalToken_
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
bool getByToken(EDGetToken token, Handle< PROD > &result) const
std::vector< T >::const_iterator const_iterator
CaloParamsHelper * params_
double et(unsigned short rank, unsigned short eta, short etaSign) const
convert from rank to physically meaningful quantity
double et(unsigned short rank, unsigned short eta, short etaSign) const
convert from rank to physically meaningful quantity
Abs< T >::type abs(const T &t)
std::shared_ptr< Stage2PreProcessor > processor_
std::vector< edm::EDGetToken > hcalToken_
const_iterator end() const
et
define resolution functions of each parameter
virtual double hcaletValue(const int &ieta, const int &iphi, const int &version, const int &compressedValue) const =0
const_iterator begin() const