35 #include "L1Trigger/L1TCaloLayer1/src/UCTLayer1.hh"
36 #include "L1Trigger/L1TCaloLayer1/src/UCTCrate.hh"
37 #include "L1Trigger/L1TCaloLayer1/src/UCTCard.hh"
38 #include "L1Trigger/L1TCaloLayer1/src/UCTRegion.hh"
39 #include "L1Trigger/L1TCaloLayer1/src/UCTTower.hh"
41 #include "L1Trigger/L1TCaloLayer1/src/UCTGeometry.hh"
42 #include "L1Trigger/L1TCaloLayer1/src/UCTLogging.hh"
50 #include "L1Trigger/L1TCaloLayer1/src/L1TCaloLayer1FetchLUTs.hh"
53 using namespace l1tcalo;
69 virtual void endJob()
override;
84 std::vector< std::vector< std::vector < uint32_t > > >
ecalLUT;
85 std::vector< std::vector< std::vector < uint32_t > > >
hcalLUT;
86 std::vector< std::vector< uint32_t > >
hfLUT;
117 ecalTPSourceLabel(iConfig.getParameter<edm::
InputTag>(
"ecalToken").
label()),
119 hcalTPSourceLabel(iConfig.getParameter<edm::
InputTag>(
"hcalToken").
label()),
120 ecalLUT(28, std::vector< std::vector<uint32_t> >(2, std::vector<uint32_t>(256))),
121 hcalLUT(28, std::vector< std::vector<uint32_t> >(2, std::vector<uint32_t>(256))),
122 hfLUT(12, std::vector < uint32_t >(256)),
123 useLSB(iConfig.getParameter<bool>(
"useLSB")),
124 useCalib(iConfig.getParameter<bool>(
"useCalib")),
125 useECALLUT(iConfig.getParameter<bool>(
"useECALLUT")),
126 useHCALLUT(iConfig.getParameter<bool>(
"useHCALLUT")),
127 useHFLUT(iConfig.getParameter<bool>(
"useHFLUT")),
128 verbose(iConfig.getParameter<bool>(
"verbose")),
129 unpackHcalMask(iConfig.getParameter<bool>(
"unpackHcalMask")),
130 unpackEcalMask(iConfig.getParameter<bool>(
"unpackEcalMask"))
132 produces<CaloTowerBxCollection>();
133 produces<L1CaloRegionCollection>();
135 vector<UCTCrate*> crates = layer1->getCrates();
136 for(uint32_t crt = 0; crt < crates.size(); crt++) {
137 vector<UCTCard*> cards = crates[crt]->getCards();
138 for(uint32_t crd = 0; crd < cards.size(); crd++) {
139 vector<UCTRegion*> regions = cards[crd]->getRegions();
140 for(uint32_t rgn = 0; rgn < regions.size(); rgn++) {
141 vector<UCTTower*>
towers = regions[rgn]->getTowers();
142 for(uint32_t twr = 0; twr < towers.size(); twr++) {
143 twrList.push_back(towers[twr]);
152 return CaloTools::caloTowerHash(a->caloEta(), a->caloPhi()) < CaloTools::caloTowerHash(
b->caloEta(),
b->caloPhi());
178 uint32_t expectedTotalET = 0;
179 if(!
layer1->clearEvent()) {
180 LOG_ERROR <<
"UCT: Failed to clear event" << std::endl;
184 for (
const auto& ecalTp : *ecalTPs ) {
185 if (
unpackEcalMask && ((ecalTp.sample(0).raw()>>13) & 0x1) )
continue;
186 int caloEta = ecalTp.id().ieta();
187 int caloPhi = ecalTp.id().iphi();
188 int et = ecalTp.compressedEt();
189 bool fgVeto = ecalTp.fineGrain();
190 UCTTowerIndex
t = UCTTowerIndex(caloEta, caloPhi);
191 if(!
layer1->setECALData(t,fgVeto,et)) {
192 LOG_ERROR <<
"UCT: Failed loading an ECAL tower" << std::endl;
195 expectedTotalET += et;
198 for (
const auto& hcalTp : *hcalTPs ) {
199 if (
unpackHcalMask && ((hcalTp.sample(0).raw()>>13) & 0x1) )
continue;
200 int caloEta = hcalTp.id().ieta();
201 uint32_t absCaloEta =
abs(caloEta);
203 if(absCaloEta == 29) {
207 else if(hcalTp.id().version() == 0 && absCaloEta > 29) {
210 else if(absCaloEta <= 41) {
211 int caloPhi = hcalTp.id().iphi();
212 int et = hcalTp.SOI_compressedEt();
213 bool fg = hcalTp.t0().fineGrain(0);
214 bool fg2 = hcalTp.t0().fineGrain(1);
216 UCTTowerIndex
t = UCTTowerIndex(caloEta, caloPhi);
217 uint32_t featureBits = 0;
218 if(fg) featureBits |= 0b01;
220 if(absCaloEta > 29 && fg2) featureBits |= 0b10;
221 if(!
layer1->setHCALData(t, featureBits, et)) {
222 LOG_ERROR <<
"caloEta = " << caloEta <<
"; caloPhi =" << caloPhi << std::endl;
223 LOG_ERROR <<
"UCT: Failed loading an HCAL tower" << std::endl;
226 expectedTotalET += et;
229 LOG_ERROR <<
"Illegal Tower: caloEta = " << caloEta <<
"; caloPhi =" << caloPhi <<
"; et = " << et << std::endl;
233 LOG_ERROR <<
"Illegal Tower: caloEta = " << caloEta << std::endl;
239 LOG_ERROR <<
"UCT: Failed to process layer 1" << std::endl;
244 for(uint32_t twr = 0; twr <
twrList.size(); twr++) {
253 towersColl->push_back(theBX, caloTower);
256 iEvent.
put(towersColl);
259 vector<UCTCrate*> crates =
layer1->getCrates();
260 for(uint32_t crt = 0; crt < crates.size(); crt++) {
261 vector<UCTCard*> cards = crates[crt]->getCards();
262 for(uint32_t crd = 0; crd < cards.size(); crd++) {
263 vector<UCTRegion*> regions = cards[crd]->getRegions();
264 for(uint32_t rgn = 0; rgn < regions.size(); rgn++) {
265 uint32_t rawData = regions[rgn]->rawData();
266 uint32_t regionData = rawData & 0x0000FFFF;
267 uint32_t crate = regions[rgn]->getCrate();
268 uint32_t card = regions[rgn]->getCard();
269 uint32_t
region = regions[rgn]->getRegion();
270 bool negativeEta = regions[rgn]->isNegativeEta();
271 uint32_t rPhi =
g.getUCTRegionPhiIndex(crate, card);
272 if(region < NRegionsInCard) {
273 uint32_t rEta = 10 -
region;
274 if(!negativeEta) rEta = 11 +
region;
275 rgnCollection->push_back(
L1CaloRegion((uint16_t) regionData, (
unsigned) rEta, (
unsigned) rPhi, (int16_t) 0));
280 iEvent.
put(rgnCollection);
302 LOG_ERROR <<
"L1TCaloLayer1::beginRun: failed to fetch LUTS - using unity" << std::endl;
304 for(uint32_t twr = 0; twr <
twrList.size(); twr++) {
std::vector< std::vector< std::vector< uint32_t > > > hcalLUT
bool getByToken(EDGetToken token, Handle< PROD > &result) const
virtual void endJob() override
#define DEFINE_FWK_MODULE(type)
std::vector< std::vector< uint32_t > > hfLUT
edm::EDGetTokenT< HcalTrigPrimDigiCollection > hcalTPSource
std::vector< UCTTower * > twrList
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
virtual void produce(edm::Event &, const edm::EventSetup &) override
void addDefault(ParameterSetDescription const &psetDescription)
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
std::vector< std::vector< std::vector< uint32_t > > > ecalLUT
Abs< T >::type abs(const T &t)
std::string ecalTPSourceLabel
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
void setHwEtRatio(int ratio)
edm::EDGetTokenT< EcalTrigPrimDigiCollection > ecalTPSource
virtual void beginJob() override
std::string hcalTPSourceLabel
L1TCaloLayer1(const edm::ParameterSet &)
bool L1TCaloLayer1FetchLUTs(const edm::EventSetup &iSetup, std::vector< std::vector< std::vector< uint32_t > > > &eLUT, std::vector< std::vector< std::vector< uint32_t > > > &hLUT, std::vector< std::vector< uint32_t > > &hfLUT, bool useLSB, bool useCalib, bool useECALLUT, bool useHCALLUT, bool useHFLUT)
virtual void beginRun(edm::Run const &, edm::EventSetup const &) override
A calorimeter trigger region (sum of 4x4 trigger towers)
std::vector< L1CaloRegion > L1CaloRegionCollection