75 void endJob()
override;
106 verbosity_(ps.getParameter<
int>(
"verbosity")),
107 rctConditions_(ps.getParameter<
bool>(
"rctConditions")),
108 bxFirst_(ps.getParameter<
int>(
"bxFirst")),
109 bxLast_(ps.getParameter<
int>(
"bxLast")),
110 ecalToken_(bxLast_+1-bxFirst_),
111 hcalToken_(bxLast_+1-bxFirst_),
117 produces<CaloTowerBxCollection> ();
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;
367 edm::LogError(
"l1t|caloStage2") <<
"Could not retrieve params from Event Setup" << std::endl;
385 edm::LogError(
"l1t|caloStage2") <<
"Layer 1 firmware could not be configured.\n";
T getParameter(std::string const &) const
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
L1TStage2Layer1Producer(const edm::ParameterSet &ps)
ReturnType create(unsigned fwv, CaloParamsHelper const *params)
#define DEFINE_FWK_MODULE(type)
void addDefault(ParameterSetDescription const &psetDescription)
Stage2Layer1FirmwareFactory factory_
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_
~L1TStage2Layer1Producer() override
unsigned long long paramsCacheId_
std::vector< edm::EDGetToken > hcalToken_
const_iterator end() const
void beginRun(edm::Run const &, edm::EventSetup const &) override
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
et
define resolution functions of each parameter
void endRun(edm::Run const &, edm::EventSetup const &) override
virtual double hcaletValue(const int &ieta, const int &iphi, const int &version, const int &compressedValue) const =0
void produce(edm::Event &, const edm::EventSetup &) override
T const * product() const
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
const_iterator begin() const