CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
Phase2L1CaloEGammaEmulator Class Reference
Inheritance diagram for Phase2L1CaloEGammaEmulator:
edm::stream::EDProducer<>

Public Member Functions

 Phase2L1CaloEGammaEmulator (const edm::ParameterSet &)
 
 ~Phase2L1CaloEGammaEmulator () override=default
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &)
 

Private Member Functions

void produce (edm::Event &, const edm::EventSetup &) override
 

Private Attributes

l1tp2::ParametricCalibration calib_
 
edm::ESGetToken< CaloGeometry, CaloGeometryRecordcaloGeometryTag_
 
edm::ESGetToken< CaloTPGTranscoder, CaloTPGRecorddecoderTag_
 
const CaloSubdetectorGeometryebGeometry
 
edm::EDGetTokenT< EcalEBTrigPrimDigiCollectionecalTPEBToken_
 
const CaloSubdetectorGeometryhbGeometry
 
edm::ESGetToken< HcalTopology, HcalRecNumberingRecordhbTopologyTag_
 
edm::EDGetTokenT< edm::SortedCollection< HcalTriggerPrimitiveDigi > > hcalTPToken_
 
const HcalTopologyhcTopology_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
using CacheTypes = CacheContexts< T... >
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T... >
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 

Detailed Description

Definition at line 60 of file Phase2L1CaloEGammaEmulator.cc.

Constructor & Destructor Documentation

◆ Phase2L1CaloEGammaEmulator()

Phase2L1CaloEGammaEmulator::Phase2L1CaloEGammaEmulator ( const edm::ParameterSet iConfig)
explicit

Definition at line 87 of file Phase2L1CaloEGammaEmulator.cc.

88  : ecalTPEBToken_(consumes<EcalEBTrigPrimDigiCollection>(iConfig.getParameter<edm::InputTag>("ecalTPEB"))),
91  decoderTag_(esConsumes<CaloTPGTranscoder, CaloTPGRecord>(edm::ESInputTag("", ""))),
92  calib_(iConfig.getParameter<edm::ParameterSet>("calib")),
93  caloGeometryTag_(esConsumes<CaloGeometry, CaloGeometryRecord>(edm::ESInputTag("", ""))),
94  hbTopologyTag_(esConsumes<HcalTopology, HcalRecNumberingRecord>(edm::ESInputTag("", ""))) {
95  produces<l1tp2::CaloCrystalClusterCollection>("RCT");
96  produces<l1tp2::CaloCrystalClusterCollection>("GCT");
97  produces<l1tp2::CaloTowerCollection>("RCT");
98  produces<l1tp2::CaloTowerCollection>("GCT");
99  produces<l1tp2::CaloTowerCollection>("GCTFullTowers");
100  produces<BXVector<l1t::EGamma>>("GCTEGammas");
101  produces<l1tp2::DigitizedClusterCorrelatorCollection>("GCTDigitizedClusterToCorrelator");
102  produces<l1tp2::DigitizedTowerCorrelatorCollection>("GCTDigitizedTowerToCorrelator");
103  produces<l1tp2::DigitizedClusterGTCollection>("GCTDigitizedClusterToGT");
104 }
edm::ESGetToken< CaloTPGTranscoder, CaloTPGRecord > decoderTag_
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
l1tp2::ParametricCalibration calib_
edm::EDGetTokenT< edm::SortedCollection< HcalTriggerPrimitiveDigi > > hcalTPToken_
edm::ESGetToken< HcalTopology, HcalRecNumberingRecord > hbTopologyTag_
edm::EDGetTokenT< EcalEBTrigPrimDigiCollection > ecalTPEBToken_
edm::ESGetToken< CaloGeometry, CaloGeometryRecord > caloGeometryTag_

◆ ~Phase2L1CaloEGammaEmulator()

Phase2L1CaloEGammaEmulator::~Phase2L1CaloEGammaEmulator ( )
overridedefault

Member Function Documentation

◆ fillDescriptions()

void Phase2L1CaloEGammaEmulator::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 644 of file Phase2L1CaloEGammaEmulator.cc.

References edm::ParameterSetDescription::add(), edm::ConfigurationDescriptions::addWithDefaultLabel(), submitPVResolutionJobs::desc, and ProducerED_cfi::InputTag.

644  {
645  // l1tPhase2L1CaloEGammaEmulator
647  desc.add<edm::InputTag>("ecalTPEB", edm::InputTag("simEcalEBTriggerPrimitiveDigis"));
648  desc.add<edm::InputTag>("hcalTP", edm::InputTag("simHcalTriggerPrimitiveDigis"));
649  {
651  psd0.add<std::vector<double>>("etaBins",
652  {
653  0.087,
654  0.174,
655  0.261,
656  0.348,
657  0.435,
658  0.522,
659  0.609,
660  0.696,
661  0.783,
662  0.87,
663  0.957,
664  1.044,
665  1.131,
666  1.218,
667  1.305,
668  1.392,
669  1.479,
670  });
671  psd0.add<std::vector<double>>("ptBins",
672  {
673  12,
674  20,
675  30,
676  40,
677  55,
678  90,
679  1000000.0,
680  });
681  psd0.add<std::vector<double>>("scale",
682  {
683  1.298, 1.287,
684  1.309, 1.298,
685  1.309, 1.309,
686  1.309, 1.298,
687  1.309, 1.298,
688  1.309, 1.309,
689  1.309, 1.32,
690  1.309, 1.32,
691  1.309, 1.1742,
692  1.1639, 1.1639,
693  1.1639, 1.1639,
694  1.1639, 1.1639,
695  1.1742, 1.1742,
696  1.1639, 1.1639,
697  1.1742, 1.1639,
698  1.1639, 1.1742,
699  1.1742, 1.1536000000000002,
700  1.11, 1.11,
701  1.11, 1.11,
702  1.11, 1.11,
703  1.11, 1.11,
704  1.11, 1.11,
705  1.11, 1.11,
706  1.11, 1.11,
707  1.11, 1.11,
708  1.1, 1.09,
709  1.09, 1.09,
710  1.09, 1.09,
711  1.09, 1.09,
712  1.09, 1.09,
713  1.09, 1.09,
714  1.09, 1.09,
715  1.09, 1.09,
716  1.09, 1.09,
717  1.07, 1.07,
718  1.07, 1.07,
719  1.07, 1.07,
720  1.07, 1.08,
721  1.07, 1.07,
722  1.08, 1.08,
723  1.07, 1.08,
724  1.08, 1.08,
725  1.08, 1.06,
726  1.06, 1.06,
727  1.06, 1.05,
728  1.05, 1.06,
729  1.06, 1.06,
730  1.06, 1.06,
731  1.06, 1.06,
732  1.06, 1.06,
733  1.06, 1.06,
734  1.04, 1.04,
735  1.04, 1.04,
736  1.05, 1.04,
737  1.05, 1.05,
738  1.05, 1.05,
739  1.05, 1.05,
740  1.05, 1.05,
741  1.05, 1.05,
742  1.05,
743  });
744  desc.add<edm::ParameterSetDescription>("calib", psd0);
745  }
746  descriptions.addWithDefaultLabel(desc);
747 }
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)
ParameterDescriptionBase * add(U const &iLabel, T const &value)

