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" 69 void endJob()
override;
84 std::vector< std::array< std::array< std::array<uint32_t, nEtBins>, nCalSideBins >, nCalEtaBins> >
ecalLUT;
85 std::vector< std::array< std::array< std::array<uint32_t, nEtBins>, nCalSideBins >, nCalEtaBins> >
hcalLUT;
86 std::vector< std::array< std::array<uint32_t, nEtBins>, nHfEtaBins > >
hfLUT;
122 ecalTPSourceLabel(iConfig.getParameter<
edm::InputTag>(
"ecalToken").
label()),
124 hcalTPSourceLabel(iConfig.getParameter<
edm::InputTag>(
"hcalToken").
label()),
128 useLSB(iConfig.getParameter<
bool>(
"useLSB")),
129 useCalib(iConfig.getParameter<
bool>(
"useCalib")),
130 useECALLUT(iConfig.getParameter<
bool>(
"useECALLUT")),
131 useHCALLUT(iConfig.getParameter<
bool>(
"useHCALLUT")),
132 useHFLUT(iConfig.getParameter<
bool>(
"useHFLUT")),
134 unpackHcalMask(iConfig.getParameter<
bool>(
"unpackHcalMask")),
135 unpackEcalMask(iConfig.getParameter<
bool>(
"unpackEcalMask")),
138 produces<CaloTowerBxCollection>();
139 produces<L1CaloRegionCollection>();
144 vector<UCTCrate*> crates = layer1->getCrates();
145 for(uint32_t crt = 0; crt < crates.size(); crt++) {
146 vector<UCTCard*> cards = crates[crt]->getCards();
147 for(uint32_t crd = 0; crd < cards.size(); crd++) {
148 vector<UCTRegion*>
regions = cards[crd]->getRegions();
149 for(uint32_t rgn = 0; rgn < regions.size(); rgn++) {
150 vector<UCTTower*> towers = regions[rgn]->getTowers();
151 for(uint32_t twr = 0; twr < towers.size(); twr++) {
152 twrList.push_back(towers[twr]);
161 return CaloTools::caloTowerHash(a->caloEta(), a->caloPhi()) < CaloTools::caloTowerHash(
b->caloEta(),
b->caloPhi());
187 uint32_t expectedTotalET = 0;
188 if(!
layer1->clearEvent()) {
189 LOG_ERROR <<
"UCT: Failed to clear event" << std::endl;
193 for (
const auto& ecalTp : *ecalTPs ) {
195 int caloEta = ecalTp.id().ieta();
196 int caloPhi = ecalTp.id().iphi();
197 int et = ecalTp.compressedEt();
198 bool fgVeto = ecalTp.fineGrain();
199 UCTTowerIndex
t = UCTTowerIndex(caloEta, caloPhi);
200 if(!
layer1->setECALData(t,fgVeto,et)) {
201 LOG_ERROR <<
"UCT: Failed loading an ECAL tower" << std::endl;
204 expectedTotalET +=
et;
209 for (
const auto& hcalTp : *hcalTPs ) {
211 int caloEta = hcalTp.id().ieta();
212 uint32_t absCaloEta =
std::abs(caloEta);
214 if(absCaloEta == 29) {
218 else if(hcalTp.id().version() == 0 && absCaloEta > 29) {
221 else if(absCaloEta <= 41) {
222 int caloPhi = hcalTp.id().iphi();
223 int et = hcalTp.SOI_compressedEt();
224 bool fg = hcalTp.t0().fineGrain(0);
225 bool fg2 = hcalTp.t0().fineGrain(1);
227 UCTTowerIndex
t = UCTTowerIndex(caloEta, caloPhi);
228 uint32_t featureBits = 0;
229 if(fg) featureBits |= 0b01;
231 if(absCaloEta > 29 && fg2) featureBits |= 0b10;
232 if(!
layer1->setHCALData(t, featureBits, et)) {
233 LOG_ERROR <<
"caloEta = " << caloEta <<
"; caloPhi =" << caloPhi << std::endl;
234 LOG_ERROR <<
"UCT: Failed loading an HCAL tower" << std::endl;
237 expectedTotalET +=
et;
240 LOG_ERROR <<
"Illegal Tower: caloEta = " << caloEta <<
"; caloPhi =" << caloPhi <<
"; et = " << et << std::endl;
244 LOG_ERROR <<
"Illegal Tower: caloEta = " << caloEta << std::endl;
251 LOG_ERROR <<
"UCT: Failed to process layer 1" << std::endl;
256 for(uint32_t twr = 0; twr <
twrList.size(); twr++) {
265 towersColl->push_back(theBX, caloTower);
271 vector<UCTCrate*> crates =
layer1->getCrates();
272 for(uint32_t crt = 0; crt < crates.size(); crt++) {
273 vector<UCTCard*> cards = crates[crt]->getCards();
274 for(uint32_t crd = 0; crd < cards.size(); crd++) {
275 vector<UCTRegion*>
regions = cards[crd]->getRegions();
276 for(uint32_t rgn = 0; rgn < regions.size(); rgn++) {
277 uint32_t rawData = regions[rgn]->rawData();
278 uint32_t regionData = rawData & 0x0000FFFF;
279 uint32_t crate = regions[rgn]->getCrate();
280 uint32_t card = regions[rgn]->getCard();
281 uint32_t region = regions[rgn]->getRegion();
282 bool negativeEta = regions[rgn]->isNegativeEta();
283 uint32_t rPhi = g.getUCTRegionPhiIndex(crate, card);
284 if(region < NRegionsInCard) {
285 uint32_t rEta = 10 - region;
286 if(!negativeEta) rEta = 11 + region;
287 rgnCollection->push_back(
L1CaloRegion((uint16_t) regionData, (
unsigned) rEta, (
unsigned) rPhi, (int16_t) 0));
313 if(!
L1TCaloLayer1FetchLUTs(iSetup,
ecalLUT,
hcalLUT,
hfLUT,
ePhiMap,
hPhiMap,
hfPhiMap,
useLSB,
useCalib,
useECALLUT,
useHCALLUT,
useHFLUT,
fwVersion)) {
314 LOG_ERROR <<
"L1TCaloLayer1::beginRun: failed to fetch LUTS - using unity" << std::endl;
315 std::array< std::array< std::array<uint32_t, nEtBins>, nCalSideBins >, nCalEtaBins> eCalLayer1EtaSideEtArray;
316 std::array< std::array< std::array<uint32_t, nEtBins>, nCalSideBins >, nCalEtaBins> hCalLayer1EtaSideEtArray;
317 std::array< std::array<uint32_t, nEtBins>, nHfEtaBins > hfLayer1EtaEtArray;
318 ecalLUT.push_back(eCalLayer1EtaSideEtArray);
319 hcalLUT.push_back(hCalLayer1EtaSideEtArray);
320 hfLUT.push_back(hfLayer1EtaEtArray);
322 for(uint32_t twr = 0; twr <
twrList.size(); twr++) {
324 int iphi =
twrList[twr]->caloPhi();
325 int ieta =
twrList[twr]->caloEta();
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
std::vector< unsigned int > hfPhiMap
bool getByToken(EDGetToken token, Handle< PROD > &result) const
#define DEFINE_FWK_MODULE(type)
bool L1TCaloLayer1FetchLUTs(const edm::EventSetup &iSetup, std::vector< std::array< std::array< std::array< uint32_t, nEtBins >, nCalSideBins >, nCalEtaBins > > &eLUT, std::vector< std::array< std::array< std::array< uint32_t, nEtBins >, nCalSideBins >, nCalEtaBins > > &hLUT, std::vector< std::array< std::array< uint32_t, nEtBins >, nHfEtaBins > > &hfLUT, std::vector< unsigned int > &ePhiMap, std::vector< unsigned int > &hPhiMap, std::vector< unsigned int > &hfPhiMap, bool useLSB, bool useCalib, bool useECALLUT, bool useHCALLUT, bool useHFLUT, int fwVersion)
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
void produce(edm::Event &, const edm::EventSetup &) override
std::vector< unsigned int > hPhiMap
void addDefault(ParameterSetDescription const &psetDescription)
~L1TCaloLayer1() override
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Abs< T >::type abs(const T &t)
std::string ecalTPSourceLabel
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
void setHwEtRatio(int ratio)
edm::EDGetTokenT< EcalTrigPrimDigiCollection > ecalTPSource
et
define resolution functions of each parameter
std::vector< std::array< std::array< std::array< uint32_t, nEtBins >, nCalSideBins >, nCalEtaBins > > ecalLUT
std::string hcalTPSourceLabel
L1TCaloLayer1(const edm::ParameterSet &)
std::vector< std::array< std::array< std::array< uint32_t, nEtBins >, nCalSideBins >, nCalEtaBins > > hcalLUT
std::vector< std::array< std::array< uint32_t, nEtBins >, nHfEtaBins > > hfLUT
std::vector< unsigned int > ePhiMap
void beginRun(edm::Run const &, edm::EventSetup const &) override
A calorimeter trigger region (sum of 4x4 trigger towers)
std::vector< L1CaloRegion > L1CaloRegionCollection