CMS 3D CMS Logo

HcalCollapseAnalyzer.cc
Go to the documentation of this file.
1 // -*- C++ -*-//
2 // Package: Hcal
3 // Class: HcalCollapseAnalyzer
4 //
12 //
13 // Original Author: Sunanda Banerjee
14 // Created: Thu Dec 26 18:52:02 CST 2017
15 //
16 //
17 
18 // system include files
19 #include <string>
20 #include <vector>
21 
22 // Root objects
23 #include "TH1.h"
24 
25 // user include files
28 
32 
43 
46 
48 
49 public:
50  explicit HcalCollapseAnalyzer(const edm::ParameterSet&);
51  ~HcalCollapseAnalyzer() override { }
52 
53  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
54 
55 private:
56  void analyze(edm::Event const&, edm::EventSetup const&) override;
57  void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override;
58 
59  // ----------member data ---------------------------
61  const int verbosity_;
63  const bool doHE_, doHB_;
64 
67 
70 };
71 
73  topFolderName_(iConfig.getParameter<std::string>("topFolderName")),
74  verbosity_(iConfig.getUntrackedParameter<int>("verbosity",0)),
75  recHitHBHE_(iConfig.getUntrackedParameter<edm::InputTag>("recHitHBHE",edm::InputTag("hbhereco"))),
76  preRecHitHBHE_(iConfig.getUntrackedParameter<edm::InputTag>("preRecHitHBHE",edm::InputTag("hbheprereco"))),
77  doHE_(iConfig.getUntrackedParameter<bool>("doHE", true)),
78  doHB_(iConfig.getUntrackedParameter<bool>("doHB", false)) {
79 
80  // define tokens for access
81  tok_hbhe_ = consumes<HBHERecHitCollection>(recHitHBHE_);
82  tok_prehbhe_ = consumes<HBHERecHitCollection>(preRecHitHBHE_);
83 
84  edm::LogVerbatim("Collapse") << "Verbosity " << verbosity_ << " with tags "
85  << recHitHBHE_ << " and " << preRecHitHBHE_
86  << " and Do " << doHB_ << ":" << doHE_;
87 }
88 
91  desc.add<std::string>("topFolderName", "HcalCollapse");
92  desc.addUntracked<int>("verbosity", 0);
93  desc.addUntracked<edm::InputTag>("recHitHBHE", edm::InputTag("hbhereco"));
94  desc.addUntracked<edm::InputTag>("preRecHitHBHE",edm::InputTag("hbheprereco"));
95  desc.addUntracked<bool>("doHE", true);
96  desc.addUntracked<bool>("doHB", false);
97  descriptions.add("hcalCollapseAnalyzer",desc);
98 }
99 
101  if (verbosity_ > 0)
102  edm::LogVerbatim("Collapse") << "Run " << iEvent.id().run() << " Event "
103  << iEvent.id().event() << " starts ==============";
104 
106  iSetup.get<HcalRecNumberingRecord>().get(htopo);
107  const HcalTopology* theHBHETopology = htopo.product();
108 
110  iEvent.getByToken(tok_hbhe_, hbhereco);
112  iEvent.getByToken(tok_prehbhe_, hbheprereco);
113  if (verbosity_ > 0) {
114  edm::LogVerbatim("Collapse") << "Handle Reco " << hbhereco << " Size "
115  << hbhereco->size();
116  edm::LogVerbatim("Collapse") << "Handle PreReco " << hbheprereco <<" Size "
117  << hbheprereco->size();
118  }
119  if (hbhereco.isValid() && hbheprereco.isValid()) {
120  const HBHERecHitCollection* recohbhe = hbhereco.product();
121  const HBHERecHitCollection* prerecohbhe = hbheprereco.product();
122  if (verbosity_ > 0)
123  edm::LogVerbatim("Collapse") << "Size of hbhereco: " << recohbhe->size()
124  << " and hbheprereco: " << prerecohbhe->size();
125  double sfrac = (prerecohbhe->size() == 0) ? 1 :
126  ((double)(recohbhe->size()))/((double)(prerecohbhe->size()));
127  h_sfrac->Fill(sfrac);
128  h_size->Fill(recohbhe->size());
129  for (const auto & hit : (*recohbhe)) {
130  HcalDetId id = hit.id();
131  if (((id.subdet() == HcalEndcap) && doHE_) ||
132  ((id.subdet() == HcalBarrel) && doHB_)) {
133  h_depth->Fill(id.depth());
134  std::vector<HcalDetId> ids;
135  theHBHETopology->unmergeDepthDetId(id, ids);
136  if (verbosity_ > 0) {
137  edm::LogVerbatim("Collapse") << id << " is derived from " << ids.size()
138  << " components";
139  for (unsigned int k=0; k<ids.size(); ++k)
140  edm::LogVerbatim("Collapse") << "[" << k << "] " << ids[k];
141  }
142  h_merge->Fill(ids.size());
143  double energy = hit.energy();
144  double etot(0);
145  unsigned int k(0);
146  for (const auto phit : (*prerecohbhe)) {
147  if (std::find(ids.begin(),ids.end(),phit.id()) != ids.end()) {
148  etot += phit.energy();
149  double frac = (energy > 0) ? phit.energy()/energy : 1.0;
150  h_frac->Fill(frac);
151  if (verbosity_ > 0)
152  edm::LogVerbatim("Collapse") << "Frac[" << k << "] " << frac
153  << " for " <<phit.id();
154  ++k;
155  }
156  }
157  double frac = (energy > 0) ? etot/energy : 1.0;
158  h_balance->Fill(frac);
159  if (verbosity_ > 0)
160  edm::LogVerbatim("Collapse") << "Total energy " << energy << ":" << etot
161  << ":" << frac;
162  }
163  }
164  }
165 }
166 
168  edm::Run const &,
169  edm::EventSetup const &) {
170  // Book histograms
172  h_merge = ibooker.book1D("h_merge","Number of hits merged",10,0.0,10.0);
173  h_size = ibooker.book1D("h_size","Size of the RecHit collection",100,500.0,1500.0);
174  h_depth = ibooker.book1D("h_depth","Depth of the Id's used",10,0.0,10.0);
175  h_sfrac = ibooker.book1D("h_sfrac","Ratio of sizes of preRecHit and RecHit collections",150,0.0,1.5);
176  h_frac = ibooker.book1D("h_frac", "Fraction of energy before collapse",150,0.0,1.5);
177  h_balance= ibooker.book1D("h_balance", "Balance of energy between pre- and post-collapse",100,0.5,1.5);
178 }
179 
RunNumber_t run() const
Definition: EventID.h:39
EventNumber_t event() const
Definition: EventID.h:41
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:519
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:20
void Fill(long long x)
int iEvent
Definition: GenABIO.cc:230
const edm::InputTag preRecHitHBHE_
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:118
void analyze(edm::Event const &, edm::EventSetup const &) override
void unmergeDepthDetId(const HcalDetId &id, std::vector< HcalDetId > &ids) const
Definition: HcalTopology.h:171
ParameterDescriptionBase * add(U const &iLabel, T const &value)
bool isValid() const
Definition: HandleBase.h:74
int k[5][pyjets_maxn]
unsigned int id
HcalCollapseAnalyzer(const edm::ParameterSet &)
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:279
T const * product() const
Definition: Handle.h:81
const T & get() const
Definition: EventSetup.h:59
void add(std::string const &label, ParameterSetDescription const &psetDescription)
edm::EDGetTokenT< HBHERecHitCollection > tok_prehbhe_
const edm::InputTag recHitHBHE_
edm::EventID id() const
Definition: EventBase.h:60
HLT enums.
size_type size() const
const std::string topFolderName_
MonitorElement * h_balance
T const * product() const
Definition: ESHandle.h:86
Definition: Run.h:43
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
edm::EDGetTokenT< HBHERecHitCollection > tok_hbhe_