◆ produce()

void Phase2L1CaloEGammaEmulator::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprivate

Definition at line 106 of file Phase2L1CaloEGammaEmulator.cc.

References funct::abs(), p2eg::linkECAL::addCrystalE(), p2eg::towerHCAL::addEt(), p2eg::tower_t::addHoverEToTower(), p2eg::algo_top(), p2eg::tower_t::applyCalibration(), HltBtagPostValidation_cff::c, fftjetpileupestimator_calo_uncalib_cfi::c0, calib_, caloGeometryTag_, gpuPixelDoublets::cc, p2eg::Cluster::clusterEnergy(), p2eg::compareClusterET(), p2eg::convertHcalETtoEcalET(), p2eg::RCTcluster_t::crEta, p2eg::RCTcluster_t::crPhi, p2eg::CRYSTAL_IN_ETA, p2eg::CRYSTAL_IN_PHI, p2eg::CRYSTALS_IN_TOWER_ETA, p2eg::CRYSTALS_IN_TOWER_PHI, p2eg::cut_500_MeV, decoderTag_, HcalTrigTowerGeometry::detIds(), ebGeometry, DetId::Ecal, p2eg::ECAL_LSB, EcalBarrel, ecalTPEBToken_, relativeConstraints::empty, mps_fire::end, EgHLTOffHistBins_cfi::et, p2eg::tower_t::et(), p2eg::RCTcluster_t::et, p2eg::RCTcluster_t::et2x5, p2eg::RCTcluster_t::et5x5, Exception, p2eg::GCTcardtoRCTcardnumber, p2eg::getAbsID_iEta_fromFirmwareCardTowerLink(), p2eg::getAbsID_iPhi_fromFirmwareCardTowerLink(), p2eg::getClusterFromRegion3x4(), p2eg::linkECAL::getCrystalE(), edm::EventSetup::getData(), p2eg::getECALTowersEt(), p2eg::towerHCAL::getEt(), CaloSubdetectorGeometry::getGeometry(), p2eg::region3x4::getLinkECAL(), p2eg::card::getRegion3x4(), p2eg::getRegionNumber(), p2eg::getTowerEta_fromAbsID(), p2eg::towers3x4::getTowerHCAL(), p2eg::getTowerPhi_fromAbsID(), p2eg::card::getTowers3x4(), hbGeometry, hbTopologyTag_, DetId::Hcal, p2eg::HCAL_LSB, HcalBarrel, hcalTPToken_, hcTopology_, electrons_cff::hoe, p2eg::tower_t::hoe(), mps_fire::i, hit::id, l1tPhase2CaloJetEmulator_cfi::iEta, iEvent, cuy::ii, createfilelist::int, p2eg::RCTcluster_t::is_iso, p2eg::RCTcluster_t::is_looseTkiso, p2eg::RCTcluster_t::is_looseTkss, p2eg::RCTcluster_t::is_ss, findQualityFiles::jj, GetRecoTauVFromDQM_MC_cff::kk, eostools::move(), p2eg::n_clusters_4link, p2eg::N_CLUSTERS_PER_REGION, p2eg::N_GCTCARDS, p2eg::N_GCTTOWERS_FIBER, p2eg::n_links_card, p2eg::N_RCTCARDS_PHI, p2eg::N_RCTCLUSTERS_FIBER, p2eg::N_RCTGCT_FIBERS, p2eg::N_REGIONS_PER_CARD, p2eg::n_towers_cardEta, p2eg::n_towers_cardPhi, p2eg::n_towers_halfPhi, p2eg::RCTcluster_t::nGCTCard, submitPVValidationJobs::params, p2eg::passes_looseTkss(), p2eg::passes_ss(), edm::Handle< T >::product(), p2eg::GCTcard_t::RCTcardEtaNeg, p2eg::GCTcard_t::RCTcardEtaPos, p2eg::RCTtoGCTfiber_t::RCTclusters, p2eg::RCTcard_t::RCTtoGCTfiber, p2eg::RCTtoGCTfiber_t::RCTtowers, p2eg::Cluster::region(), l1tp2::CaloTower::setEcalTowerEt(), p2eg::SimpleCaloHit::setEnergy(), p2eg::SimpleCaloHit::setEt_uint(), l1tp2::CaloTower::setHcalTowerEt(), p2eg::SimpleCaloHit::setId(), p2eg::SimpleCaloHit::setIdHcal(), p2eg::card::setIdx(), p2eg::SimpleCaloHit::setPosition(), p2eg::SimpleCaloHit::setPt(), p2eg::Cluster::setRegionIdx(), l1tp2::CaloTower::setTowerEta(), l1tp2::CaloTower::setTowerIEta(), l1tp2::CaloTower::setTowerIPhi(), l1tp2::CaloTower::setTowerPhi(), findQualityFiles::size, jetUpdater_cfi::sort, p2eg::stitchClusterOverRegionBoundary(), submitPVValidationJobs::t, hcaldqm::constants::tCalib, p2eg::TOWER_IN_ETA, p2eg::TOWER_IN_PHI, p2eg::Cluster::towerEta(), p2eg::Cluster::towerPhi(), p2eg::RCTcluster_t::towEta, p2eg::RCTcluster_t::towPhi, and HcalTopology::validHT().

