CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
L1TCaloSummary< INPUT, OUTPUT > Class Template Reference

#include <L1Trigger/L1TCaloSummary/plugins/L1TCaloSummary.cc>

Inheritance diagram for L1TCaloSummary< INPUT, OUTPUT >:
edm::stream::EDProducer<>

Public Member Functions

 L1TCaloSummary (const edm::ParameterSet &)
 
 ~L1TCaloSummary () 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 &descriptions)
 

Private Member Functions

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

Private Attributes

double boostedJetPtFactor
 
double caloScaleFactor
 
double eGammaIsolationFactor
 
uint32_t eGammaSeed
 
int fwVersion
 
uint32_t jetSeed
 
UCTLayer1 * layer1
 
hls4mlEmulator::ModelLoader loader
 
std::shared_ptr< hls4mlEmulator::Model > model
 
uint32_t nPumBins
 
bool overwriteWithTestPatterns
 
std::vector< std::vector< std::vector< uint32_t > > > pumLUT
 
edm::EDGetTokenT< L1CaloRegionCollectionregionToken
 
float tauIsolationFactor
 
uint32_t tauSeed
 
std::vector< edm::ParameterSettestPatterns
 
bool verbose
 

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

template<class INPUT, class OUTPUT>
class L1TCaloSummary< INPUT, OUTPUT >

Description: The package L1Trigger/L1TCaloSummary is prepared for monitoring the CMS Layer-1 Calorimeter Trigger.

Implementation: It prepares region objects and puts them in the event

Definition at line 76 of file L1TCaloSummary.cc.

Constructor & Destructor Documentation

◆ L1TCaloSummary()

template<class INPUT , class OUTPUT >
L1TCaloSummary< INPUT, OUTPUT >::L1TCaloSummary ( const edm::ParameterSet iConfig)
explicit

Definition at line 131 of file L1TCaloSummary.cc.

References L1TCaloSummary< INPUT, OUTPUT >::caloScaleFactor, edm::ParameterSet::getParameter(), l1tPhase2CaloJetEmulator_cfi::iEta, L1TCaloSummary< INPUT, OUTPUT >::loader, SiStripPI::max, L1TCaloSummary< INPUT, OUTPUT >::model, L1TCaloSummary< INPUT, OUTPUT >::nPumBins, L1TCaloSummary< INPUT, OUTPUT >::pumLUT, and ALPAKA_ACCELERATOR_NAMESPACE::ecal::reconstruction::internal::barrel::side().

132  : nPumBins(iConfig.getParameter<unsigned int>("nPumBins")),
133  pumLUT(nPumBins, std::vector<std::vector<uint32_t>>(2, std::vector<uint32_t>(13))),
134  caloScaleFactor(iConfig.getParameter<double>("caloScaleFactor")),
135  jetSeed(iConfig.getParameter<unsigned int>("jetSeed")),
136  tauSeed(iConfig.getParameter<unsigned int>("tauSeed")),
137  tauIsolationFactor(iConfig.getParameter<double>("tauIsolationFactor")),
138  eGammaSeed(iConfig.getParameter<unsigned int>("eGammaSeed")),
139  eGammaIsolationFactor(iConfig.getParameter<double>("eGammaIsolationFactor")),
140  boostedJetPtFactor(iConfig.getParameter<double>("boostedJetPtFactor")),
141  verbose(iConfig.getParameter<bool>("verbose")),
142  fwVersion(iConfig.getParameter<int>("firmwareVersion")),
143  regionToken(consumes<L1CaloRegionCollection>(edm::InputTag("simCaloStage2Layer1Digis"))),
144  loader(hls4mlEmulator::ModelLoader(iConfig.getParameter<string>("CICADAModelVersion"))),
145  overwriteWithTestPatterns(iConfig.getParameter<bool>("useTestPatterns")),
146  testPatterns(iConfig.getParameter<std::vector<edm::ParameterSet>>("testPatterns")) {
147  std::vector<double> pumLUTData;
148  char pumLUTString[10];
149  for (uint32_t pumBin = 0; pumBin < nPumBins; pumBin++) {
150  for (uint32_t side = 0; side < 2; side++) {
151  if (side == 0)
152  sprintf(pumLUTString, "pumLUT%2.2dp", pumBin);
153  else
154  sprintf(pumLUTString, "pumLUT%2.2dn", pumBin);
155  pumLUTData = iConfig.getParameter<std::vector<double>>(pumLUTString);
156  for (uint32_t iEta = 0; iEta < std::max((uint32_t)pumLUTData.size(), MaxUCTRegionsEta); iEta++) {
157  pumLUT[pumBin][side][iEta] = (uint32_t)round(pumLUTData[iEta] / caloScaleFactor);
158  }
159  if (pumLUTData.size() != (MaxUCTRegionsEta))
160  edm::LogError("L1TCaloSummary") << "PUM LUT Data size integrity check failed; Expected size = "
161  << MaxUCTRegionsEta << "; Provided size = " << pumLUTData.size()
162  << "; Will use what is provided :(" << std::endl;
163  }
164  }
165  produces<L1JetParticleCollection>("Boosted");
166 
167  //anomaly trigger loading
168  model = loader.load_model();
169  produces<float>("CICADAScore");
170 }
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
bool overwriteWithTestPatterns
Log< level::Error, false > LogError
std::vector< edm::ParameterSet > testPatterns
edm::EDGetTokenT< L1CaloRegionCollection > regionToken
std::shared_ptr< hls4mlEmulator::Model > model
double boostedJetPtFactor
double eGammaIsolationFactor
hls4mlEmulator::ModelLoader loader
std::vector< std::vector< std::vector< uint32_t > > > pumLUT
double caloScaleFactor

