CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
HcalHBHEMuonHighEtaAnalyzer.cc
Go to the documentation of this file.
1 #include <memory>
2 #include <iostream>
3 #include <fstream>
4 #include <vector>
5 #include <TFile.h>
6 #include <TTree.h>
7 #include "TPRegexp.h"
8 
9 // user include files
19 
30 
32 
42 
45 
48 
52 
56 
73 
74 //#define EDM_ML_DEBUG
75 
76 class HcalHBHEMuonHighEtaAnalyzer : public edm::one::EDAnalyzer<edm::one::WatchRuns, edm::one::SharedResources> {
77 public:
79 
80  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
81 
82 private:
83  void beginJob() override;
84  void analyze(edm::Event const&, edm::EventSetup const&) override;
85  void beginRun(edm::Run const&, edm::EventSetup const&) override;
86  void endRun(edm::Run const&, edm::EventSetup const&) override {}
87 
88  bool analyzeMuon(edm::Event const&, math::XYZPoint&);
90  bool analyzeTracks(const reco::Track*, math::XYZPoint&, int, std::vector<spr::propagatedTrackID>&, bool);
91  void clearVectors();
92  int matchId(const HcalDetId&, const HcalDetId&);
93  double activeLength(const DetId&);
94  bool isGoodVertex(const reco::Vertex&);
95  double respCorr(const DetId&);
96  double gainFactor(const HcalDbService*, const HcalDetId&);
97  int depth16HE(int, int);
98  bool goodCell(const HcalDetId&, const reco::Track*, const CaloGeometry*, const MagneticField*);
100 
101  // ----------member data ---------------------------
104  const double etaMin_, emaxNearPThr_;
106  const int useRaw_, verbosity_;
112 
122 
129 
139 
143 
145  static const int depthMax_ = 7;
146  TTree* tree_;
148  std::vector<bool> mediumMuon_;
149  std::vector<double> ptGlob_, etaGlob_, phiGlob_, energyMuon_, pMuon_;
150  std::vector<double> isolationR04_, isolationR03_;
151  std::vector<double> ecalEnergy_, hcalEnergy_, hoEnergy_;
152  std::vector<bool> matchedId_, hcalHot_;
153  std::vector<double> ecal3x3Energy_, hcal1x1Energy_;
154  std::vector<unsigned int> ecalDetId_, hcalDetId_, ehcalDetId_;
155  std::vector<int> hcal_ieta_, hcal_iphi_;
156  std::vector<double> hcalDepthEnergy_[depthMax_];
157  std::vector<double> hcalDepthActiveLength_[depthMax_];
158  std::vector<double> hcalDepthEnergyHot_[depthMax_];
159  std::vector<double> hcalDepthActiveLengthHot_[depthMax_];
160  std::vector<double> hcalDepthChargeHot_[depthMax_];
161  std::vector<double> hcalDepthChargeHotBG_[depthMax_];
162  std::vector<double> hcalDepthEnergyCorr_[depthMax_];
163  std::vector<double> hcalDepthEnergyHotCorr_[depthMax_];
164  std::vector<bool> hcalDepthMatch_[depthMax_];
165  std::vector<bool> hcalDepthMatchHot_[depthMax_];
167  std::vector<double> emaxNearP_, trackDz_;
170 
171  std::vector<HcalDDDRecConstants::HcalActiveLength> actHB, actHE;
172  std::map<DetId, double> corrValue_;
174 };
175 
177  : labelEBRecHit_(iConfig.getParameter<edm::InputTag>("labelEBRecHit")),
178  labelEERecHit_(iConfig.getParameter<edm::InputTag>("labelEERecHit")),
179  labelHBHERecHit_(iConfig.getParameter<edm::InputTag>("labelHBHERecHit")),
180  labelVtx_(iConfig.getParameter<std::string>("labelVertex")),
181  labelMuon_(iConfig.getParameter<std::string>("labelMuon")),
182  labelGenTrack_(iConfig.getParameter<std::string>("labelTrack")),
183  etaMin_(iConfig.getParameter<double>("etaMin")),
184  emaxNearPThr_(iConfig.getParameter<double>("emaxNearPThreshold")),
185  analyzeMuon_(iConfig.getParameter<bool>("analyzeMuon")),
186  unCorrect_(iConfig.getParameter<bool>("unCorrect")),
187  collapseDepth_(iConfig.getParameter<bool>("collapseDepth")),
188  isItPlan1_(iConfig.getParameter<bool>("isItPlan1")),
189  getCharge_(iConfig.getParameter<bool>("getCharge")),
190  useRaw_(iConfig.getParameter<int>("useRaw")),
191  verbosity_(iConfig.getParameter<int>("verbosity")),
192  theTrackQuality_(iConfig.getUntrackedParameter<std::string>("trackQuality")),
193  fileInCorr_(iConfig.getUntrackedParameter<std::string>("fileInCorr", "")),
194  ignoreHECorr_(iConfig.getUntrackedParameter<bool>("ignoreHECorr", false)),
195  isItPreRecHit_(iConfig.getUntrackedParameter<bool>("isItPreRecHit", false)),
196  writeRespCorr_(iConfig.getUntrackedParameter<bool>("writeRespCorr", false)),
197  hdc_(nullptr),
198  theHBHETopology_(nullptr),
199  respCorrs_(nullptr),
200  tree_(nullptr) {
201  usesResource(TFileService::kSharedResource);
202  //now do what ever initialization is needed
203  kount_ = 0;
204  maxDepth_ = iConfig.getUntrackedParameter<int>("maxDepth", 7);
205  if (maxDepth_ > depthMax_)
207  else if (maxDepth_ < 1)
208  maxDepth_ = 4;
209 
211  selectionParameter_.minPt = iConfig.getUntrackedParameter<double>("minTrackPt");
213  selectionParameter_.maxDxyPV = iConfig.getUntrackedParameter<double>("maxDxyPV");
214  selectionParameter_.maxDzPV = iConfig.getUntrackedParameter<double>("maxDzPV");
215  selectionParameter_.maxChi2 = iConfig.getUntrackedParameter<double>("maxChi2");
216  selectionParameter_.maxDpOverP = iConfig.getUntrackedParameter<double>("maxDpOverP");
219 
221  tok_EB_ = consumes<EcalRecHitCollection>(labelEBRecHit_);
222  tok_EE_ = consumes<EcalRecHitCollection>(labelEERecHit_);
223  tok_HBHE_ = consumes<HBHERecHitCollection>(labelHBHERecHit_);
224  tok_Vtx_ = consumes<reco::VertexCollection>(labelVtx_);
225  tok_Muon_ = consumes<reco::MuonCollection>(labelMuon_);
226  tok_genTrack_ = consumes<reco::TrackCollection>(labelGenTrack_);
227  edm::LogVerbatim("HBHEMuon") << "Labels used: Track " << labelGenTrack_ << " Vtx " << labelVtx_ << " EB "
228  << labelEBRecHit_ << " EE " << labelEERecHit_ << " HBHE " << labelHBHERecHit_ << " MU "
229  << labelMuon_;
230 
231  tok_ddrec_ = esConsumes<HcalDDDRecConstants, HcalRecNumberingRecord, edm::Transition::BeginRun>();
232  tok_htopo_ = esConsumes<HcalTopology, HcalRecNumberingRecord, edm::Transition::BeginRun>();
233  tok_respcorr_ = esConsumes<HcalRespCorrs, HcalRespCorrsRcd, edm::Transition::BeginRun>();
234  tok_geom_ = esConsumes<CaloGeometry, CaloGeometryRecord, edm::Transition::BeginRun>();
235  tok_magField_ = esConsumes<MagneticField, IdealMagneticFieldRecord>();
236  tok_chan_ = esConsumes<EcalChannelStatus, EcalChannelStatusRcd>();
237  tok_sevlv_ = esConsumes<EcalSeverityLevelAlgo, EcalSeverityLevelAlgoRcd>();
238  tok_topo_ = esConsumes<CaloTopology, CaloTopologyRecord>();
239  tok_dbservice_ = esConsumes<HcalDbService, HcalDbRecord>();
240 
241  if (!fileInCorr_.empty()) {
242  std::ifstream infile(fileInCorr_.c_str());
243  if (infile.is_open()) {
244  while (true) {
245  unsigned int id;
246  double cfac;
247  infile >> id >> cfac;
248  if (!infile.good())
249  break;
250  corrValue_[DetId(id)] = cfac;
251  }
252  infile.close();
253  }
254  }
255  useMyCorr_ = (!corrValue_.empty());
256  edm::LogVerbatim("HBHEMuon") << "Flags used: UseRaw " << useRaw_ << " GetCharge " << getCharge_ << " UnCorrect "
257  << unCorrect_ << " IgnoreHECorr " << ignoreHECorr_ << " CollapseDepth " << collapseDepth_
258  << ":" << mergedDepth_ << " IsItPlan1 " << isItPlan1_ << " IsItPreRecHit "
259  << isItPreRecHit_ << " UseMyCorr " << useMyCorr_;
260 }
261 
262 //
263 // member functions
264 //
265 
266 // ------------ method fills 'descriptions' with the allowed parameters for the module ------------
269  desc.add<edm::InputTag>("labelEBRecHit", edm::InputTag("ecalRecHit", "EcalRecHitsEB"));
270  desc.add<edm::InputTag>("labelEERecHit", edm::InputTag("ecalRecHit", "EcalRecHitsEE"));
271  desc.add<edm::InputTag>("labelHBHERecHit", edm::InputTag("hbhereco"));
272  desc.add<std::string>("labelVertex", "offlinePrimaryVertices");
273  desc.add<std::string>("labelMuon", "muons");
274  desc.add<std::string>("labelTrack", "generalTracks");
275  desc.add<double>("etaMin", 2.0);
276  desc.add<double>("emaxNearPThreshold", 10.0);
277  desc.add<bool>("analyzeMuon", true);
278  desc.add<bool>("unCorrect", false);
279  desc.add<bool>("collapseDepth", false);
280  desc.add<bool>("isItPlan1", false);
281  desc.add<bool>("getCharge", false);
282  desc.add<int>("useRaw", 0);
283  desc.add<int>("verbosity", 0);
284  desc.addUntracked<std::string>("fileInCorr", "");
285  desc.addUntracked<std::string>("trackQuality", "highPurity");
286  desc.addUntracked<double>("minTrackPt", 1.0);
287  desc.addUntracked<double>("maxDxyPV", 0.02);
288  desc.addUntracked<double>("maxDzPV", 100.0);
289  desc.addUntracked<double>("maxChi2", 5.0);
290  desc.addUntracked<double>("maxDpOverP", 0.1);
291  desc.addUntracked<bool>("ignoreHECorr", false);
292  desc.addUntracked<bool>("isItPreRecHit", false);
293  desc.addUntracked<bool>("writeRespCorr", false);
294  desc.addUntracked<int>("maxDepth", 7);
295  descriptions.add("hcalHBHEMuonHighEta", desc);
296 }
297 
298 // ------------ method called once each job just before starting event loop ------------
301  tree_ = fs->make<TTree>("HBHEMuonHighEta", "HBHEMuonHighEta");
302  tree_->Branch("pt_of_muon", &ptGlob_);
303  tree_->Branch("eta_of_muon", &etaGlob_);
304  tree_->Branch("phi_of_muon", &phiGlob_);
305  tree_->Branch("energy_of_muon", &energyMuon_);
306  tree_->Branch("p_of_muon", &pMuon_);
307  tree_->Branch("MediumMuon", &mediumMuon_);
308  tree_->Branch("IsolationR04", &isolationR04_);
309  tree_->Branch("IsolationR03", &isolationR03_);
310  tree_->Branch("ecal_3into3", &ecalEnergy_);
311  tree_->Branch("hcal_3into3", &hcalEnergy_);
312  tree_->Branch("ho_3into3", &hoEnergy_);
313  tree_->Branch("emaxNearP", &emaxNearP_);
314 
315  tree_->Branch("Run_No", &runNumber_);
316  tree_->Branch("Event_No", &eventNumber_);
317  tree_->Branch("GoodVertex", &goodVertex_);
318  tree_->Branch("matchedId", &matchedId_);
319  tree_->Branch("hcal_cellHot", &hcalHot_);
320  tree_->Branch("ecal_3x3", &ecal3x3Energy_);
321  tree_->Branch("hcal_1x1", &hcal1x1Energy_);
322  tree_->Branch("ecal_detID", &ecalDetId_);
323  tree_->Branch("hcal_detID", &hcalDetId_);
324  tree_->Branch("ehcal_detID", &ehcalDetId_);
325  tree_->Branch("hcal_ieta", &hcal_ieta_);
326  tree_->Branch("hcal_iphi", &hcal_iphi_);
327 
328  char name[100];
329  for (int k = 0; k < maxDepth_; ++k) {
330  sprintf(name, "hcal_edepth%d", (k + 1));
331  tree_->Branch(name, &hcalDepthEnergy_[k]);
332  sprintf(name, "hcal_activeL%d", (k + 1));
333  tree_->Branch(name, &hcalDepthActiveLength_[k]);
334  sprintf(name, "hcal_edepthHot%d", (k + 1));
335  tree_->Branch(name, &hcalDepthEnergyHot_[k]);
336  sprintf(name, "hcal_activeHotL%d", (k + 1));
337  tree_->Branch(name, &hcalDepthActiveLengthHot_[k]);
338  sprintf(name, "hcal_cdepthHot%d", (k + 1));
339  tree_->Branch(name, &hcalDepthChargeHot_[k]);
340  sprintf(name, "hcal_cdepthHotBG%d", (k + 1));
341  tree_->Branch(name, &hcalDepthChargeHotBG_[k]);
342  sprintf(name, "hcal_edepthCorrect%d", (k + 1));
343  tree_->Branch(name, &hcalDepthEnergyCorr_[k]);
344  sprintf(name, "hcal_edepthHotCorrect%d", (k + 1));
345  tree_->Branch(name, &hcalDepthEnergyHotCorr_[k]);
346  sprintf(name, "hcal_depthMatch%d", (k + 1));
347  tree_->Branch(name, &hcalDepthMatch_[k]);
348  sprintf(name, "hcal_depthMatchHot%d", (k + 1));
349  tree_->Branch(name, &hcalDepthMatchHot_[k]);
350  }
351  tree_->Branch("activeLength", &hcalActiveLength_);
352  tree_->Branch("activeLengthHot", &hcalActiveLengthHot_);
353  tree_->Branch("trackDz", &trackDz_);
354  tree_->Branch("trackLayerCrossed", &trackLayerCrossed_);
355  tree_->Branch("trackOuterHit", &trackOuterHit_);
356  tree_->Branch("trackMissedInnerHits", &trackMissedInnerHits_);
357  tree_->Branch("trackMissedOuterHits", &trackMissedOuterHits_);
358 }
359 
360 // ------------ method called for each event ------------
362  ++kount_;
363  clearVectors();
364  runNumber_ = iEvent.id().run();
365  eventNumber_ = iEvent.id().event();
366 #ifdef EDM_ML_DEBUG
367  edm::LogVerbatim("HBHEMuon") << "Run " << runNumber_ << " Event " << eventNumber_;
368 #endif
369 
370  // get handles to calogeometry and calotopology
371  bField_ = &iSetup.getData(tok_magField_);
373  sevlv_ = &iSetup.getData(tok_sevlv_);
374  caloTopology_ = &iSetup.getData(tok_topo_);
376 
377  // Relevant blocks from iEvent
379  iEvent.getByToken(tok_Vtx_, vtx);
380 
383  iEvent.getByToken(tok_HBHE_, hbhe_);
384 
385  // require a good vertex
386  math::XYZPoint pvx;
387  goodVertex_ = 0;
388  if (!vtx.isValid()) {
389 #ifdef EDM_ML_DEBUG
390  edm::LogVerbatim("HBHEMuon") << "No Good Vertex found == Reject\n";
391 #endif
392  return;
393  }
394 
395  reco::VertexCollection::const_iterator firstGoodVertex = vtx->end();
396  for (reco::VertexCollection::const_iterator it = vtx->begin(); it != vtx->end(); it++) {
397  if (isGoodVertex(*it)) {
398  if (firstGoodVertex == vtx->end())
399  firstGoodVertex = it;
400  ++goodVertex_;
401  }
402  }
403  if (firstGoodVertex != vtx->end())
404  pvx = firstGoodVertex->position();
405 
406  bool accept(false);
407  if (barrelRecHitsHandle_.isValid() && endcapRecHitsHandle_.isValid() && hbhe_.isValid()) {
408  accept = analyzeMuon_ ? analyzeMuon(iEvent, pvx) : analyzeHadron(iEvent, pvx);
409  }
410  if (accept) {
411 #ifdef EDM_ML_DEBUG
412  edm::LogVerbatim("HBHEMuon") << "Total of " << hcal_ieta_.size() << " propagated points";
413  for (unsigned int i = 0; i < hcal_ieta_.size(); ++i)
414  edm::LogVerbatim("HBHEMuon") << "[" << i << "] ieta/iphi for entry to "
415  << "HCAL has value of " << hcal_ieta_[i] << ":" << hcal_iphi_[i];
416  if ((verbosity_ / 100) % 10 > 0) {
417  edm::LogVerbatim("HBHEMuon") << "Sizes:: ptGlob:" << ptGlob_.size() << " etaGlob:" << etaGlob_.size()
418  << " phiGlob:" << phiGlob_.size() << " energyMuon:" << energyMuon_.size()
419  << " pMuon:" << pMuon_.size() << " mediumMuon: " << mediumMuon_.size()
420  << " isolation:" << isolationR04_.size() << ":" << isolationR03_.size()
421  << " e|h|ho energy: " << ecalEnergy_.size() << ":" << hcalEnergy_.size() << ":"
422  << hoEnergy_.size();
423  edm::LogVerbatim("HBHEMuon") << " matchedId:" << matchedId_.size() << " hcalHot:" << hcalHot_.size()
424  << " 3x3|1x1 energy:" << ecal3x3Energy_.size() << ":" << hcal1x1Energy_.size()
425  << " detId:" << ecalDetId_.size() << ":" << hcalDetId_.size() << ":"
426  << ehcalDetId_.size() << " eta|phi:" << hcal_ieta_.size() << ":"
427  << hcal_iphi_.size();
428  edm::LogVerbatim("HBHEMuon") << " activeLength:" << hcalActiveLength_.size() << ":"
429  << hcalActiveLengthHot_.size() << " emaxNearP:" << emaxNearP_.size()
430  << " trackDz: " << trackDz_.size() << " tracks:" << trackLayerCrossed_.size() << ":"
431  << trackOuterHit_.size() << ":" << trackMissedInnerHits_.size() << ":"
432  << trackMissedOuterHits_.size();
433  for (unsigned int i = 0; i < depthMax_; ++i)
434  edm::LogVerbatim("HBHEMuon")
435  << "Depth " << i
436  << " Energy|Length|EnergyHot|LengthHot|Charge|ChargeBG|EnergyCorr|EnergyHotCorr|Match|MatchHot:"
437  << hcalDepthEnergy_[i].size() << ":" << hcalDepthActiveLength_[i].size() << ":"
438  << hcalDepthEnergyHot_[i].size() << ":" << hcalDepthActiveLengthHot_[i].size() << ":"
439  << hcalDepthChargeHot_[i].size() << ":" << hcalDepthChargeHotBG_[i].size() << ":"
440  << hcalDepthEnergyCorr_[i].size() << ":" << hcalDepthEnergyHotCorr_[i].size() << ":"
441  << hcalDepthMatch_[i].size() << ":" << hcalDepthMatchHot_[i].size();
442  }
443 #endif
444  tree_->Fill();
445  }
446 }
447 
448 // ------------ method called when starting to processes a run ------------
450  hdc_ = &iSetup.getData(tok_ddrec_);
451  actHB.clear();
452  actHE.clear();
453  actHB = hdc_->getThickActive(0);
454  actHE = hdc_->getThickActive(1);
455 #ifdef EDM_ML_DEBUG
456  if (verbosity_ % 10 > 0) {
457  unsigned int k1(0), k2(0);
458  edm::LogVerbatim("HBHEMuon") << actHB.size() << " Active Length for HB";
459  for (const auto& act : actHB) {
460  edm::LogVerbatim("HBHEMuon") << "[" << k1 << "] ieta " << act.ieta << " depth " << act.depth << " zside "
461  << act.zside << " type " << act.stype << " phi " << act.iphis.size() << ":"
462  << act.iphis[0] << " L " << act.thick;
463  HcalDetId hcid1(HcalBarrel, (act.ieta) * (act.zside), act.iphis[0], act.depth);
464  HcalDetId hcid2 = mergedDepth_ ? hdc_->mergedDepthDetId(hcid1) : hcid1;
465  edm::LogVerbatim("HBHEMuon") << hcid1 << " | " << hcid2 << " L " << activeLength(DetId(hcid2));
466  ++k1;
467  }
468  edm::LogVerbatim("HBHEMuon") << actHE.size() << " Active Length for HE";
469  for (const auto& act : actHE) {
470  edm::LogVerbatim("HBHEMuon") << "[" << k2 << "] ieta " << act.ieta << " depth " << act.depth << " zside "
471  << act.zside << " type " << act.stype << " phi " << act.iphis.size() << ":"
472  << act.iphis[0] << " L " << act.thick;
473  HcalDetId hcid1(HcalEndcap, (act.ieta) * (act.zside), act.iphis[0], act.depth);
474  HcalDetId hcid2 = mergedDepth_ ? hdc_->mergedDepthDetId(hcid1) : hcid1;
475  edm::LogVerbatim("HBHEMuon") << hcid1 << " | " << hcid2 << " L " << activeLength(DetId(hcid2));
476  ++k2;
477  }
478  }
479 #endif
480 
482  const HcalRespCorrs* resp = &iSetup.getData(tok_respcorr_);
483  respCorrs_ = new HcalRespCorrs(*resp);
485  geo_ = &iSetup.getData(tok_geom_);
486 
487  // Write correction factors for all HB/HE events
488  if (writeRespCorr_) {
490  const std::vector<DetId>& ids = gHcal->getValidDetIds(DetId::Hcal, 0);
491  edm::LogVerbatim("HBHEMuon") << "\nTable of Correction Factors for Run " << iRun.run() << "\n";
492  for (auto const& id : ids) {
493  if ((id.det() == DetId::Hcal) && ((id.subdetId() == HcalBarrel) || (id.subdetId() == HcalEndcap))) {
494  edm::LogVerbatim("HBHEMuon") << HcalDetId(id) << " " << id.rawId() << " "
495  << (respCorrs_->getValues(id))->getValue();
496  }
497  }
498  }
499 }
500 
503  iEvent.getByToken(tok_Muon_, _Muon);
504  bool accept = false;
505 
506  if (_Muon.isValid()) {
507  int nTrack(0);
508  std::vector<spr::propagatedTrackID> trkCaloDets;
509  for (reco::MuonCollection::const_iterator RecMuon = _Muon->begin(); RecMuon != _Muon->end(); ++RecMuon) {
510  if (RecMuon->innerTrack().isNonnull()) {
511  const reco::Track* pTrack = (RecMuon->innerTrack()).get();
512  if (std::abs(pTrack->eta()) > etaMin_) {
513  if (analyzeTracks(pTrack, leadPV, nTrack, trkCaloDets, false)) {
514  accept = true;
515  ptGlob_.emplace_back((RecMuon)->pt());
516  etaGlob_.emplace_back(RecMuon->eta());
517  phiGlob_.emplace_back(RecMuon->phi());
518  energyMuon_.push_back(RecMuon->energy());
519  pMuon_.emplace_back(RecMuon->p());
520  bool mediumMuon = (((RecMuon->isPFMuon()) && (RecMuon->isGlobalMuon() || RecMuon->isTrackerMuon())) &&
521  (RecMuon->innerTrack()->validFraction() > 0.49));
522  if (mediumMuon) {
523  double chiGlobal =
524  ((RecMuon->globalTrack().isNonnull()) ? RecMuon->globalTrack()->normalizedChi2() : 999);
525  bool goodGlob =
526  (RecMuon->isGlobalMuon() && chiGlobal < 3 && RecMuon->combinedQuality().chi2LocalPosition < 12 &&
527  RecMuon->combinedQuality().trkKink < 20);
528  mediumMuon = muon::segmentCompatibility(*RecMuon) > (goodGlob ? 0.303 : 0.451);
529  }
530  mediumMuon_.emplace_back(mediumMuon);
531  bool isoR03 =
532  ((RecMuon->pfIsolationR03().sumChargedHadronPt +
533  std::max(0.,
534  RecMuon->pfIsolationR03().sumNeutralHadronEt + RecMuon->pfIsolationR03().sumPhotonEt -
535  (0.5 * RecMuon->pfIsolationR03().sumPUPt))) /
536  RecMuon->pt());
537  bool isoR04 =
538  ((RecMuon->pfIsolationR04().sumChargedHadronPt +
539  std::max(0.,
540  RecMuon->pfIsolationR04().sumNeutralHadronEt + RecMuon->pfIsolationR04().sumPhotonEt -
541  (0.5 * RecMuon->pfIsolationR04().sumPUPt))) /
542  RecMuon->pt());
543  isolationR03_.emplace_back(isoR03);
544  isolationR04_.emplace_back(isoR04);
545 
546  ecalEnergy_.emplace_back(RecMuon->calEnergy().emS9);
547  hcalEnergy_.emplace_back(RecMuon->calEnergy().hadS9);
548  hoEnergy_.emplace_back(RecMuon->calEnergy().hoS9);
549 #ifdef EDM_ML_DEBUG
550  if ((verbosity_ / 100) % 10 > 0)
551  edm::LogVerbatim("HBHEMuon")
552  << "Muon[" << ptGlob_.size() << "] pt:eta:phi:p " << ptGlob_.back() << ":" << etaGlob_.back() << ":"
553  << phiGlob_.back() << ":" << energyMuon_.back() << ":" << pMuon_.back() << ":"
554  << " Medium:i3:i4 " << mediumMuon_.back() << ":" << isolationR03_.back() << ":"
555  << isolationR04_.back() << ":"
556  << " Energy EC:HC:HO " << ecalEnergy_.back() << ":" << hcalEnergy_.back() << ":" << hoEnergy_.back();
557 #endif
558  }
559  }
560  }
561  }
562  }
563  return accept;
564 }
565 
567  //Get track collection
569  iEvent.getByToken(tok_genTrack_, trkCollection);
570  bool accept = false;
571 
572  if (!trkCollection.isValid()) {
573  std::vector<spr::propagatedTrackID> trkCaloDets;
574  spr::propagateCALO(trkCollection, geo_, bField_, theTrackQuality_, trkCaloDets, false);
575  int nTrack(0);
576  std::vector<spr::propagatedTrackID>::const_iterator trkDetItr;
577  for (trkDetItr = trkCaloDets.begin(), nTrack = 0; trkDetItr != trkCaloDets.end(); trkDetItr++, nTrack++) {
578  const reco::Track* pTrack = &(*(trkDetItr->trkItr));
579  if (std::abs(pTrack->eta()) > etaMin_) {
580  accept = analyzeTracks(pTrack, leadPV, nTrack, trkCaloDets, true);
581  }
582  }
583  }
584  return accept;
585 }
586 
588  math::XYZPoint& leadPV,
589  int nTrack,
590  std::vector<spr::propagatedTrackID>& trkCaloDets,
591  bool ifHadron) {
592  bool accept(false);
593 
594  if (spr::goodTrack(pTrack, leadPV, selectionParameter_, false)) {
595  spr::propagatedTrackID trackID = spr::propagateCALO(pTrack, geo_, bField_, false);
596 
597  if (trackID.okECAL && trackID.okHCAL) {
598  double emaxNearP = (ifHadron) ? spr::chargeIsolationEcal(nTrack, trkCaloDets, geo_, caloTopology_, 15, 15) : 0;
599  if (emaxNearP < emaxNearPThr_) {
600  double eEcal(0), eHcal(0), activeLengthTot(0), activeLengthHotTot(0);
601  double eHcalDepth[depthMax_], eHcalDepthHot[depthMax_];
602  double eHcalDepthC[depthMax_], eHcalDepthHotC[depthMax_];
603  double cHcalDepthHot[depthMax_], cHcalDepthHotBG[depthMax_];
604  double activeL[depthMax_], activeHotL[depthMax_];
605  bool matchDepth[depthMax_], matchDepthHot[depthMax_];
606  HcalDetId eHcalDetId[depthMax_];
607  unsigned int isHot(0);
608  bool tmpmatch(false);
609  int ieta(-1000), iphi(-1000);
610  for (int i = 0; i < depthMax_; ++i) {
611  eHcalDepth[i] = eHcalDepthHot[i] = 0;
612  eHcalDepthC[i] = eHcalDepthHotC[i] = 0;
613  cHcalDepthHot[i] = cHcalDepthHotBG[i] = 0;
614  activeL[i] = activeHotL[i] = 0;
615  matchDepth[i] = matchDepthHot[i] = true;
616  }
617 
619  std::pair<bool, HcalDetId> info = spr::propagateHCALBack(pTrack, geo_, bField_, false);
620  if (info.first)
621  check = info.second;
622 
623  const DetId isoCell(trackID.detIdECAL);
624  std::pair<double, bool> e3x3 = spr::eECALmatrix(isoCell,
628  geo_,
630  sevlv_,
631  1,
632  1,
633  -100.0,
634  -100.0,
635  -500.0,
636  500.0,
637  false);
638  eEcal = e3x3.first;
639 #ifdef EDM_ML_DEBUG
640  if (verbosity_ % 10 > 0)
641  edm::LogVerbatim("HBHEMuon") << "Propagate Track to ECAL: " << e3x3.second << ":" << trackID.okECAL << " E "
642  << eEcal;
643 #endif
644 
645  DetId closestCell(trackID.detIdHCAL);
646  HcalDetId hcidt(closestCell.rawId());
647  if ((hcidt.ieta() == check.ieta()) && (hcidt.iphi() == check.iphi()))
648  tmpmatch = true;
649 #ifdef EDM_ML_DEBUG
650  if (verbosity_ % 10 > 0)
651  edm::LogVerbatim("HBHEMuon") << "Front " << hcidt << " Back " << info.first << ":" << check << " Match "
652  << tmpmatch;
653 #endif
654 
655  HcalSubdetector subdet = hcidt.subdet();
656  ieta = hcidt.ieta();
657  iphi = hcidt.iphi();
658  bool hborhe = (std::abs(ieta) == 16);
659 
661  closestCell,
662  hbhe_,
663  0,
664  0,
665  false,
666  true,
667  -100.0,
668  -100.0,
669  -100.0,
670  -100.0,
671  -500.,
672  500.,
673  useRaw_);
674  std::vector<std::pair<double, int>> ehdepth;
675  spr::energyHCALCell((HcalDetId)closestCell,
676  hbhe_,
677  ehdepth,
678  depthMax_,
679  -100.0,
680  -100.0,
681  -100.0,
682  -100.0,
683  -500.0,
684  500.0,
685  useRaw_,
686  depth16HE(ieta, iphi),
687  false);
688  for (int i = 0; i < depthMax_; ++i)
689  eHcalDetId[i] = HcalDetId();
690  for (unsigned int i = 0; i < ehdepth.size(); ++i) {
691  HcalSubdetector subdet0 =
692  (hborhe) ? ((ehdepth[i].second >= depth16HE(ieta, iphi)) ? HcalEndcap : HcalBarrel) : subdet;
693  HcalDetId hcid0(subdet0, ieta, iphi, ehdepth[i].second);
694  double actL = activeLength(DetId(hcid0));
695  double ene = ehdepth[i].first;
696  bool tmpC(false);
697  if (ene > 0.0) {
698  if (!(theHBHETopology_->validHcal(hcid0))) {
699  edm::LogWarning("HBHEMuon") << "(1) Invalid ID " << hcid0 << " with E = " << ene;
700  edm::LogWarning("HBHEMuon") << HcalDetId(closestCell) << " with " << ehdepth.size() << " depths:";
701  for (const auto& ehd : ehdepth)
702  edm::LogWarning("HBHEMuon") << " " << ehd.second << ":" << ehd.first;
703  } else {
704  tmpC = goodCell(hcid0, pTrack, geo_, bField_);
705  double enec(ene);
706  if (unCorrect_) {
707  double corr = (ignoreHECorr_ && (subdet0 == HcalEndcap)) ? 1.0 : respCorr(DetId(hcid0));
708  if (corr != 0)
709  ene /= corr;
710 #ifdef EDM_ML_DEBUG
711  if (verbosity_ % 10 > 0) {
712  HcalDetId id = (isItPlan1_ && isItPreRecHit_) ? hdc_->mergedDepthDetId(hcid0) : hcid0;
713  edm::LogVerbatim("HBHEMuon") << hcid0 << ":" << id << " Corr " << corr;
714  }
715 #endif
716  }
717  int depth = ehdepth[i].second - 1;
718  if (collapseDepth_) {
719  HcalDetId id = hdc_->mergedDepthDetId(hcid0);
720  depth = id.depth() - 1;
721  }
722  eHcalDepth[depth] += ene;
723  eHcalDepthC[depth] += enec;
724  activeL[depth] += actL;
725  activeLengthTot += actL;
726  matchDepth[depth] = (matchDepth[depth] && tmpC);
727 #ifdef EDM_ML_DEBUG
728  if ((verbosity_ / 10) % 10 > 0)
729  edm::LogVerbatim("HBHEMuon")
730  << hcid0 << " E " << ene << ":" << enec << " L " << actL << " Match " << tmpC;
731 #endif
732  }
733  }
734  }
735 #ifdef EDM_ML_DEBUG
736  if ((verbosity_ / 10) % 10 > 0) {
737  edm::LogVerbatim("HBHEMuon") << hcidt << " Match " << tmpmatch << " Depths " << ehdepth.size();
738  for (unsigned int k = 0; k < ehdepth.size(); ++k)
739  edm::LogVerbatim("HBHEMuon") << " [" << k << ":" << ehdepth[k].second << "] " << matchDepth[k];
740  }
741 #endif
742  HcalDetId hotCell;
743  spr::eHCALmatrix(geo_, theHBHETopology_, closestCell, hbhe_, 1, 1, hotCell, false, useRaw_, false);
744  isHot = matchId(closestCell, hotCell);
745  if (hotCell != HcalDetId()) {
746  subdet = HcalDetId(hotCell).subdet();
747  ieta = HcalDetId(hotCell).ieta();
748  iphi = HcalDetId(hotCell).iphi();
749  hborhe = (std::abs(ieta) == 16);
750  std::vector<std::pair<double, int>> ehdepth;
751  spr::energyHCALCell(hotCell,
752  hbhe_,
753  ehdepth,
754  depthMax_,
755  -100.0,
756  -100.0,
757  -100.0,
758  -100.0,
759  -500.0,
760  500.0,
761  useRaw_,
762  depth16HE(ieta, iphi),
763  false);
764  for (int i = 0; i < depthMax_; ++i)
765  eHcalDetId[i] = HcalDetId();
766  for (unsigned int i = 0; i < ehdepth.size(); ++i) {
767  HcalSubdetector subdet0 =
768  (hborhe) ? ((ehdepth[i].second >= depth16HE(ieta, iphi)) ? HcalEndcap : HcalBarrel) : subdet;
769  HcalDetId hcid0(subdet0, ieta, iphi, ehdepth[i].second);
770  double actL = activeLength(DetId(hcid0));
771  double ene = ehdepth[i].first;
772  bool tmpC(false);
773  if (ene > 0.0) {
774  if (!(theHBHETopology_->validHcal(hcid0))) {
775  edm::LogWarning("HBHEMuon") << "(2) Invalid ID " << hcid0 << " with E = " << ene;
776  edm::LogWarning("HBHEMuon") << HcalDetId(hotCell) << " with " << ehdepth.size() << " depths:";
777  for (const auto& ehd : ehdepth)
778  edm::LogWarning("HBHEMuon") << " " << ehd.second << ":" << ehd.first;
779  } else {
780  tmpC = goodCell(hcid0, pTrack, geo_, bField_);
781  double chg(ene), enec(ene);
782  if (unCorrect_) {
783  double corr = (ignoreHECorr_ && (subdet0 == HcalEndcap)) ? 1.0 : respCorr(DetId(hcid0));
784  if (corr != 0)
785  ene /= corr;
786 #ifdef EDM_ML_DEBUG
787  if (verbosity_ % 10 > 0) {
788  HcalDetId id = (isItPlan1_ && isItPreRecHit_) ? hdc_->mergedDepthDetId(hcid0) : hcid0;
789  edm::LogVerbatim("HBHEMuon")
790  << hcid0 << ":" << id << " Corr " << corr << " E " << ene << ":" << enec;
791  }
792 #endif
793  }
794  if (getCharge_) {
795  double gain = gainFactor(conditions_, hcid0);
796  if (gain != 0)
797  chg /= gain;
798 #ifdef EDM_ML_DEBUG
799  if (verbosity_ % 10 > 0)
800  edm::LogVerbatim("HBHEMuon") << hcid0 << " Gain " << gain << " C " << chg;
801 #endif
802  }
803  int depth = ehdepth[i].second - 1;
804  if (collapseDepth_) {
805  HcalDetId id = hdc_->mergedDepthDetId(hcid0);
806  depth = id.depth() - 1;
807  }
808  eHcalDepthHot[depth] += ene;
809  eHcalDepthHotC[depth] += enec;
810  cHcalDepthHot[depth] += chg;
811  activeHotL[depth] += actL;
812  activeLengthHotTot += actL;
813  matchDepthHot[depth] = (matchDepthHot[depth] && tmpC);
814 #ifdef EDM_ML_DEBUG
815  if ((verbosity_ / 10) % 10 > 0)
816  edm::LogVerbatim("HBHEMuon") << hcid0 << " depth " << depth << " E " << ene << ":" << enec << " C "
817  << chg << " L " << actL << " Match " << tmpC;
818 #endif
819  }
820  }
821  }
822  }
823 #ifdef EDM_ML_DEBUG
824  edm::LogVerbatim("HBHEMuon") << "Propagate Track to HCAL: " << trackID.okHCAL << " Match " << tmpmatch
825  << " Hot " << isHot << " Energy " << eHcal;
826 #endif
827 
828  accept = true;
829  ecalDetId_.emplace_back((trackID.detIdECAL)());
830  hcalDetId_.emplace_back((trackID.detIdHCAL)());
831  ehcalDetId_.emplace_back((trackID.detIdEHCAL)());
832  emaxNearP_.emplace_back(emaxNearP);
833  matchedId_.emplace_back(tmpmatch);
834  ecal3x3Energy_.emplace_back(eEcal);
835  hcal1x1Energy_.emplace_back(eHcal);
836  hcal_ieta_.emplace_back(ieta);
837  hcal_iphi_.emplace_back(iphi);
838  for (int i = 0; i < maxDepth_; ++i) {
839  hcalDepthEnergy_[i].emplace_back(eHcalDepth[i]);
840  hcalDepthActiveLength_[i].emplace_back(activeL[i]);
841  hcalDepthEnergyHot_[i].emplace_back(eHcalDepthHot[i]);
842  hcalDepthActiveLengthHot_[i].emplace_back(activeHotL[i]);
843  hcalDepthEnergyCorr_[i].emplace_back(eHcalDepthC[i]);
844  hcalDepthEnergyHotCorr_[i].emplace_back(eHcalDepthHotC[i]);
845  hcalDepthChargeHot_[i].emplace_back(cHcalDepthHot[i]);
846  hcalDepthChargeHotBG_[i].emplace_back(cHcalDepthHotBG[i]);
847  hcalDepthMatch_[i].emplace_back(matchDepth[i]);
848  hcalDepthMatchHot_[i].emplace_back(matchDepthHot[i]);
849  }
850  hcalActiveLength_.emplace_back(activeLengthTot);
851  hcalHot_.emplace_back(isHot);
852  hcalActiveLengthHot_.emplace_back(activeLengthHotTot);
853 #ifdef EDM_ML_DEBUG
854  if ((verbosity_ / 100) % 10 > 0) {
855  edm::LogVerbatim("HBHEMuon") << "Track " << std::hex << ecalDetId_.back() << ":" << hcalDetId_.back() << ":"
856  << ehcalDetId_.back() << std::dec << ":" << emaxNearP_.back() << ":"
857  << matchedId_.back() << ":" << ecal3x3Energy_.back() << ":"
858  << hcal1x1Energy_.back() << ":" << hcal_ieta_.back() << ":" << hcal_iphi_.back()
859  << ":" << hcalActiveLength_.back() << ":" << hcalHot_.back() << ":"
860  << hcalActiveLengthHot_.back();
861  for (int i = 0; i < maxDepth_; ++i) {
862  edm::LogVerbatim("HBHEMuon") << "Depth[" << i << "] " << hcalDepthEnergy_[i].back() << ":"
863  << hcalDepthActiveLength_[i].back() << ":" << hcalDepthEnergyHot_[i].back()
864  << ":" << hcalDepthActiveLengthHot_[i].back() << ":"
865  << hcalDepthEnergyCorr_[i].back() << ":" << hcalDepthEnergyHotCorr_[i].back()
866  << ":" << hcalDepthChargeHot_[i].back() << ":"
867  << hcalDepthChargeHotBG_[i].back() << ":" << hcalDepthMatch_[i].back() << ":"
868  << hcalDepthMatchHot_[i].back();
869  }
870  }
871 #endif
872  fillTrackParameters(pTrack, leadPV);
873  }
874  }
875  }
876  return accept;
877 }
878 
881  eventNumber_ = -99999;
882  runNumber_ = -99999;
883  goodVertex_ = -99999;
884 
885  mediumMuon_.clear();
886  ptGlob_.clear();
887  etaGlob_.clear();
888  phiGlob_.clear();
889  energyMuon_.clear();
890  pMuon_.clear();
891  isolationR04_.clear();
892  isolationR03_.clear();
893  ecalEnergy_.clear();
894  hcalEnergy_.clear();
895  hoEnergy_.clear();
896 
897  matchedId_.clear();
898  hcalHot_.clear();
899  ecal3x3Energy_.clear();
900  hcal1x1Energy_.clear();
901  ecalDetId_.clear();
902  hcalDetId_.clear();
903  ehcalDetId_.clear();
904  hcal_ieta_.clear();
905  hcal_iphi_.clear();
906  for (int i = 0; i < depthMax_; ++i) {
907  hcalDepthEnergy_[i].clear();
908  hcalDepthActiveLength_[i].clear();
909  hcalDepthEnergyHot_[i].clear();
910  hcalDepthActiveLengthHot_[i].clear();
911  hcalDepthChargeHot_[i].clear();
912  hcalDepthChargeHotBG_[i].clear();
913  hcalDepthEnergyCorr_[i].clear();
914  hcalDepthEnergyHotCorr_[i].clear();
915  hcalDepthMatch_[i].clear();
916  hcalDepthMatchHot_[i].clear();
917  }
918  hcalActiveLength_.clear();
919  hcalActiveLengthHot_.clear();
920 
921  emaxNearP_.clear();
922  trackDz_.clear();
923  trackLayerCrossed_.clear();
924  trackOuterHit_.clear();
925  trackMissedInnerHits_.clear();
926  trackMissedOuterHits_.clear();
927 }
928 
930  HcalDetId kd1(id1.subdet(), id1.ieta(), id1.iphi(), 1);
931  HcalDetId kd2(id1.subdet(), id2.ieta(), id2.iphi(), 1);
932  int match = ((kd1 == kd2) ? 1 : 0);
933  return match;
934 }
935 
937  HcalDetId id(hid);
938  int ieta = id.ietaAbs();
939  int zside = id.zside();
940  int iphi = id.iphi();
941  std::vector<int> dpths;
942  if (mergedDepth_) {
943  std::vector<HcalDetId> ids;
944  hdc_->unmergeDepthDetId(id, ids);
945  for (auto idh : ids)
946  dpths.emplace_back(idh.depth());
947  } else {
948  dpths.emplace_back(id.depth());
949  }
950  double lx(0);
951  if (id.subdet() == HcalBarrel) {
952  for (unsigned int i = 0; i < actHB.size(); ++i) {
953  if ((ieta == actHB[i].ieta) && (zside == actHB[i].zside) &&
954  (std::find(dpths.begin(), dpths.end(), actHB[i].depth) != dpths.end()) &&
955  (std::find(actHB[i].iphis.begin(), actHB[i].iphis.end(), iphi) != actHB[i].iphis.end())) {
956  lx += actHB[i].thick;
957  }
958  }
959  } else {
960  for (unsigned int i = 0; i < actHE.size(); ++i) {
961  if ((ieta == actHE[i].ieta) && (zside == actHE[i].zside) &&
962  (std::find(dpths.begin(), dpths.end(), actHE[i].depth) != dpths.end()) &&
963  (std::find(actHE[i].iphis.begin(), actHE[i].iphis.end(), iphi) != actHE[i].iphis.end())) {
964  lx += actHE[i].thick;
965  }
966  }
967  }
968  return lx;
969 }
970 
972  if (vtx.isFake())
973  return false;
974  if (vtx.ndof() < 4)
975  return false;
976  if (vtx.position().Rho() > 2.)
977  return false;
978  if (fabs(vtx.position().Z()) > 24.)
979  return false;
980  return true;
981 }
982 
984  double cfac(1.0);
985  if (useMyCorr_) {
986  auto itr = corrValue_.find(id);
987  if (itr != corrValue_.end())
988  cfac = itr->second;
989  } else if (respCorrs_ != nullptr) {
990  cfac = (respCorrs_->getValues(id))->getValue();
991  }
992  return cfac;
993 }
994 
996  double gain(0.0);
997  const HcalCalibrations& calibs = conditions->getHcalCalibrations(id);
998  for (int capid = 0; capid < 4; ++capid)
999  gain += (0.25 * calibs.respcorrgain(capid));
1000  return gain;
1001 }
1002 
1004  // Transition between HB/HE is special
1005  // For Run 1 or for Plan1 standard reconstruction it is 3
1006  // For runs beyond 2018 or in Plan1 for HEP17 it is 4
1007  int zside = (ieta > 0) ? 1 : -1;
1008  int depth = theHBHETopology_->dddConstants()->getMinDepth(1, 16, iphi, zside);
1009  if (isItPlan1_ && (!isItPreRecHit_))
1010  depth = 3;
1011 #ifdef EDM_ML_DEBUG
1012  if (verbosity_ % 10 > 0)
1013  edm::LogVerbatim("HBHEMuon") << "Plan1 " << isItPlan1_ << " PreRecHit " << isItPreRecHit_ << " phi " << iphi
1014  << " depth " << depth;
1015 #endif
1016  return depth;
1017 }
1018 
1020  const reco::Track* pTrack,
1021  const CaloGeometry* geo,
1022  const MagneticField* bField) {
1023  std::pair<double, double> rz = hdc_->getRZ(hcid);
1024  bool typeRZ = (hcid.subdet() == HcalEndcap) ? false : true;
1025  bool match = spr::propagateHCAL(pTrack, geo, bField, typeRZ, rz, false);
1026  return match;
1027 }
1028 
1030  trackDz_.emplace_back(pTrack->dz(leadPV));
1031  const reco::HitPattern& hitp = pTrack->hitPattern();
1032  trackLayerCrossed_.emplace_back(hitp.trackerLayersWithMeasurement());
1036 }
1037 
1038 //define this as a plug-in
1040 
edm::EDGetTokenT< EcalRecHitCollection > tok_EE_
RunNumber_t run() const
Definition: EventID.h:38
int matchId(const HcalDetId &, const HcalDetId &)
static const std::string kSharedResource
Definition: TFileService.h:76
Log< level::Info, true > LogVerbatim
int stripTOBLayersWithMeasurement() const
Definition: HitPattern.cc:605
const CaloSubdetectorGeometry * getSubdetectorGeometry(const DetId &id) const
access the subdetector geometry for the given subdetector directly
Definition: CaloGeometry.cc:34
EventNumber_t event() const
Definition: EventID.h:40
T getUntrackedParameter(std::string const &, T const &) const
edm::EDGetTokenT< reco::MuonCollection > tok_Muon_
std::vector< spr::propagatedTrackID > propagateCALO(edm::Handle< reco::TrackCollection > &trkCollection, const CaloGeometry *geo, const MagneticField *bField, const std::string &theTrackQuality, bool debug=false)
const HcalDDDRecConstants * dddConstants() const
Definition: HcalTopology.h:164
const EcalChannelStatus * theEcalChStatus_
static const TGPicture * info(bool iBackgroundIsBlack)
spr::trackSelectionParameters selectionParameter_
edm::Handle< HBHERecHitCollection > hbhe_
const std::vector< DetId > & getValidDetIds(DetId::Detector det=DetId::Detector(0), int subdet=0) const override
Get a list of valid detector ids (for the given subdetector)
Definition: HcalGeometry.cc:76
RunNumber_t run() const
Definition: RunBase.h:40
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
uint16_t *__restrict__ id
edm::ESGetToken< HcalRespCorrs, HcalRespCorrsRcd > tok_respcorr_
std::vector< double > hcalDepthActiveLengthHot_[depthMax_]
std::vector< double > hcalDepthEnergyCorr_[depthMax_]
const float chg[109]
Definition: CoreSimTrack.cc:5
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
std::vector< HcalDDDRecConstants::HcalActiveLength > actHE
TrackQuality
track quality
Definition: TrackBase.h:150
HcalDetId mergedDepthDetId(const HcalDetId &id) const
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
std::pair< math::XYZPoint, bool > propagateHCAL(const reco::Track *, const MagneticField *, bool debug=false)
std::vector< double > hcalDepthEnergy_[depthMax_]
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
edm::ESGetToken< EcalSeverityLevelAlgo, EcalSeverityLevelAlgoRcd > tok_sevlv_
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
edm::ESGetToken< HcalTopology, HcalRecNumberingRecord > tok_htopo_
const EcalSeverityLevelAlgo * sevlv_
T * make(const Args &...args) const
make new ROOT object
Definition: TFileService.h:64
edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > tok_magField_
std::vector< bool > hcalDepthMatchHot_[depthMax_]
const Item * getValues(DetId fId, bool throwOnFail=true) const
int zside(DetId const &)
bool analyzeMuon(edm::Event const &, math::XYZPoint &)
std::vector< unsigned int > hcalDetId_
bool validHcal(const HcalDetId &id) const
bool goodCell(const HcalDetId &, const reco::Track *, const CaloGeometry *, const MagneticField *)
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
bool accept(const edm::Event &event, const edm::TriggerResults &triggerTable, const std::string &triggerPath)
Definition: TopDQMHelpers.h:31
int trackerLayersWithMeasurement() const
Definition: HitPattern.cc:521
const Point & position() const
position
Definition: Vertex.h:127
std::vector< double > hcalDepthChargeHotBG_[depthMax_]
edm::ESGetToken< HcalDbService, HcalDbRecord > tok_dbservice_
bool isGoodVertex(const reco::Vertex &)
bool getData(T &iHolder) const
Definition: EventSetup.h:128
U second(std::pair< T, U > const &p)
double gainFactor(const HcalDbService *, const HcalDetId &)
constexpr HcalSubdetector subdet() const
get the subdetector
Definition: HcalDetId.h:138
edm::EDGetTokenT< reco::TrackCollection > tok_genTrack_
double chargeIsolationEcal(unsigned int trkIndex, std::vector< spr::propagatedTrackID > &vdetIds, const CaloGeometry *geo, const CaloTopology *caloTopology, int ieta, int iphi, bool debug=false)
int iEvent
Definition: GenABIO.cc:224
double eta() const
pseudorapidity of momentum vector
Definition: TrackBase.h:652
edm::EDGetTokenT< HBHERecHitCollection > tok_HBHE_
edm::ESGetToken< HcalDDDRecConstants, HcalRecNumberingRecord > tok_ddrec_
spr::propagatedTrackDirection propagateHCALBack(unsigned int thisTrk, edm::Handle< edm::SimTrackContainer > &SimTk, edm::Handle< edm::SimVertexContainer > &SimVtx, const CaloGeometry *geo, const MagneticField *bField, bool debug=false)
constexpr int iphi() const
get the cell iphi
Definition: HcalDetId.h:157
edm::ESGetToken< CaloTopology, CaloTopologyRecord > tok_topo_
edm::EDGetTokenT< reco::VertexCollection > tok_Vtx_
bool goodTrack(const reco::Track *pTrack, math::XYZPoint leadPV, trackSelectionParameters parameters, bool debug=false)
int getMinDepth(const int &itype, const int &ieta, const int &iphi, const int &zside) const
double getRZ(const int &subdet, const int &ieta, const int &depth) const
std::vector< double > hcalDepthEnergyHot_[depthMax_]
HcalHBHEMuonHighEtaAnalyzer(const edm::ParameterSet &)
HcalSubdetector
Definition: HcalAssistant.h:31
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
constexpr int ieta() const
get the cell ieta
Definition: HcalDetId.h:155
float segmentCompatibility(const reco::Muon &muon, reco::Muon::ArbitrationType arbitrationType=reco::Muon::SegmentAndTrackArbitration)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
bool isValid() const
Definition: HandleBase.h:70
double ndof() const
Definition: Vertex.h:123
double dz() const
dz parameter (= dsz/cos(lambda)). This is the track z0 w.r.t (0,0,0) only if the refPoint is close to...
Definition: TrackBase.h:622
void fillTrackParameters(const reco::Track *, math::XYZPoint)
std::vector< double > hcalDepthActiveLength_[depthMax_]
Definition: DetId.h:17
void beginRun(edm::Run const &, edm::EventSetup const &) override
static TrackQuality qualityByName(const std::string &name)
Definition: TrackBase.cc:126
bool isFake() const
Definition: Vertex.h:76
bool analyzeTracks(const reco::Track *, math::XYZPoint &, int, std::vector< spr::propagatedTrackID > &, bool)
std::vector< double > hcalDepthEnergyHotCorr_[depthMax_]
const HitPattern & hitPattern() const
Access the hit pattern, indicating in which Tracker layers the track has hits.
Definition: TrackBase.h:504
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
void analyze(edm::Event const &, edm::EventSetup const &) override
void unmergeDepthDetId(const HcalDetId &id, std::vector< HcalDetId > &ids) const
void add(std::string const &label, ParameterSetDescription const &psetDescription)
std::vector< unsigned int > ehcalDetId_
edm::ESGetToken< CaloGeometry, CaloGeometryRecord > tok_geom_
int trackerLayersWithoutMeasurement(HitCategory category) const
Definition: HitPattern.cc:540
edm::EventID id() const
Definition: EventBase.h:59
std::vector< HcalDDDRecConstants::HcalActiveLength > actHB
void endRun(edm::Run const &, edm::EventSetup const &) override
edm::Handle< EcalRecHitCollection > barrelRecHitsHandle_
reco::TrackBase::TrackQuality minQuality
edm::EDGetTokenT< EcalRecHitCollection > tok_EB_
int stripTECLayersWithMeasurement() const
Definition: HitPattern.cc:615
const JetExtendedData & getValue(const Container &, const reco::JetBaseRef &)
get value for the association. Throw exception if no association found
std::vector< HcalActiveLength > getThickActive(const int &type) const
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
Definition: Utils.h:10
std::vector< double > hcalDepthChargeHot_[depthMax_]
constexpr int depth() const
get the tower depth
Definition: HcalDetId.h:164
Log< level::Warning, false > LogWarning
const HcalCalibrations & getHcalCalibrations(const HcalGenericDetId &fId) const
std::vector< bool > hcalDepthMatch_[depthMax_]
std::vector< unsigned int > ecalDetId_
edm::ESGetToken< EcalChannelStatus, EcalChannelStatusRcd > tok_chan_
void energyHCALCell(HcalDetId detId, edm::Handle< T > &hits, std::vector< std::pair< double, int > > &energyCell, int maxDepth=1, double hbThr=-100, double heThr=-100, double hfThr=-100, double hoThr=-100, double tMin=-500, double tMax=500, int useRaw=0, int depthHE=3, bool debug=false)
constexpr double respcorrgain(int fCapId) const
get response corrected gain for capid=0..3
edm::Handle< EcalRecHitCollection > endcapRecHitsHandle_
etaMin_(conf.getParameter< double >("etaMin"))
void setTopo(const HcalTopology *topo)
bool analyzeHadron(edm::Event const &, math::XYZPoint &)
Definition: Run.h:45
double eECALmatrix(const DetId &detId, edm::Handle< T > &hitsEB, edm::Handle< T > &hitsEE, const CaloGeometry *geo, const CaloTopology *caloTopology, int ieta, int iphi, double ebThr=-100, double eeThr=-100, double tMin=-500, double tMax=500, bool debug=false)
double eHCALmatrix(const HcalTopology *topology, const DetId &det, edm::Handle< T > &hits, int ieta, int iphi, bool includeHO=false, bool algoNew=true, double hbThr=-100, double heThr=-100, double hfThr=-100, double hoThr=-100, double tMin=-500, double tMax=500, int useRaw=0, bool debug=false)