106  {
107  using namespace edm;
108 
109  // Detector geometry
110  const auto& caloGeometry = iSetup.getData(caloGeometryTag_);
111  ebGeometry = caloGeometry.getSubdetectorGeometry(DetId::Ecal, EcalBarrel);
112  hbGeometry = caloGeometry.getSubdetectorGeometry(DetId::Hcal, HcalBarrel);
113  const auto& hbTopology = iSetup.getData(hbTopologyTag_);
114  hcTopology_ = &hbTopology;
115  HcalTrigTowerGeometry theTrigTowerGeometry(hcTopology_);
116 
117  const auto& decoder = iSetup.getData(decoderTag_);
118 
119  //***************************************************//
120  // Declare RCT output collections
121  //***************************************************//
122 
123  auto L1EGXtalClusters = std::make_unique<l1tp2::CaloCrystalClusterCollection>();
124  auto L1CaloTowers = std::make_unique<l1tp2::CaloTowerCollection>();
125 
126  //***************************************************//
127  // Get the ECAL hits
128  //***************************************************//
130  iEvent.getByToken(ecalTPEBToken_, pcalohits);
131 
132  std::vector<p2eg::SimpleCaloHit> ecalhits;
133 
134  for (const auto& hit : *pcalohits.product()) {
135  if (hit.encodedEt() > 0) // hit.encodedEt() returns an int corresponding to 2x the crystal Et
136  {
137  // Et is 10 bit, by keeping the ADC saturation Et at 120 GeV it means that you have to multiply by 0.125 (input LSB)
138  float et = hit.encodedEt() * 0.125;
139  if (et < p2eg::cut_500_MeV) {
140  continue; // Reject hits with < 500 MeV ET
141  }
142 
143  // Get cell coordinates and info
144  auto cell = ebGeometry->getGeometry(hit.id());
145 
146  p2eg::SimpleCaloHit ehit;
147  ehit.setId(hit.id());
148  ehit.setPosition(GlobalVector(cell->getPosition().x(), cell->getPosition().y(), cell->getPosition().z()));
149  ehit.setEnergy(et);
150  ehit.setEt_uint((ap_uint<10>)hit.encodedEt()); // also save the uint Et
151  ehit.setPt();
152  ecalhits.push_back(ehit);
153  }
154  }
155 
156  //***************************************************//
157  // Get the HCAL hits
158  //***************************************************//
159  std::vector<p2eg::SimpleCaloHit> hcalhits;
161  iEvent.getByToken(hcalTPToken_, hbhecoll);
162 
163  for (const auto& hit : *hbhecoll.product()) {
164  float et = decoder.hcaletValue(hit.id(), hit.t0());
165  ap_uint<10> encodedEt = hit.t0().compressedEt();
166  // same thing as SOI_compressedEt() in HcalTriggerPrimitiveDigi.h///
167  if (et <= 0)
168  continue;
169 
170  if (!(hcTopology_->validHT(hit.id()))) {
171  LogError("Phase2L1CaloEGammaEmulator")
172  << " -- Hcal hit DetID not present in HCAL Geom: " << hit.id() << std::endl;
173  throw cms::Exception("Phase2L1CaloEGammaEmulator");
174  continue;
175  }
176  const std::vector<HcalDetId>& hcId = theTrigTowerGeometry.detIds(hit.id());
177  if (hcId.empty()) {
178  LogError("Phase2L1CaloEGammaEmulator") << "Cannot find any HCalDetId corresponding to " << hit.id() << std::endl;
179  throw cms::Exception("Phase2L1CaloEGammaEmulator");
180  continue;
181  }
182  if (hcId[0].subdetId() > 1) {
183  continue;
184  }
185  GlobalVector hcal_tp_position = GlobalVector(0., 0., 0.);
186  for (const auto& hcId_i : hcId) {
187  if (hcId_i.subdetId() > 1) {
188  continue;
189  }
190  // get the first HCAL TP/ cell
191  auto cell = hbGeometry->getGeometry(hcId_i);
192  if (cell == nullptr) {
193  continue;
194  }
195  GlobalVector tmpVector = GlobalVector(cell->getPosition().x(), cell->getPosition().y(), cell->getPosition().z());
196  hcal_tp_position = tmpVector;
197 
198  break;
199  }
200  p2eg::SimpleCaloHit hhit;
201  hhit.setId(hit.id());
202  hhit.setIdHcal(hit.id());
203  hhit.setPosition(hcal_tp_position);
204  hhit.setEnergy(et);
205  hhit.setPt();
206  hhit.setEt_uint(encodedEt);
207  hcalhits.push_back(hhit);
208  }
209 
210  //***************************************************//
211  // Initialize necessary arrays for tower and clusters
212  //***************************************************//
213 
214  // L1 Outputs definition: Arrays that use firmware convention for indexing
215  p2eg::tower_t towerHCALCard
217  [p2eg::n_towers_halfPhi]; // 17x4x36 array (not to be confused with the 12x1 array of ap_uints, towerEtHCAL
219  // There is one vector of clusters per card (up to 12 clusters before stitching across ECAL regions)
220  std::vector<p2eg::Cluster> cluster_list[p2eg::n_towers_halfPhi];
221  // After merging/stitching the clusters, we only take the 8 highest pt per card
222  std::vector<p2eg::Cluster> cluster_list_merged[p2eg::n_towers_halfPhi];
223 
224  //***************************************************//
225  // Fill RCT ECAL regions with ECAL hits
226  //***************************************************//
227  for (int cc = 0; cc < p2eg::n_towers_halfPhi; ++cc) { // Loop over 36 L1 cards
228 
229  p2eg::card rctCard;
230  rctCard.setIdx(cc);
231 
232  for (const auto& hit : ecalhits) {
233  // Check if the hit is in cards 0-35
234  if (hit.isInCard(cc)) {
235  // Get the crystal eta and phi, relative to the bottom left corner of the card
236  // (0 up to 17*5, 0 up to 4*5)
237  int local_iEta = hit.crystalLocaliEta(cc);
238  int local_iPhi = hit.crystalLocaliPhi(cc);
239 
240  // Region number (0-5) depends only on the crystal iEta in the card
241  int regionNumber = p2eg::getRegionNumber(local_iEta);
242 
243  // Tower eta and phi index inside the card (17x4)
244  int inCard_tower_iEta = local_iEta / p2eg::CRYSTALS_IN_TOWER_ETA;
245  int inCard_tower_iPhi = local_iPhi / p2eg::CRYSTALS_IN_TOWER_PHI;
246 
247  // Tower eta and phi index inside the region (3x4)
248  int inRegion_tower_iEta = inCard_tower_iEta % p2eg::TOWER_IN_ETA;
249  int inRegion_tower_iPhi = inCard_tower_iPhi % p2eg::TOWER_IN_PHI;
250 
251  // Crystal eta and phi index inside the 3x4 region (15x20)
252  int inRegion_crystal_iEta = local_iEta % (p2eg::TOWER_IN_ETA * p2eg::CRYSTALS_IN_TOWER_ETA);
253  int inRegion_crystal_iPhi = local_iPhi;
254 
255  // Crystal eta and phi index inside the tower (5x5)
256  int inLink_crystal_iEta = (inRegion_crystal_iEta % p2eg::CRYSTALS_IN_TOWER_ETA);
257  int inLink_crystal_iPhi = (inRegion_crystal_iPhi % p2eg::CRYSTALS_IN_TOWER_PHI);
258 
259  // Add the crystal energy to the rctCard
260  p2eg::region3x4& myRegion = rctCard.getRegion3x4(regionNumber);
261  p2eg::linkECAL& myLink = myRegion.getLinkECAL(inRegion_tower_iEta, inRegion_tower_iPhi);
262  myLink.addCrystalE(inLink_crystal_iEta, inLink_crystal_iPhi, hit.et_uint());
263  }
264  }
265 
266  //***************************************************//
267  // Build RCT towers from HCAL hits
268  //***************************************************//
269  for (const auto& hit : hcalhits) {
270  if (hit.isInCard(cc) && hit.pt() > 0) {
271  // Get crystal eta and phi, relative to the bottom left corner of the card
272  // (0 up to 17*5, 0 up to 4*5)
273  int local_iEta = hit.crystalLocaliEta(cc);
274  int local_iPhi = hit.crystalLocaliPhi(cc);
275 
276  // Region (0-5) the hit falls into
277  int regionNumber = p2eg::getRegionNumber(local_iEta);
278 
279  // Tower eta and phi index inside the card (17x4)
280  int inCard_tower_iEta = int(local_iEta / p2eg::CRYSTALS_IN_TOWER_ETA);
281  int inCard_tower_iPhi = int(local_iPhi / p2eg::CRYSTALS_IN_TOWER_PHI);
282 
283  // Tower eta and phi index inside the region (3x4)
284  int inRegion_tower_iEta = inCard_tower_iEta % p2eg::TOWER_IN_ETA;
285  int inRegion_tower_iPhi = inCard_tower_iPhi % p2eg::TOWER_IN_PHI;
286 
287  // Access the right HCAL region and tower and increment the ET
288  p2eg::towers3x4& myTowers3x4 = rctCard.getTowers3x4(regionNumber);
289  p2eg::towerHCAL& myTower = myTowers3x4.getTowerHCAL(inRegion_tower_iEta, inRegion_tower_iPhi);
290  myTower.addEt(hit.et_uint());
291  }
292  }
293 
294  //***************************************************//
295  // Make clusters in each ECAL region independently
296  //***************************************************//
297  for (int idxRegion = 0; idxRegion < p2eg::N_REGIONS_PER_CARD; idxRegion++) {
298  // ECAL crystals array
300  // HCAL towers in 3x4 region
301  ap_uint<12> towerEtHCAL[p2eg::TOWER_IN_ETA * p2eg::TOWER_IN_PHI];
302 
303  p2eg::region3x4& myRegion = rctCard.getRegion3x4(idxRegion);
304  p2eg::towers3x4& myTowers = rctCard.getTowers3x4(idxRegion);
305 
306  // In each 3x4 region, loop through the links (one link = one tower)
307  for (int iLinkEta = 0; iLinkEta < p2eg::TOWER_IN_ETA; iLinkEta++) {
308  for (int iLinkPhi = 0; iLinkPhi < p2eg::TOWER_IN_PHI; iLinkPhi++) {
309  // Get the ECAL link (one link per tower)
310  p2eg::linkECAL& myLink = myRegion.getLinkECAL(iLinkEta, iLinkPhi);
311 
312  // We have an array of 3x4 links/towers, each link/tower is 5x5 in crystals. We need to convert this to a 15x20 of crystals
313  int ref_iEta = (iLinkEta * p2eg::CRYSTALS_IN_TOWER_ETA);
314  int ref_iPhi = (iLinkPhi * p2eg::CRYSTALS_IN_TOWER_PHI);
315 
316  // In the link, get the crystals (5x5 in each link)
317  for (int iEta = 0; iEta < p2eg::CRYSTALS_IN_TOWER_ETA; iEta++) {
318  for (int iPhi = 0; iPhi < p2eg::CRYSTALS_IN_TOWER_PHI; iPhi++) {
319  // Et as unsigned int
320  ap_uint<10> uEnergy = myLink.getCrystalE(iEta, iPhi);
321 
322  // Fill the 'temporary' array with a crystal object
323  temporary[ref_iEta + iEta][ref_iPhi + iPhi] = p2eg::crystal(uEnergy);
324  }
325  } // end of loop over crystals
326 
327  // HCAL tower ET
328  p2eg::towerHCAL& myTower = myTowers.getTowerHCAL(iLinkEta, iLinkPhi);
329  towerEtHCAL[(iLinkEta * p2eg::TOWER_IN_PHI) + iLinkPhi] = myTower.getEt();
330  }
331  }
332 
333  // Iteratively find four clusters and remove them from 'temporary' as we go, and fill cluster_list
334  for (int c = 0; c < p2eg::N_CLUSTERS_PER_REGION; c++) {
336  temporary); // remove cluster from 'temporary', adjust for LSB 0.5 at GCT in getClusterValues
337  newCluster.setRegionIdx(idxRegion); // add the region number
338  if (newCluster.clusterEnergy() > 0) {
339  // do not push back 0-energy clusters
340  cluster_list[cc].push_back(newCluster);
341  }
342  }
343 
344  // Create towers using remaining ECAL energy, and the HCAL towers were already calculated in towersEtHCAL[12]
345  ap_uint<12> towerEtECAL[12];
346  p2eg::getECALTowersEt(temporary, towerEtECAL); // adjust for LSB 0.5 at GCT
347 
348  // Fill towerHCALCard and towerECALCard arrays
349  for (int i = 0; i < 12; i++) {
350  // Get the tower's indices in a (17x4) card
351  int iEta = (idxRegion * p2eg::TOWER_IN_ETA) + (i / p2eg::TOWER_IN_PHI);
352  int iPhi = (i % p2eg::TOWER_IN_PHI);
353 
354  // If the region number is 5 (i.e. only 2x4 in towers, skip the third row) N_REGIONS_PER_CARD = 6. i.e. we do not want to consider
355  // i = 8, 9, 10, 11
356  if ((idxRegion == (p2eg::N_REGIONS_PER_CARD - 1)) && (i > 7)) {
357  continue;
358  }
359  towerHCALCard[iEta][iPhi][cc] =
360  p2eg::tower_t(towerEtHCAL[i], 0); // p2eg::tower_t initializer takes an ap-uint<12> for the energy
361  towerECALCard[iEta][iPhi][cc] = p2eg::tower_t(towerEtECAL[i], 0);
362  }
363  }
364 
365  //-------------------------------------------//
366  // Stitching across ECAL regions //
367  //-------------------------------------------//
368  const int nRegionBoundariesEta = (p2eg::N_REGIONS_PER_CARD - 1); // 6 regions -> 5 boundaries to check
369  // Upper and lower boundaries respectively, to check for stitching along
370  int towerEtaBoundaries[nRegionBoundariesEta][2] = {{15, 14}, {12, 11}, {9, 8}, {6, 5}, {3, 2}};
371 
372  for (int iBound = 0; iBound < nRegionBoundariesEta; iBound++) {
374  cluster_list[cc], towerEtaBoundaries[iBound][0], towerEtaBoundaries[iBound][1], cc);
375  }
376 
377  //--------------------------------------------------------------------------------//
378  // Sort the clusters, take the 8 with highest pT, and return extras to tower
379  //--------------------------------------------------------------------------------//
380  if (!cluster_list[cc].empty()) {
381  std::sort(cluster_list[cc].begin(), cluster_list[cc].end(), p2eg::compareClusterET);
382 
383  // If there are more than eight clusters, return the unused energy to the towers
384  for (unsigned int kk = p2eg::n_clusters_4link; kk < cluster_list[cc].size(); ++kk) {
385  p2eg::Cluster cExtra = cluster_list[cc][kk];
386  if (cExtra.clusterEnergy() > 0) {
387  // Increment tower ET
388  // Get tower (eta, phi) (up to (17, 4)) in the RCT card
389  int whichTowerEtaInCard = ((cExtra.region() * p2eg::TOWER_IN_ETA) + cExtra.towerEta());
390  int whichTowerPhiInCard = cExtra.towerPhi();
391  ap_uint<12> oldTowerEt = towerECALCard[whichTowerEtaInCard][whichTowerPhiInCard][cc].et();
392  ap_uint<12> newTowerEt = (oldTowerEt + cExtra.clusterEnergy());
393  ap_uint<4> hoe = towerECALCard[whichTowerEtaInCard][whichTowerPhiInCard][cc].hoe();
394  towerECALCard[whichTowerEtaInCard][whichTowerPhiInCard][cc] = p2eg::tower_t(newTowerEt, hoe);
395  }
396  }
397 
398  // Save up to eight clusters: loop over cluster_list
399  for (unsigned int kk = 0; kk < cluster_list[cc].size(); ++kk) {
400  if (kk >= p2eg::n_clusters_4link)
401  continue;
402  if (cluster_list[cc][kk].clusterEnergy() > 0) {
403  cluster_list_merged[cc].push_back(cluster_list[cc][kk]);
404  }
405  }
406  }
407 
408  //-------------------------------------------//
409  // Calibrate clusters
410  //-------------------------------------------//
411  for (auto& c : cluster_list_merged[cc]) {
412  float realEta = c.realEta(cc);
413  c.calib = calib_(c.getPt(), std::abs(realEta));
414  c.applyCalibration(c.calib);
415  }
416 
417  //-------------------------------------------//
418  // Cluster shower shape flags
419  //-------------------------------------------//
420  for (auto& c : cluster_list_merged[cc]) {
421  c.is_ss = p2eg::passes_ss(c.getPt(), (c.getEt2x5() / c.getEt5x5()));
422  c.is_looseTkss = p2eg::passes_looseTkss(c.getPt(), (c.getEt2x5() / c.getEt5x5()));
423  }
424 
425  //-------------------------------------------//
426  // Calibrate towers
427  //-------------------------------------------//
428  for (int ii = 0; ii < p2eg::n_towers_cardEta; ++ii) { // 17 towers per card in eta
429  for (int jj = 0; jj < p2eg::n_towers_cardPhi; ++jj) { // 4 towers per card in phi
430  float tRealEta = p2eg::getTowerEta_fromAbsID(
431  p2eg::getAbsID_iEta_fromFirmwareCardTowerLink(cc, ii, jj)); // real eta of center of tower
432  double tCalib = calib_(0, tRealEta); // calibration factor
433  towerECALCard[ii][jj][cc].applyCalibration(tCalib);
434  }
435  }
436 
437  //-------------------------------------------//
438  // Calculate tower HoE
439  //-------------------------------------------//
440  for (int ii = 0; ii < p2eg::n_towers_cardEta; ++ii) { // 17 towers per card in eta
441  for (int jj = 0; jj < p2eg::n_towers_cardPhi; ++jj) { // 4 towers per card in phi
442  ap_uint<12> ecalEt = towerECALCard[ii][jj][cc].et();
443  ap_uint<12> hcalEt = towerHCALCard[ii][jj][cc].et();
444  towerECALCard[ii][jj][cc].addHoverEToTower(ecalEt, hcalEt);
445  }
446  }
447 
448  //-----------------------------------------------------------//
449  // Produce output RCT collections for event display and analyzer
450  //-----------------------------------------------------------//
451  for (auto& c : cluster_list_merged[cc]) {
452  reco::Candidate::PolarLorentzVector p4calibrated(c.getPt(), c.realEta(cc), c.realPhi(cc), 0.);
453 
454  // Constructor definition at: https://github.com/cms-l1t-offline/cmssw/blob/l1t-phase2-v3.3.11/DataFormats/L1TCalorimeterPhase2/interface/CaloCrystalCluster.h#L34
455  l1tp2::CaloCrystalCluster cluster(p4calibrated,
456  c.getPt(), // use float
457  0, // float h over e
458  0, // float iso
459  0, // DetId seedCrystal
460  0, // puCorrPt
461  c.getBrems(), // 0, 1, or 2 (as computed in firmware)
462  0, // et2x2 (not calculated)
463  c.getEt2x5(), // et2x5 (as computed in firmware, save float)
464  0, // et3x5 (not calculated)
465  c.getEt5x5(), // et5x5 (as computed in firmware, save float)
466  c.getIsSS(), // standalone WP
467  c.getIsSS(), // electronWP98
468  false, // photonWP80
469  c.getIsSS(), // electronWP90
470  c.getIsLooseTkss(), // looseL1TkMatchWP
471  c.getIsSS() // stage2effMatch
472  );
473 
474  std::map<std::string, float> params;
475  params["standaloneWP_showerShape"] = c.getIsSS();
476  params["trkMatchWP_showerShape"] = c.getIsLooseTkss();
477  cluster.setExperimentalParams(params);
478 
479  L1EGXtalClusters->push_back(cluster);
480  }
481  // Output tower collections
482  for (int ii = 0; ii < p2eg::n_towers_cardEta; ++ii) { // 17 towers per card in eta
483  for (int jj = 0; jj < p2eg::n_towers_cardPhi; ++jj) { // 4 towers per card in phi
484 
485  l1tp2::CaloTower l1CaloTower;
486  // Divide by 8.0 to get ET as float (GeV)
487  l1CaloTower.setEcalTowerEt(towerECALCard[ii][jj][cc].et() * p2eg::ECAL_LSB);
488  // HCAL TPGs encoded ET: multiply by the LSB (0.5) to convert to GeV
489  l1CaloTower.setHcalTowerEt(towerHCALCard[ii][jj][cc].et() * p2eg::HCAL_LSB);
492  l1CaloTower.setTowerIEta(absToweriEta);
493  l1CaloTower.setTowerIPhi(absToweriPhi);
494  l1CaloTower.setTowerEta(p2eg::getTowerEta_fromAbsID(absToweriEta));
495  l1CaloTower.setTowerPhi(p2eg::getTowerPhi_fromAbsID(absToweriPhi));
496 
497  L1CaloTowers->push_back(l1CaloTower);
498  }
499  }
500  } // end of loop over cards
501 
502  iEvent.put(std::move(L1EGXtalClusters), "RCT");
503  iEvent.put(std::move(L1CaloTowers), "RCT");
504 
505  //*******************************************************************
506  // Do GCT geometry for inputs
507  //*******************************************************************
508 
509  // Loop over GCT cards (three of them)
512 
513  // Initialize the cards (requires towerECALCard, towerHCALCard arrays, and cluster_list_merged)
514  for (unsigned int gcc = 0; gcc < p2eg::N_GCTCARDS; gcc++) {
515  // Each GCT card encompasses 16 RCT cards, listed in GCTcardtoRCTcardnumber[3][16]. i goes from 0 to <16
516  for (int i = 0; i < (p2eg::N_RCTCARDS_PHI * 2); i++) {
517  unsigned int rcc = p2eg::GCTcardtoRCTcardnumber[gcc][i];
518 
519  // Positive eta? Fist row is in positive eta
520  bool isPositiveEta = (i < p2eg::N_RCTCARDS_PHI);
521 
522  // Sum tower ECAL and HCAL energies: 17 towers per link
523  for (int iTower = 0; iTower < p2eg::N_GCTTOWERS_FIBER; iTower++) {
524  // 4 links per card
525  for (int iLink = 0; iLink < p2eg::n_links_card; iLink++) {
526  p2eg::tower_t t0_ecal = towerECALCard[iTower][iLink][rcc];
527  p2eg::tower_t t0_hcal = towerHCALCard[iTower][iLink][rcc];
529  t.et = t0_ecal.et() + p2eg::convertHcalETtoEcalET(t0_hcal.et());
530  t.hoe = t0_ecal.hoe();
531  // Not needed for GCT firmware but will be written into GCT CMSSW outputs : 12 bits each
532  t.ecalEt = t0_ecal.et();
533  t.hcalEt = t0_hcal.et();
534 
535  if (isPositiveEta) {
536  gctCards[gcc].RCTcardEtaPos[i % p2eg::N_RCTCARDS_PHI].RCTtoGCTfiber[iLink].RCTtowers[iTower] = t;
537  } else {
538  gctCards[gcc].RCTcardEtaNeg[i % p2eg::N_RCTCARDS_PHI].RCTtoGCTfiber[iLink].RCTtowers[iTower] = t;
539  }
540  }
541  }
542 
543  // Distribute at most 8 RCT clusters across four links: convert to GCT coordinates
544  for (size_t iCluster = 0; (iCluster < cluster_list_merged[rcc].size()) &&
546  iCluster++) {
547  p2eg::Cluster c0 = cluster_list_merged[rcc][iCluster];
549  c.et = c0.clusterEnergy();
550 
551  // tower Eta: c0.towerEta() refers to the tower iEta INSIDE the region, so we need to convert to tower iEta inside the card
552  c.towEta = (c0.region() * p2eg::TOWER_IN_ETA) + c0.towerEta();
553  c.towPhi = c0.towerPhi();
554  c.crEta = c0.clusterEta();
555  c.crPhi = c0.clusterPhi();
556  c.et5x5 = c0.uint_et5x5();
557  c.et2x5 = c0.uint_et2x5();
558  c.is_ss = c0.getIsSS();
559  c.is_looseTkss = c0.getIsLooseTkss();
560  c.is_iso = c0.getIsIso();
561  c.is_looseTkiso = c0.getIsLooseTkIso();
562  c.brems = c0.getBrems();
563  c.nGCTCard = gcc; // store gct card index as well
564  unsigned int iIdxInGCT = i % p2eg::N_RCTCARDS_PHI;
565  unsigned int iLinkC = iCluster % p2eg::N_RCTGCT_FIBERS;
566  unsigned int iPosC = iCluster / p2eg::N_RCTGCT_FIBERS;
567 
568  if (isPositiveEta) {
569  gctCards[gcc].RCTcardEtaPos[iIdxInGCT].RCTtoGCTfiber[iLinkC].RCTclusters[iPosC] = c;
570  } else {
571  gctCards[gcc].RCTcardEtaNeg[iIdxInGCT].RCTtoGCTfiber[iLinkC].RCTclusters[iPosC] = c;
572  }
573  }
574  // If there were fewer than eight clusters, make sure the remaining fiber clusters are zero'd out.
575  for (size_t iZeroCluster = cluster_list_merged[rcc].size();
577  iZeroCluster++) {
578  unsigned int iIdxInGCT = i % p2eg::N_RCTCARDS_PHI;
579  unsigned int iLinkC = iZeroCluster % p2eg::N_RCTGCT_FIBERS;
580  unsigned int iPosC = iZeroCluster / p2eg::N_RCTGCT_FIBERS;
581 
582  p2eg::RCTcluster_t cZero;
583  cZero.et = 0;
584  cZero.towEta = 0;
585  cZero.towPhi = 0;
586  cZero.crEta = 0;
587  cZero.crPhi = 0;
588  cZero.et5x5 = 0;
589  cZero.et2x5 = 0;
590  cZero.is_ss = false;
591  cZero.is_looseTkss = false;
592  cZero.is_iso = false;
593  cZero.is_looseTkiso = false;
594  cZero.nGCTCard = gcc; // store gct card index as well
595  if (isPositiveEta) {
596  gctCards[gcc].RCTcardEtaPos[iIdxInGCT].RCTtoGCTfiber[iLinkC].RCTclusters[iPosC] = cZero;
597  } else {
598  gctCards[gcc].RCTcardEtaNeg[iIdxInGCT].RCTtoGCTfiber[iLinkC].RCTclusters[iPosC] = cZero;
599  }
600  }
601  }
602  } // end of loop over initializing GCT cards
603 
604  //----------------------------------------------------
605  // Output collections for the GCT emulator
606  //----------------------------------------------------
607  auto L1GCTClusters = std::make_unique<l1tp2::CaloCrystalClusterCollection>();
608  auto L1GCTTowers = std::make_unique<l1tp2::CaloTowerCollection>();
609  auto L1GCTFullTowers = std::make_unique<l1tp2::CaloTowerCollection>();
610  auto L1GCTEGammas = std::make_unique<l1t::EGammaBxCollection>();
611  auto L1DigitizedClusterCorrelator = std::make_unique<l1tp2::DigitizedClusterCorrelatorCollection>();
612  auto L1DigitizedTowerCorrelator = std::make_unique<l1tp2::DigitizedTowerCorrelatorCollection>();
613  auto L1DigitizedClusterGT = std::make_unique<l1tp2::DigitizedClusterGTCollection>();
614 
615  //----------------------------------------------------
616  // Apply the GCT firmware code to each GCT card
617  //----------------------------------------------------
618 
619  for (unsigned int gcc = 0; gcc < p2eg::N_GCTCARDS; gcc++) {
620  p2eg::algo_top(gctCards[gcc],
621  gctToCorr[gcc],
622  gcc,
623  L1GCTClusters,
624  L1GCTTowers,
625  L1GCTFullTowers,
626  L1GCTEGammas,
627  L1DigitizedClusterCorrelator,
628  L1DigitizedTowerCorrelator,
629  L1DigitizedClusterGT,
630  calib_);
631  }
632 
633  iEvent.put(std::move(L1GCTClusters), "GCT");
634  iEvent.put(std::move(L1GCTTowers), "GCT");
635  iEvent.put(std::move(L1GCTFullTowers), "GCTFullTowers");
636  iEvent.put(std::move(L1GCTEGammas), "GCTEGammas");
637  iEvent.put(std::move(L1DigitizedClusterCorrelator), "GCTDigitizedClusterToCorrelator");
638  iEvent.put(std::move(L1DigitizedTowerCorrelator), "GCTDigitizedTowerToCorrelator");
639  iEvent.put(std::move(L1DigitizedClusterGT), "GCTDigitizedClusterToGT");
640 }
size
Write out results.
void applyCalibration(float factor)
bool validHT(const HcalTrigTowerDetId &id) const
edm::ESGetToken< CaloTPGTranscoder, CaloTPGRecord > decoderTag_
void getECALTowersEt(crystal tempX[CRYSTAL_IN_ETA][CRYSTAL_IN_PHI], ap_uint< 12 > towerEt[12])
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
RCTcluster_t RCTclusters[N_RCTCLUSTERS_FIBER]
void setEcalTowerEt(float et)
Definition: CaloTower.h:49
uint32_t cc[maxCellsPerHit]
Definition: gpuFishbone.h:49
linkECAL & getLinkECAL(int iEta, int iPhi)
void setTowerIPhi(int iPhi)
Definition: CaloTower.h:51
T const * product() const
Definition: Handle.h:70
void setIdHcal(const HcalDetId &idhcal)
static constexpr int n_clusters_4link
void setPosition(const GlobalVector &pos)
void addCrystalE(int iEta, int iPhi, ap_uint< 10 > energy)
void setRegionIdx(int regIdx)
static constexpr int N_GCTTOWERS_FIBER
int getAbsID_iPhi_fromFirmwareCardTowerLink(int nCard, int nTower, int nLink)
const CaloSubdetectorGeometry * hbGeometry
Log< level::Error, false > LogError
l1tp2::ParametricCalibration calib_
static constexpr int N_REGIONS_PER_CARD
static constexpr int N_CLUSTERS_PER_REGION
RCTtower_t RCTtowers[N_RCTTOWERS_FIBER]
edm::EDGetTokenT< edm::SortedCollection< HcalTriggerPrimitiveDigi > > hcalTPToken_
void setHcalTowerEt(float et)
Definition: CaloTower.h:50
static constexpr int CRYSTAL_IN_ETA
void setTowerIEta(int iEta)
Definition: CaloTower.h:52
float getTowerPhi_fromAbsID(int id)
bool passes_ss(float pt, float ss)
int iEvent
Definition: GenABIO.cc:224
edm::ESGetToken< HcalTopology, HcalRecNumberingRecord > hbTopologyTag_
Cluster getClusterFromRegion3x4(crystal temp[CRYSTAL_IN_ETA][CRYSTAL_IN_PHI])
void setTowerPhi(float phi)
Definition: CaloTower.h:53
edm::EDGetTokenT< EcalEBTrigPrimDigiCollection > ecalTPEBToken_
ap_uint< 5 > towerEta() const
static constexpr float HCAL_LSB
RCTcard_t RCTcardEtaNeg[N_RCTCARDS_PHI]
float getTowerEta_fromAbsID(int id)
static constexpr int N_RCTCARDS_PHI
towerHCAL & getTowerHCAL(int iEta, int iPhi)
void setIdx(int idx)
static constexpr float ECAL_LSB
const CaloSubdetectorGeometry * ebGeometry
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
static constexpr int n_towers_cardPhi
static constexpr int N_RCTGCT_FIBERS
static constexpr int N_RCTCLUSTERS_FIBER
void stitchClusterOverRegionBoundary(std::vector< Cluster > &cluster_list, int towerEtaUpper, int towerEtaLower, int cc)
Definition: Phase2L1RCT.h:1475
int getRegionNumber(const int local_iEta)
static constexpr float cut_500_MeV
virtual std::shared_ptr< const CaloCellGeometry > getGeometry(const DetId &id) const
Get the cell geometry of a given detector id. Should return false if not found.
void setTowerEta(float eta)
Definition: CaloTower.h:54
ii
Definition: cuy.py:589
unsigned int id
void addEt(ap_uint< 10 > newEt)
static constexpr int TOWER_IN_PHI
edm::ESGetToken< CaloGeometry, CaloGeometryRecord > caloGeometryTag_
ap_uint< 10 > getCrystalE(int iEta, int iPhi)
static constexpr int TOWER_IN_ETA
static constexpr int N_GCTCARDS
ap_uint< 2 > towerPhi() const
region3x4 & getRegion3x4(int idx)
void setEt_uint(ap_uint< 10 > et_uint)
RCTtoGCTfiber_t RCTtoGCTfiber[N_RCTGCT_FIBERS]
HLT enums.
void setId(const EBDetId &id)
bool passes_looseTkss(float pt, float ss)
RCTcard_t RCTcardEtaPos[N_RCTCARDS_PHI]
ap_uint< 12 > clusterEnergy() const
towers3x4 & getTowers3x4(int idx)
static constexpr int CRYSTALS_IN_TOWER_ETA
static constexpr int n_towers_halfPhi
static constexpr int n_towers_cardEta
void addHoverEToTower(ap_uint< 12 > ECAL, ap_uint< 12 > HCAL)
static constexpr int n_links_card
void algo_top(const GCTcard_t &GCTcard, GCTtoCorr_t &GCTtoCorr, unsigned int nGCTCard, std::unique_ptr< l1tp2::CaloCrystalClusterCollection > const &gctClusters, std::unique_ptr< l1tp2::CaloTowerCollection > const &gctTowers, std::unique_ptr< l1tp2::CaloTowerCollection > const &gctFullTowers, std::unique_ptr< l1t::EGammaBxCollection > const &gctEGammas, std::unique_ptr< l1tp2::DigitizedClusterCorrelatorCollection > const &gctDigitizedClustersCorrelator, std::unique_ptr< l1tp2::DigitizedTowerCorrelatorCollection > const &gctDigitizedTowersCorrelator, std::unique_ptr< l1tp2::DigitizedClusterGTCollection > const &gctDigitizedClustersGT, l1tp2::ParametricCalibration calib_)
Definition: Phase2L1GCT.h:370
ap_uint< 12 > convertHcalETtoEcalET(ap_uint< 12 > HCAL)
def move(src, dest)
Definition: eostools.py:511
static constexpr int CRYSTAL_IN_PHI
static constexpr int CRYSTALS_IN_TOWER_PHI
Global3DVector GlobalVector
Definition: GlobalVector.h:10
int getAbsID_iEta_fromFirmwareCardTowerLink(int nCard, int nTower, int nLink)
bool compareClusterET(const Cluster &lhs, const Cluster &rhs)
static const unsigned int GCTcardtoRCTcardnumber[N_GCTCARDS][N_RCTCARDS_PHI *2]
math::PtEtaPhiMLorentzVector PolarLorentzVector
Lorentz vector.
Definition: Candidate.h:38