◆ ~L1TCaloSummary()

template<class INPUT , class OUTPUT >
L1TCaloSummary< INPUT, OUTPUT >::~L1TCaloSummary ( )
overridedefault

Member Function Documentation

◆ fillDescriptions()

template<class INPUT , class OUTPUT >
void L1TCaloSummary< INPUT, OUTPUT >::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 331 of file L1TCaloSummary.cc.

References edm::ConfigurationDescriptions::addDefault(), and submitPVResolutionJobs::desc.

331  {
332  //The following says we do not know what parameters are allowed so do no validation
333  // Please change this to state exactly what you do use, even if it is no parameters
335  desc.setUnknown();
336  descriptions.addDefault(desc);
337 }
void addDefault(ParameterSetDescription const &psetDescription)

◆ print()

template<class INPUT , class OUTPUT >
void L1TCaloSummary< INPUT, OUTPUT >::print ( )
private

◆ produce()

template<class INPUT , class OUTPUT >
void L1TCaloSummary< INPUT, OUTPUT >::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprivate

Definition at line 178 of file L1TCaloSummary.cc.

References funct::abs(), simCaloStage2Layer1Summary_cfi::boostedJetPtFactor, simCaloStage2Layer1Summary_cfi::caloScaleFactor, simCaloStage2Layer1Summary_cfi::eGammaIsolationFactor, simCaloStage2Layer1Summary_cfi::eGammaSeed, PVValHelper::eta, beamvalidation::exit(), amcDumpToRaw_cfi::fwVersion, g, edm::ParameterSet::getParameter(), mps_fire::i, l1tPhase2CaloJetEmulator_cfi::iEta, iEvent, simCaloStage2Layer1Summary_cfi::jetSeed, EgHLTOffHistBins_cfi::mass, ReggeGribovPartonMC_EposLHC_2760GeV_PbPb_cfi::model, eostools::move(), resolutioncreator_cfi::object, DiDispStaMuonMonitor_cfi::pt, nano_mu_digi_cff::region, l1CaloSummaryTree_cfi::regionToken, AlCaHLTBitMon_QueryRunRegistry::string, submitPVValidationJobs::t, simCaloStage2Layer1Summary_cfi::tauIsolationFactor, simCaloStage2Layer1Summary_cfi::tauSeed, and simCaloStage2Layer1Summary_cfi::testPatterns.

