CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
L1TCaloSummary.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: L1Trigger/L1TCaloSummary
4 // Class: L1TCaloSummary
5 //
13 //
14 // Original Author: Sridhara Dasu
15 // Created: Sat, 14 Nov 2015 14:18:27 GMT
16 //
17 //
18 
19 // system include files
20 #include <memory>
21 
22 // user include files
26 
29 
31 
34 
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"
40 #include "L1Trigger/L1TCaloLayer1/src/UCTGeometry.hh"
41 
42 #include "L1Trigger/L1TCaloLayer1/src/UCTObject.hh"
43 #include "L1Trigger/L1TCaloLayer1/src/UCTSummaryCard.hh"
44 #include "L1Trigger/L1TCaloLayer1/src/UCTGeometryExtended.hh"
45 
52 
55 
57 
58 #include "L1Trigger/L1TCaloLayer1/src/L1TCaloLayer1FetchLUTs.hh"
59 #include "L1Trigger/L1TCaloLayer1/src/UCTLogging.hh"
60 #include <bitset>
61 
62 using namespace l1tcalo;
63 using namespace l1extra;
64 using namespace std;
65 
66 //
67 // class declaration
68 //
69 
71 public:
72  explicit L1TCaloSummary(const edm::ParameterSet&);
73  ~L1TCaloSummary() override;
74 
75  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
76 
77 private:
78  //void beginJob() override;
79  void produce(edm::Event&, const edm::EventSetup&) override;
80  //void endJob() override;
81 
82  void beginRun(edm::Run const&, edm::EventSetup const&) override;
83 
84  void print();
85 
86  // ----------member data ---------------------------
87 
88  uint32_t nPumBins;
89 
90  std::vector<std::vector<std::vector<uint32_t>>> pumLUT;
91 
93 
94  uint32_t jetSeed;
95  uint32_t tauSeed;
97  uint32_t eGammaSeed;
100 
101  bool verbose;
103 
105 
106  UCTLayer1* layer1;
107  UCTSummaryCard* summaryCard;
108 };
109 
110 //
111 // constants, enums and typedefs
112 //
113 
114 //
115 // static data member definitions
116 //
117 
118 //
119 // constructors and destructor
120 //
122  : nPumBins(iConfig.getParameter<unsigned int>("nPumBins")),
123  pumLUT(nPumBins, std::vector<std::vector<uint32_t>>(2, std::vector<uint32_t>(13))),
124  caloScaleFactor(iConfig.getParameter<double>("caloScaleFactor")),
125  jetSeed(iConfig.getParameter<unsigned int>("jetSeed")),
126  tauSeed(iConfig.getParameter<unsigned int>("tauSeed")),
127  tauIsolationFactor(iConfig.getParameter<double>("tauIsolationFactor")),
128  eGammaSeed(iConfig.getParameter<unsigned int>("eGammaSeed")),
129  eGammaIsolationFactor(iConfig.getParameter<double>("eGammaIsolationFactor")),
130  boostedJetPtFactor(iConfig.getParameter<double>("boostedJetPtFactor")),
131  verbose(iConfig.getParameter<bool>("verbose")),
132  fwVersion(iConfig.getParameter<int>("firmwareVersion")),
133  regionToken(consumes<L1CaloRegionCollection>(edm::InputTag("simCaloStage2Layer1Digis"))) {
134  std::vector<double> pumLUTData;
135  char pumLUTString[10];
136  for (uint32_t pumBin = 0; pumBin < nPumBins; pumBin++) {
137  for (uint32_t side = 0; side < 2; side++) {
138  if (side == 0)
139  sprintf(pumLUTString, "pumLUT%2.2dp", pumBin);
140  else
141  sprintf(pumLUTString, "pumLUT%2.2dn", pumBin);
142  pumLUTData = iConfig.getParameter<std::vector<double>>(pumLUTString);
143  for (uint32_t iEta = 0; iEta < std::max((uint32_t)pumLUTData.size(), MaxUCTRegionsEta); iEta++) {
144  pumLUT[pumBin][side][iEta] = (uint32_t)round(pumLUTData[iEta] / caloScaleFactor);
145  }
146  if (pumLUTData.size() != (MaxUCTRegionsEta))
147  edm::LogError("L1TCaloSummary") << "PUM LUT Data size integrity check failed; Expected size = "
148  << MaxUCTRegionsEta << "; Provided size = " << pumLUTData.size()
149  << "; Will use what is provided :(" << std::endl;
150  }
151  }
152  produces<L1JetParticleCollection>("Boosted");
154 }
155 
157  if (summaryCard != nullptr)
158  delete summaryCard;
159 }
160 
161 //
162 // member functions
163 //
164 
165 // ------------ method called to produce the data ------------
167  using namespace edm;
168 
169  std::unique_ptr<L1JetParticleCollection> bJetCands(new L1JetParticleCollection);
170 
171  UCTGeometry g;
172 
173  // Here we read region data from the region collection created by L1TCaloLayer1 instead of
174  // independently creating regions from TPGs for processing by the summary card. This results
175  // in a single region vector of size 252 whereas from independent creation we had 3*6 vectors
176  // of size 7*2. Indices are mapped in UCTSummaryCard accordingly.
177  summaryCard->clearRegions();
178  std::vector<UCTRegion*> inputRegions;
179  inputRegions.clear();
180  edm::Handle<std::vector<L1CaloRegion>> regionCollection;
181  if (!iEvent.getByToken(regionToken, regionCollection))
182  edm::LogError("L1TCaloSummary") << "UCT: Failed to get regions from region collection!";
183  iEvent.getByToken(regionToken, regionCollection);
184  for (const L1CaloRegion& i : *regionCollection) {
185  UCTRegionIndex r = g.getUCTRegionIndexFromL1CaloRegion(i.gctEta(), i.gctPhi());
186  UCTTowerIndex t = g.getUCTTowerIndexFromL1CaloRegion(r, i.raw());
187  uint32_t absCaloEta = std::abs(t.first);
188  uint32_t absCaloPhi = std::abs(t.second);
189  bool negativeEta = false;
190  if (t.first < 0)
191  negativeEta = true;
192  uint32_t crate = g.getCrate(t.first, t.second);
193  uint32_t card = g.getCard(t.first, t.second);
194  uint32_t region = g.getRegion(absCaloEta, absCaloPhi);
195  UCTRegion* test = new UCTRegion(crate, card, negativeEta, region, fwVersion);
196  test->setRegionSummary(i.raw());
197  inputRegions.push_back(test);
198  }
199  summaryCard->setRegionData(inputRegions);
200 
201  if (!summaryCard->process()) {
202  edm::LogError("L1TCaloSummary") << "UCT: Failed to process summary card" << std::endl;
203  exit(1);
204  }
205 
206  double pt = 0;
207  double eta = -999.;
208  double phi = -999.;
209  double mass = 0;
210 
211  std::list<UCTObject*> boostedJetObjs = summaryCard->getBoostedJetObjs();
212  for (std::list<UCTObject*>::const_iterator i = boostedJetObjs.begin(); i != boostedJetObjs.end(); i++) {
213  const UCTObject* object = *i;
214  pt = ((double)object->et()) * caloScaleFactor * boostedJetPtFactor;
215  eta = g.getUCTTowerEta(object->iEta());
216  phi = g.getUCTTowerPhi(object->iPhi());
217  bitset<3> activeRegionEtaPattern = 0;
218  for (uint32_t iEta = 0; iEta < 3; iEta++) {
219  bool activeStrip = false;
220  for (uint32_t iPhi = 0; iPhi < 3; iPhi++) {
221  if (object->boostedJetRegionET()[3 * iEta + iPhi] > 30 &&
222  object->boostedJetRegionET()[3 * iEta + iPhi] > object->et() * 0.0625)
223  activeStrip = true;
224  }
225  if (activeStrip)
226  activeRegionEtaPattern |= (0x1 << iEta);
227  }
228  bitset<3> activeRegionPhiPattern = 0;
229  for (uint32_t iPhi = 0; iPhi < 3; iPhi++) {
230  bool activeStrip = false;
231  for (uint32_t iEta = 0; iEta < 3; iEta++) {
232  if (object->boostedJetRegionET()[3 * iEta + iPhi] > 30 &&
233  object->boostedJetRegionET()[3 * iEta + iPhi] > object->et() * 0.0625)
234  activeStrip = true;
235  }
236  if (activeStrip)
237  activeRegionPhiPattern |= (0x1 << iPhi);
238  }
239  string regionEta = activeRegionEtaPattern.to_string<char, std::string::traits_type, std::string::allocator_type>();
240  string regionPhi = activeRegionPhiPattern.to_string<char, std::string::traits_type, std::string::allocator_type>();
241  if (std::abs(eta) < 2.5 && (regionEta == "010" || regionPhi == "010" || regionEta == "110" || regionPhi == "110" ||
242  regionEta == "011" || regionPhi == "011"))
243  bJetCands->push_back(L1JetParticle(math::PtEtaPhiMLorentzVector(pt, eta, phi, mass), L1JetParticle::kCentral));
244  }
245 
246  iEvent.put(std::move(bJetCands), "Boosted");
247 }
248 
250 
251 // ------------ method called once each job just before starting event loop ------------
252 //void L1TCaloSummary::beginJob() {}
253 
254 // ------------ method called once each job just after ending the event loop ------------
255 //void L1TCaloSummary::endJob() {}
256 
257 // ------------ method called when starting to processes a run ------------
258 
259 void L1TCaloSummary::beginRun(edm::Run const& iRun, edm::EventSetup const& iSetup) {}
260 
261 // ------------ method called when ending the processing of a run ------------
262 /*
263  void
264  L1TCaloSummary::endRun(edm::Run const&, edm::EventSetup const&)
265  {
266  }
267 */
268 
269 // ------------ method called when starting to processes a luminosity block ------------
270 /*
271  void
272  L1TCaloSummary::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&)
273  {
274  }
275 */
276 
277 // ------------ method called when ending the processing of a luminosity block ------------
278 /*
279  void
280  L1TCaloSummary::endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&)
281  {
282  }
283 */
284 
285 // ------------ method fills 'descriptions' with the allowed parameters for the module ------------
287  //The following says we do not know what parameters are allowed so do no validation
288  // Please change this to state exactly what you do use, even if it is no parameters
290  desc.setUnknown();
291  descriptions.addDefault(desc);
292 }
293 
294 //define this as a plug-in
amcDumpToRaw_cfi.fwVersion
fwVersion
Definition: amcDumpToRaw_cfi.py:11
L1JetParticleCollection
uct2016EmulatorDigis_cfi.tauSeed
tauSeed
Definition: uct2016EmulatorDigis_cfi.py:43
electrons_cff.bool
bool
Definition: electrons_cff.py:366
resolutioncreator_cfi.object
object
Definition: resolutioncreator_cfi.py:4
mps_fire.i
i
Definition: mps_fire.py:428
EDProducer.h
L1CaloRegion
A calorimeter trigger region (sum of 4x4 trigger towers)
Definition: L1CaloRegion.h:21
L1TCaloSummary::regionToken
edm::EDGetTokenT< L1CaloRegionCollection > regionToken
Definition: L1TCaloSummary.cc:104
DiDispStaMuonMonitor_cfi.pt
pt
Definition: DiDispStaMuonMonitor_cfi.py:39
L1TCaloSummary::~L1TCaloSummary
~L1TCaloSummary() override
Definition: L1TCaloSummary.cc:156
edm::Run
Definition: Run.h:45
L1TCaloSummary::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Definition: L1TCaloSummary.cc:286
edm::EDGetTokenT< L1CaloRegionCollection >
edm
HLT enums.
Definition: AlignableModifier.h:19
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89301
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
EDProducer.h
edm::Handle
Definition: AssociativeIterator.h:50
L1TCaloSummary::nPumBins
uint32_t nPumBins
Definition: L1TCaloSummary.cc:88
L1TCaloSummary::layer1
UCTLayer1 * layer1
Definition: L1TCaloSummary.cc:106
MakerMacros.h
test
Definition: SmallWORMDict.h:13
L1TCaloSummary::caloScaleFactor
double caloScaleFactor
Definition: L1TCaloSummary.cc:92
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
L1TCaloSummary::verbose
bool verbose
Definition: L1TCaloSummary.cc:101
L1TCaloSummary::print
void print()
Definition: L1TCaloSummary.cc:249
HcalDigiCollections.h
PVValHelper::eta
Definition: PVValidationHelpers.h:70
L1TCaloSummary::produce
void produce(edm::Event &, const edm::EventSetup &) override
Definition: L1TCaloSummary.cc:166
L1TCaloSummary::fwVersion
int fwVersion
Definition: L1TCaloSummary.cc:102
fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
EcalDigiCollections.h
verbose
static constexpr int verbose
Definition: HLTExoticaSubAnalysis.cc:25
uct2016EmulatorDigis_cfi.eGammaSeed
eGammaSeed
Definition: uct2016EmulatorDigis_cfi.py:45
edm::ConfigurationDescriptions
Definition: ConfigurationDescriptions.h:28
L1EmParticleFwd.h
L1TCaloSummary::eGammaIsolationFactor
double eGammaIsolationFactor
Definition: L1TCaloSummary.cc:98
L1JetParticleFwd.h
edm::ParameterSet
Definition: ParameterSet.h:47
L1EtMissParticleFwd.h
Event.h
uct2016EmulatorDigis_cfi.caloScaleFactor
caloScaleFactor
Definition: uct2016EmulatorDigis_cfi.py:41
print
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:46
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
l1extra::L1JetParticle
Definition: L1JetParticle.h:28
LorentzVector.h
HLT_FULL_cff.region
region
Definition: HLT_FULL_cff.py:88286
createfilelist.int
int
Definition: createfilelist.py:10
L1TCaloSummary::eGammaSeed
uint32_t eGammaSeed
Definition: L1TCaloSummary.cc:97
L1CaloCollections.h
iEvent
int iEvent
Definition: GenABIO.cc:224
trackerHitRTTI::vector
Definition: trackerHitRTTI.h:21
edm::stream::EDProducer
Definition: EDProducer.h:36
edm::EventSetup
Definition: EventSetup.h:58
L1EmParticle.h
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
L1TCaloSummary::L1TCaloSummary
L1TCaloSummary(const edm::ParameterSet &)
Definition: L1TCaloSummary.cc:121
L1TCaloSummary::tauIsolationFactor
float tauIsolationFactor
Definition: L1TCaloSummary.cc:96
alignCSCRings.r
r
Definition: alignCSCRings.py:93
DDAxes::phi
submitPVResolutionJobs.desc
string desc
Definition: submitPVResolutionJobs.py:251
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
uct2016EmulatorDigis_cfi.eGammaIsolationFactor
eGammaIsolationFactor
Definition: uct2016EmulatorDigis_cfi.py:46
L1CaloRegionCollection
std::vector< L1CaloRegion > L1CaloRegionCollection
Definition: L1CaloCollections.h:11
uct2016EmulatorDigis_cfi.jetSeed
jetSeed
Definition: uct2016EmulatorDigis_cfi.py:42
Frameworkfwd.h
L1TCaloSummary
Definition: L1TCaloSummary.cc:70
EgHLTOffHistBins_cfi.mass
mass
Definition: EgHLTOffHistBins_cfi.py:34
uct2016EmulatorDigis_cfi.nPumBins
nPumBins
Definition: uct2016EmulatorDigis_cfi.py:4
L1TCaloSummary::tauSeed
uint32_t tauSeed
Definition: L1TCaloSummary.cc:95
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
L1TowerCalibrationProducer_cfi.iEta
iEta
Definition: L1TowerCalibrationProducer_cfi.py:60
math::PtEtaPhiMLorentzVector
PtEtaPhiMLorentzVectorD PtEtaPhiMLorentzVector
Lorentz vector with cartesian internal representation.
Definition: LorentzVector.h:25
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
beamvalidation.exit
def exit(msg="")
Definition: beamvalidation.py:52
L1EtMissParticle.h
ParameterSet.h
L1TCaloSummary::pumLUT
std::vector< std::vector< std::vector< uint32_t > > > pumLUT
Definition: L1TCaloSummary.cc:90
L1TCaloSummary::beginRun
void beginRun(edm::Run const &, edm::EventSetup const &) override
Definition: L1TCaloSummary.cc:259
l1extra
Definition: L1EmParticle.h:26
L1TCaloSummary::boostedJetPtFactor
double boostedJetPtFactor
Definition: L1TCaloSummary.cc:99
edm::Event
Definition: Event.h:73
submitPVValidationJobs.t
string t
Definition: submitPVValidationJobs.py:644
L1TCaloSummary::summaryCard
UCTSummaryCard * summaryCard
Definition: L1TCaloSummary.cc:107
edm::ConfigurationDescriptions::addDefault
void addDefault(ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:99
uct2016EmulatorDigis_cfi.tauIsolationFactor
tauIsolationFactor
Definition: uct2016EmulatorDigis_cfi.py:44
edm::Log
Definition: MessageLogger.h:70
L1JetParticle.h
uct2016EmulatorDigis_cfi.boostedJetPtFactor
boostedJetPtFactor
Definition: uct2016EmulatorDigis_cfi.py:47
g
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
L1CaloRegion.h
L1TCaloSummary::jetSeed
uint32_t jetSeed
Definition: L1TCaloSummary.cc:94