Member Data Documentation

◆ calib_

l1tp2::ParametricCalibration Phase2L1CaloEGammaEmulator::calib_
private

Definition at line 74 of file Phase2L1CaloEGammaEmulator.cc.

Referenced by produce().

◆ caloGeometryTag_

edm::ESGetToken<CaloGeometry, CaloGeometryRecord> Phase2L1CaloEGammaEmulator::caloGeometryTag_
private

Definition at line 76 of file Phase2L1CaloEGammaEmulator.cc.

Referenced by produce().

◆ decoderTag_

edm::ESGetToken<CaloTPGTranscoder, CaloTPGRecord> Phase2L1CaloEGammaEmulator::decoderTag_
private

Definition at line 72 of file Phase2L1CaloEGammaEmulator.cc.

Referenced by produce().

◆ ebGeometry

const CaloSubdetectorGeometry* Phase2L1CaloEGammaEmulator::ebGeometry
private

Definition at line 77 of file Phase2L1CaloEGammaEmulator.cc.

Referenced by produce().

◆ ecalTPEBToken_

edm::EDGetTokenT<EcalEBTrigPrimDigiCollection> Phase2L1CaloEGammaEmulator::ecalTPEBToken_
private

Definition at line 70 of file Phase2L1CaloEGammaEmulator.cc.

Referenced by produce().

◆ hbGeometry

const CaloSubdetectorGeometry* Phase2L1CaloEGammaEmulator::hbGeometry
private

Definition at line 78 of file Phase2L1CaloEGammaEmulator.cc.

Referenced by produce().

◆ hbTopologyTag_

edm::ESGetToken<HcalTopology, HcalRecNumberingRecord> Phase2L1CaloEGammaEmulator::hbTopologyTag_
private

Definition at line 79 of file Phase2L1CaloEGammaEmulator.cc.

Referenced by produce().

◆ hcalTPToken_

edm::EDGetTokenT<edm::SortedCollection<HcalTriggerPrimitiveDigi> > Phase2L1CaloEGammaEmulator::hcalTPToken_
private

Definition at line 71 of file Phase2L1CaloEGammaEmulator.cc.

Referenced by produce().

◆ hcTopology_

const HcalTopology* Phase2L1CaloEGammaEmulator::hcTopology_
private

Definition at line 80 of file Phase2L1CaloEGammaEmulator.cc.

Referenced by produce().