178  {
179  using namespace edm;
180 
181  std::unique_ptr<L1JetParticleCollection> bJetCands(new L1JetParticleCollection);
182 
183  std::unique_ptr<float> CICADAScore = std::make_unique<float>();
184 
185  UCTGeometry g;
186 
187  // Here we read region data from the region collection created by L1TCaloLayer1 instead of
188  // independently creating regions from TPGs for processing by the summary card. This results
189  // in a single region vector of size 252 whereas from independent creation we had 3*6 vectors
190  // of size 7*2. Indices are mapped in UCTSummaryCard accordingly.
191  UCTSummaryCard summaryCard =
193  std::vector<UCTRegion*> inputRegions;
194  inputRegions.clear();
195  edm::Handle<std::vector<L1CaloRegion>> regionCollection;
196  if (!iEvent.getByToken(regionToken, regionCollection))
197  edm::LogError("L1TCaloSummary") << "UCT: Failed to get regions from region collection!";
198  iEvent.getByToken(regionToken, regionCollection);
199  //Model input
200  //This is done as a flat vector input, but future versions may involve 2D input
201  //This will have to be handled later
202  INPUT modelInput[252];
203  for (const L1CaloRegion& i : *regionCollection) {
204  UCTRegionIndex r = g.getUCTRegionIndexFromL1CaloRegion(i.gctEta(), i.gctPhi());
205  UCTTowerIndex t = g.getUCTTowerIndexFromL1CaloRegion(r, i.raw());
206  uint32_t absCaloEta = std::abs(t.first);
207  uint32_t absCaloPhi = std::abs(t.second);
208  bool negativeEta = false;
209  if (t.first < 0)
210  negativeEta = true;
211  uint32_t crate = g.getCrate(t.first, t.second);
212  uint32_t card = g.getCard(t.first, t.second);
213  uint32_t region = g.getRegion(absCaloEta, absCaloPhi);
214  UCTRegion* test = new UCTRegion(crate, card, negativeEta, region, fwVersion);
215  test->setRegionSummary(i.raw());
216  inputRegions.push_back(test);
217  //This *should* fill the tensor in the proper order to be fed to the anomaly model
218  //We take 4 off of the GCT eta/iEta.
219  //iEta taken from this ranges from 4-17, (I assume reserving lower and higher for forward regions)
220  //So our first index, index 0, is technically iEta=4, and so-on.
221  //CICADA reads this as a flat vector
222  modelInput[14 * i.gctPhi() + (i.gctEta() - 4)] = i.et();
223  }
224  // Check if we're using test patterns. If so, we overwrite the inputs with a test pattern
226  unsigned int evt = iEvent.id().event();
227  unsigned int totalTestPatterns = testPatterns.size();
228  unsigned int patternElement = evt % totalTestPatterns;
229  const edm::ParameterSet& element = testPatterns.at(patternElement);
230  std::stringstream inputStream;
231  std::string PhiRowString;
232 
233  edm::LogWarning("L1TCaloSummary") << "Overwriting existing CICADA input with test pattern!\n";
234 
235  for (unsigned short int iPhi = 1; iPhi <= 18; ++iPhi) {
236  PhiRowString = "";
237  std::stringstream PhiRowStringStream;
238  PhiRowStringStream << "iPhi_" << iPhi;
239  PhiRowString = PhiRowStringStream.str();
240  std::vector<unsigned int> phiRow = element.getParameter<std::vector<unsigned int>>(PhiRowString);
241  for (unsigned short int iEta = 1; iEta <= 14; ++iEta) {
242  modelInput[14 * (iPhi - 1) + (iEta - 1)] = phiRow.at(iEta - 1);
243  inputStream << phiRow.at(iEta - 1) << " ";
244  }
245  inputStream << "\n";
246  }
247  edm::LogInfo("L1TCaloSummary") << "Input Stream:\n" << inputStream.str();
248  }
249 
250  //Extract model output
251  OUTPUT modelResult[1] = {
252  OUTPUT("0.0", 10)}; //the 10 here refers to the fact that we read in "0.0" as a decimal number
253  model->prepare_input(modelInput);
254  model->predict();
255  model->read_result(modelResult);
256 
257  *CICADAScore = modelResult[0].to_float();
258 
260  edm::LogInfo("L1TCaloSummary") << "Test Pattern Output: " << *CICADAScore;
261 
262  summaryCard.setRegionData(inputRegions);
263 
264  if (!summaryCard.process()) {
265  edm::LogError("L1TCaloSummary") << "UCT: Failed to process summary card" << std::endl;
266  exit(1);
267  }
268 
269  double pt = 0;
270  double eta = -999.;
271  double phi = -999.;
272  double mass = 0;
273 
274  std::list<UCTObject*> boostedJetObjs = summaryCard.getBoostedJetObjs();
275  for (std::list<UCTObject*>::const_iterator i = boostedJetObjs.begin(); i != boostedJetObjs.end(); i++) {
276  const UCTObject* object = *i;
277  pt = ((double)object->et()) * caloScaleFactor * boostedJetPtFactor;
278  eta = g.getUCTTowerEta(object->iEta());
279  phi = g.getUCTTowerPhi(object->iPhi());
280  bitset<3> activeRegionEtaPattern = 0;
281  for (uint32_t iEta = 0; iEta < 3; iEta++) {
282  bool activeStrip = false;
283  for (uint32_t iPhi = 0; iPhi < 3; iPhi++) {
284  if (object->boostedJetRegionET()[3 * iEta + iPhi] > 30 &&
285  object->boostedJetRegionET()[3 * iEta + iPhi] > object->et() * 0.0625)
286  activeStrip = true;
287  }
288  if (activeStrip)
289  activeRegionEtaPattern |= (0x1 << iEta);
290  }
291  bitset<3> activeRegionPhiPattern = 0;
292  for (uint32_t iPhi = 0; iPhi < 3; iPhi++) {
293  bool activeStrip = false;
294  for (uint32_t iEta = 0; iEta < 3; iEta++) {
295  if (object->boostedJetRegionET()[3 * iEta + iPhi] > 30 &&
296  object->boostedJetRegionET()[3 * iEta + iPhi] > object->et() * 0.0625)
297  activeStrip = true;
298  }
299  if (activeStrip)
300  activeRegionPhiPattern |= (0x1 << iPhi);
301  }
302  string regionEta = activeRegionEtaPattern.to_string<char, std::string::traits_type, std::string::allocator_type>();
303  string regionPhi = activeRegionPhiPattern.to_string<char, std::string::traits_type, std::string::allocator_type>();
304 
305  bool centralHighest = object->boostedJetRegionET()[4] >= object->boostedJetRegionET()[0] &&
306  object->boostedJetRegionET()[4] >= object->boostedJetRegionET()[1] &&
307  object->boostedJetRegionET()[4] >= object->boostedJetRegionET()[2] &&
308  object->boostedJetRegionET()[4] >= object->boostedJetRegionET()[3] &&
309  object->boostedJetRegionET()[4] >= object->boostedJetRegionET()[5] &&
310  object->boostedJetRegionET()[4] >= object->boostedJetRegionET()[6] &&
311  object->boostedJetRegionET()[4] >= object->boostedJetRegionET()[7] &&
312  object->boostedJetRegionET()[4] >= object->boostedJetRegionET()[8];
313 
314  if (abs(eta) < 2.5 && ((regionEta == "101" && (regionPhi == "110" || regionPhi == "101" || regionPhi == "010")) ||
315  ((regionEta == "110" || regionEta == "101" || regionEta == "010") && regionPhi == "101") ||
316  (regionEta == "111" && (regionPhi == "110" || regionPhi == "010")) ||
317  ((regionEta == "110" || regionEta == "010") && regionPhi == "111") ||
318  ((regionEta == "010" || regionPhi == "010" || regionEta == "110" || regionPhi == "110" ||
319  regionEta == "011" || regionPhi == "011") &&
320  centralHighest)))
321  bJetCands->push_back(L1JetParticle(math::PtEtaPhiMLorentzVector(pt, eta, phi, mass), L1JetParticle::kCentral));
322  }
323 
324  iEvent.put(std::move(bJetCands), "Boosted");
325  //Write out anomaly score
326  iEvent.put(std::move(CICADAScore), "CICADAScore");
327 }
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
bool overwriteWithTestPatterns
Log< level::Error, false > LogError
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
Definition: Activities.doc:4
PtEtaPhiMLorentzVectorD PtEtaPhiMLorentzVector
Lorentz vector with cartesian internal representation.
Definition: LorentzVector.h:25
int iEvent
Definition: GenABIO.cc:224
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::vector< edm::ParameterSet > testPatterns
edm::EDGetTokenT< L1CaloRegionCollection > regionToken
Log< level::Info, false > LogInfo
std::shared_ptr< hls4mlEmulator::Model > model
double boostedJetPtFactor
double eGammaIsolationFactor
HLT enums.
std::vector< std::vector< std::vector< uint32_t > > > pumLUT
A calorimeter trigger region (sum of 4x4 trigger towers)
Definition: L1CaloRegion.h:21
double caloScaleFactor
Log< level::Warning, false > LogWarning
def move(src, dest)
Definition: eostools.py:511
def exit(msg="")

Member Data Documentation

◆ boostedJetPtFactor

template<class INPUT , class OUTPUT >
double L1TCaloSummary< INPUT, OUTPUT >::boostedJetPtFactor
private

Definition at line 103 of file L1TCaloSummary.cc.

◆ caloScaleFactor

template<class INPUT , class OUTPUT >
double L1TCaloSummary< INPUT, OUTPUT >::caloScaleFactor
private

Definition at line 96 of file L1TCaloSummary.cc.

Referenced by L1TCaloSummary< INPUT, OUTPUT >::L1TCaloSummary().

◆ eGammaIsolationFactor

template<class INPUT , class OUTPUT >
double L1TCaloSummary< INPUT, OUTPUT >::eGammaIsolationFactor
private

Definition at line 102 of file L1TCaloSummary.cc.

◆ eGammaSeed

template<class INPUT , class OUTPUT >
uint32_t L1TCaloSummary< INPUT, OUTPUT >::eGammaSeed
private

Definition at line 101 of file L1TCaloSummary.cc.

◆ fwVersion

template<class INPUT , class OUTPUT >
int L1TCaloSummary< INPUT, OUTPUT >::fwVersion
private

Definition at line 106 of file L1TCaloSummary.cc.

◆ jetSeed

template<class INPUT , class OUTPUT >
uint32_t L1TCaloSummary< INPUT, OUTPUT >::jetSeed
private

Definition at line 98 of file L1TCaloSummary.cc.

◆ layer1

template<class INPUT , class OUTPUT >
UCTLayer1* L1TCaloSummary< INPUT, OUTPUT >::layer1
private

Definition at line 110 of file L1TCaloSummary.cc.

◆ loader

template<class INPUT , class OUTPUT >
hls4mlEmulator::ModelLoader L1TCaloSummary< INPUT, OUTPUT >::loader
private

Definition at line 112 of file L1TCaloSummary.cc.

Referenced by L1TCaloSummary< INPUT, OUTPUT >::L1TCaloSummary().

◆ model

template<class INPUT , class OUTPUT >
std::shared_ptr<hls4mlEmulator::Model> L1TCaloSummary< INPUT, OUTPUT >::model
private

◆ nPumBins

template<class INPUT , class OUTPUT >
uint32_t L1TCaloSummary< INPUT, OUTPUT >::nPumBins
private

Definition at line 92 of file L1TCaloSummary.cc.

Referenced by L1TCaloSummary< INPUT, OUTPUT >::L1TCaloSummary().

◆ overwriteWithTestPatterns

template<class INPUT , class OUTPUT >
bool L1TCaloSummary< INPUT, OUTPUT >::overwriteWithTestPatterns
private

Definition at line 115 of file L1TCaloSummary.cc.

◆ pumLUT

template<class INPUT , class OUTPUT >
std::vector<std::vector<std::vector<uint32_t> > > L1TCaloSummary< INPUT, OUTPUT >::pumLUT
private

Definition at line 94 of file L1TCaloSummary.cc.

Referenced by L1TCaloSummary< INPUT, OUTPUT >::L1TCaloSummary().

◆ regionToken

template<class INPUT , class OUTPUT >
edm::EDGetTokenT<L1CaloRegionCollection> L1TCaloSummary< INPUT, OUTPUT >::regionToken
private

Definition at line 108 of file L1TCaloSummary.cc.

◆ tauIsolationFactor

template<class INPUT , class OUTPUT >
float L1TCaloSummary< INPUT, OUTPUT >::tauIsolationFactor
private

Definition at line 100 of file L1TCaloSummary.cc.

◆ tauSeed

template<class INPUT , class OUTPUT >
uint32_t L1TCaloSummary< INPUT, OUTPUT >::tauSeed
private

Definition at line 99 of file L1TCaloSummary.cc.

◆ testPatterns

template<class INPUT , class OUTPUT >
std::vector<edm::ParameterSet> L1TCaloSummary< INPUT, OUTPUT >::testPatterns
private

Definition at line 116 of file L1TCaloSummary.cc.

◆ verbose

template<class INPUT , class OUTPUT >
bool L1TCaloSummary< INPUT, OUTPUT >::verbose
private