CMS 3D CMS Logo

PFClusterValidation.cc
Go to the documentation of this file.
8 
10  tok_evt_ = consumes<edm::HepMCProduct>(edm::InputTag("generatorSmeared"));
11 
13  consumes<reco::PFClusterCollection>(conf.getUntrackedParameter<edm::InputTag>("pflowClusterECAL"));
15  consumes<reco::PFClusterCollection>(conf.getUntrackedParameter<edm::InputTag>("pflowClusterHCAL"));
16  PFClusterHOTok_ = consumes<reco::PFClusterCollection>(conf.getUntrackedParameter<edm::InputTag>("pflowClusterHO"));
17  PFClusterHFTok_ = consumes<reco::PFClusterCollection>(
18  conf.getUntrackedParameter<edm::InputTag>("pflowClusterHF")); // cms.InputTag("particleFlowClusterECAL");
19 
20  outputFile_ = conf.getUntrackedParameter<std::string>("outputFile", "myfile.root");
21  mc_ = conf.getUntrackedParameter<bool>("mc", true);
22 
23  imc = 1;
24  if (!mc_)
25  imc = 0;
26 
27  if (!outputFile_.empty()) {
28  edm::LogInfo("OutputInfo") << " Hcal RecHit Task histograms will be saved to '" << outputFile_.c_str() << "'";
29  } else {
30  edm::LogInfo("OutputInfo") << " Hcal RecHit Task histograms will NOT be saved";
31  }
32 }
33 
35 
37  edm::Run const& irun,
38  edm::EventSetup const& isetup) {
39  Char_t histo[100];
40  ibooker.setCurrentFolder("ParticleFlow/PFClusterV");
41  Double_t etaBinsOffset[83] = {
42  -5.191, -4.889, -4.716, -4.538, -4.363, -4.191, -4.013, -3.839, -3.664, -3.489, -3.314, -3.139, -2.964, -2.853,
43  -2.65, -2.5, -2.322, -2.172, -2.043, -1.93, -1.83, -1.74, -1.653, -1.566, -1.479, -1.392, -1.305, -1.218,
44  -1.131, -1.044, -0.957, -0.879, -0.783, -0.696, -0.609, -0.522, -0.435, -0.348, -0.261, -0.174, -0.087, 0,
45  0.087, 0.174, 0.261, 0.348, 0.435, 0.522, 0.609, 0.696, 0.783, 0.879, 0.957, 1.044, 1.131, 1.218,
46  1.305, 1.392, 1.479, 1.566, 1.653, 1.74, 1.83, 1.93, 2.043, 2.172, 2.322, 2.5, 2.65, 2.853,
47  2.964, 3.139, 3.314, 3.489, 3.664, 3.839, 4.013, 4.191, 4.363, 4.538, 4.716, 4.889, 5.191};
48 
49  //These the single pion scan histos
50  //-------------------------------------------------------------------------------------------
51  sprintf(histo, "emean_vs_eta_E");
52  emean_vs_eta_E = ibooker.bookProfile(histo, histo, 82, etaBinsOffset, -100., 2000., " ");
53  sprintf(histo, "emean_vs_eta_H");
54  emean_vs_eta_H = ibooker.bookProfile(histo, histo, 82, etaBinsOffset, -100., 2000., " ");
55  sprintf(histo, "emean_vs_eta_EH");
56  emean_vs_eta_EH = ibooker.bookProfile(histo, histo, 82, etaBinsOffset, -100., 2000., " ");
57 
58  sprintf(histo, "emean_vs_eta_HF");
59  emean_vs_eta_HF = ibooker.bookProfile(histo, histo, 82, etaBinsOffset, -100., 2000., " ");
60  sprintf(histo, "emean_vs_eta_HO");
61  emean_vs_eta_HO = ibooker.bookProfile(histo, histo, 82, etaBinsOffset, -100., 2000., " ");
62 
63  sprintf(histo, "emean_vs_eta_EHF");
64  emean_vs_eta_EHF = ibooker.bookProfile(histo, histo, 82, etaBinsOffset, -100., 2000., " ");
65  sprintf(histo, "emean_vs_eta_EHFO");
66  emean_vs_eta_EHFO = ibooker.bookProfile(histo, histo, 82, etaBinsOffset, -100., 2000., " ");
67 
68  //1D histos
69 
70  sprintf(histo, "Ratio_Esummed_ECAL_0");
71  Ratio_Esummed_ECAL_0 = ibooker.book1D(histo, histo, 50, 0., 5.);
72  sprintf(histo, "Ratio_Esummed_HCAL_0");
73  Ratio_Esummed_HCAL_0 = ibooker.book1D(histo, histo, 50, 0., 5.);
74  sprintf(histo, "Ratio_Esummed_HO_0");
75  Ratio_Esummed_HO_0 = ibooker.book1D(histo, histo, 50, 0., 5.);
76  sprintf(histo, "Ratio_Esummed_ECAL_HCAL_0");
77  Ratio_Esummed_ECAL_HCAL_0 = ibooker.book1D(histo, histo, 50, 0., 5.);
78  sprintf(histo, "Ratio_Esummed_ECAL_HCAL_HO_0");
79  Ratio_Esummed_ECAL_HCAL_HO_0 = ibooker.book1D(histo, histo, 50, 0., 5.);
80 
81  sprintf(histo, "Ratio_Esummed_ECAL_1");
82  Ratio_Esummed_ECAL_1 = ibooker.book1D(histo, histo, 50, 0., 5.);
83  sprintf(histo, "Ratio_Esummed_HCAL_1");
84  Ratio_Esummed_HCAL_1 = ibooker.book1D(histo, histo, 50, 0., 5.);
85  sprintf(histo, "Ratio_Esummed_HO_1");
86  Ratio_Esummed_HO_1 = ibooker.book1D(histo, histo, 50, 0., 5.);
87  sprintf(histo, "Ratio_Esummed_ECAL_HCAL_1");
88  Ratio_Esummed_ECAL_HCAL_1 = ibooker.book1D(histo, histo, 50, 0., 5.);
89  sprintf(histo, "Ratio_Esummed_ECAL_HCAL_HO_1");
90  Ratio_Esummed_ECAL_HCAL_HO_1 = ibooker.book1D(histo, histo, 50, 0., 5.);
91 
92  sprintf(histo, "Ratio_Esummed_ECAL_2");
93  Ratio_Esummed_ECAL_2 = ibooker.book1D(histo, histo, 50, 0., 5.);
94  sprintf(histo, "Ratio_Esummed_HCAL_2");
95  Ratio_Esummed_HCAL_2 = ibooker.book1D(histo, histo, 50, 0., 5.);
96  sprintf(histo, "Ratio_Esummed_HO_2");
97  Ratio_Esummed_HO_2 = ibooker.book1D(histo, histo, 50, 0., 5.);
98  sprintf(histo, "Ratio_Esummed_ECAL_HCAL_2");
99  Ratio_Esummed_ECAL_HCAL_2 = ibooker.book1D(histo, histo, 50, 0., 5.);
100  sprintf(histo, "Ratio_Esummed_ECAL_HCAL_HO_2");
101  Ratio_Esummed_ECAL_HCAL_HO_2 = ibooker.book1D(histo, histo, 50, 0., 5.);
102 
103  sprintf(histo, "Ratio_Esummed_ECAL_3");
104  Ratio_Esummed_ECAL_3 = ibooker.book1D(histo, histo, 50, 0., 5.);
105  sprintf(histo, "Ratio_Esummed_HCAL_3");
106  Ratio_Esummed_HCAL_3 = ibooker.book1D(histo, histo, 50, 0., 5.);
107  sprintf(histo, "Ratio_Esummed_HO_3");
108  Ratio_Esummed_HO_3 = ibooker.book1D(histo, histo, 50, 0., 5.);
109  sprintf(histo, "Ratio_Esummed_ECAL_HCAL_3");
110  Ratio_Esummed_ECAL_HCAL_3 = ibooker.book1D(histo, histo, 50, 0., 5.);
111  sprintf(histo, "Ratio_Esummed_ECAL_HCAL_HO_3");
112  Ratio_Esummed_ECAL_HCAL_HO_3 = ibooker.book1D(histo, histo, 50, 0., 5.);
113 
114  sprintf(histo, "Ratio_Esummed_ECAL_4");
115  Ratio_Esummed_ECAL_4 = ibooker.book1D(histo, histo, 50, 0., 5.);
116  sprintf(histo, "Ratio_Esummed_HCAL_4");
117  Ratio_Esummed_HCAL_4 = ibooker.book1D(histo, histo, 50, 0., 5.);
118  sprintf(histo, "Ratio_Esummed_HO_4");
119  Ratio_Esummed_HO_4 = ibooker.book1D(histo, histo, 50, 0., 5.);
120  sprintf(histo, "Ratio_Esummed_ECAL_HCAL_4");
121  Ratio_Esummed_ECAL_HCAL_4 = ibooker.book1D(histo, histo, 50, 0., 5.);
122  sprintf(histo, "Ratio_Esummed_ECAL_HCAL_HO_4");
123  Ratio_Esummed_ECAL_HCAL_HO_4 = ibooker.book1D(histo, histo, 50, 0., 5.);
124 
125  sprintf(histo, "Ratio_Esummed_HF_5");
126  Ratio_Esummed_HF_5 = ibooker.book1D(histo, histo, 50, 0., 5.);
127  sprintf(histo, "Ratio_Esummed_HF_6");
128  Ratio_Esummed_HF_6 = ibooker.book1D(histo, histo, 50, 0., 5.);
129 
130  sprintf(histo, "Egen_MC");
131  Egen_MC = ibooker.book1D(histo, histo, 50, 0, 50);
132 
133  //-------------------------------------------------------------------------------------------
134 
135 } // BOOKING HISTOS
136 
138  if (imc != 0) {
140  event.getByToken(tok_evt_, evtMC); // generator in late 310_preX
141  if (!evtMC.isValid()) {
142  edm::LogWarning("Module named pfclusterAnalyzer") << "no HepMCProduct found";
143  }
144 
145  // MC particle with highest pt is taken as a direction reference
146  double maxPt = -99999.;
147  int npart = 0;
148  const HepMC::GenEvent* myGenEvent = evtMC->GetEvent();
149  for (HepMC::GenEvent::particle_const_iterator p = myGenEvent->particles_begin(); p != myGenEvent->particles_end();
150  ++p) {
151  double phip = (*p)->momentum().phi();
152  double etap = (*p)->momentum().eta();
153  double pt = (*p)->momentum().perp();
154  double energy = (*p)->momentum().e();
155  if (pt > maxPt) {
156  npart++;
157  maxPt = pt;
158  energy_MC = energy;
159  phi_MC = phip;
160  eta_MC = etap;
161  }
162  }
163  }
165 
167  event.getByToken(PFClusterECALTok_, pfClusterECAL);
168  // reco::PFClusterCollection::const_iterator pf;
169 
171  event.getByToken(PFClusterHCALTok_, pfClusterHCAL);
172 
174  event.getByToken(PFClusterHOTok_, pfClusterHO);
175 
177  event.getByToken(PFClusterHFTok_, pfClusterHF);
178 
179  double Econe = 0.;
180  double Hcone = 0.;
181  double HFcone = 0.;
182  double HOcone = 0.;
183 
184  // sum the energy in a dr cone for each subsystem
185  Econe = sumEnergy(pfClusterECAL);
186  Hcone = sumEnergy(pfClusterHCAL);
187  HOcone = sumEnergy(pfClusterHO);
188  HFcone = sumEnergy(pfClusterHF);
189 
190  if (energy_MC > 0.) {
191  if (fabs(eta_MC) < 0.5) {
194  Ratio_Esummed_HO_0->Fill(HOcone / energy_MC);
195  Ratio_Esummed_ECAL_HCAL_0->Fill((Econe + Hcone) / energy_MC);
196  Ratio_Esummed_ECAL_HCAL_HO_0->Fill((Econe + Hcone + HOcone) / energy_MC);
197  } else if (fabs(eta_MC) < 1.3 && fabs(eta_MC) > 0.5) {
200  Ratio_Esummed_HO_1->Fill(HOcone / energy_MC);
201  Ratio_Esummed_ECAL_HCAL_1->Fill((Econe + Hcone) / energy_MC);
202  Ratio_Esummed_ECAL_HCAL_HO_1->Fill((Econe + Hcone + HOcone) / energy_MC);
203  } else if (fabs(eta_MC) < 2.1 && fabs(eta_MC) > 1.3) {
206  Ratio_Esummed_HO_2->Fill(HOcone / energy_MC);
207  Ratio_Esummed_ECAL_HCAL_2->Fill((Econe + Hcone) / energy_MC);
208  Ratio_Esummed_ECAL_HCAL_HO_2->Fill((Econe + Hcone + HOcone) / energy_MC);
209  } else if (fabs(eta_MC) < 2.5 && fabs(eta_MC) > 2.1) {
212  Ratio_Esummed_HO_3->Fill(HOcone / energy_MC);
213  Ratio_Esummed_ECAL_HCAL_3->Fill((Econe + Hcone) / energy_MC);
214  Ratio_Esummed_ECAL_HCAL_HO_3->Fill((Econe + Hcone + HOcone) / energy_MC);
215  } else if (2.5 < fabs(eta_MC) && fabs(eta_MC) < 3.0) {
218  Ratio_Esummed_HO_4->Fill(HOcone / energy_MC);
219  Ratio_Esummed_ECAL_HCAL_4->Fill((Econe + Hcone) / energy_MC);
220  Ratio_Esummed_ECAL_HCAL_HO_4->Fill((Econe + Hcone + HOcone) / energy_MC);
221  } else if (3.0 < fabs(eta_MC) && fabs(eta_MC) < 4.0) {
222  Ratio_Esummed_HF_5->Fill(HFcone / energy_MC);
223  } else if (4.0 < fabs(eta_MC) && fabs(eta_MC) < 5.0) {
224  Ratio_Esummed_HF_6->Fill(HFcone / energy_MC);
225  }
226  }
227 
228  //These are the six single pion histos
229  emean_vs_eta_E->Fill(double(eta_MC), Econe);
230  emean_vs_eta_H->Fill(double(eta_MC), Hcone);
231  emean_vs_eta_EH->Fill(double(eta_MC), Econe + Hcone);
232 
233  emean_vs_eta_HF->Fill(double(eta_MC), HFcone);
234  emean_vs_eta_HO->Fill(double(eta_MC), HOcone);
235  emean_vs_eta_EHF->Fill(double(eta_MC), Econe + Hcone + HFcone);
236  emean_vs_eta_EHFO->Fill(double(eta_MC), Econe + Hcone + HFcone + HOcone);
237 
238 } //end for analyze
239 
240 double PFClusterValidation::dR(double eta1, double phi1, double eta2, double phi2) {
241  const double PI = 3.1415926535898;
242  double deltaphi = phi1 - phi2;
243  if (phi2 > phi1) {
244  deltaphi = phi2 - phi1;
245  }
246  if (deltaphi > PI) {
247  deltaphi = 2. * PI - deltaphi;
248  }
249  double deltaeta = eta2 - eta1;
250  double tmp = sqrt(deltaeta * deltaeta + deltaphi * deltaphi);
251  return tmp;
252 }
253 
255  reco::PFClusterCollection::const_iterator pf;
256  double sumenergy = 0.;
257  for (pf = pfCluster1->begin(); pf != pfCluster1->end(); ++pf) {
258  double eta = pf->eta();
259  double phi = pf->phi();
260  double en = pf->energy();
261  if (imc != 0) {
262  double r = dR(eta_MC, phi_MC, eta, phi);
263  if (r < partR) {
264  sumenergy += en;
265  }
266  }
267  }
268  return sumenergy;
269 }
270 
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX)
Definition: DQMStore.cc:239
T getUntrackedParameter(std::string const &, T const &) const
double dR(double eta1, double phi1, double eta2, double phi2)
void analyze(edm::Event const &e, edm::EventSetup const &c) override
PFClusterValidation(edm::ParameterSet const &conf)
MonitorElement * Ratio_Esummed_HO_0
MonitorElement * Ratio_Esummed_ECAL_HCAL_HO_2
MonitorElement * Ratio_Esummed_ECAL_HCAL_1
void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:418
MonitorElement * Ratio_Esummed_ECAL_2
MonitorElement * Ratio_Esummed_HCAL_1
double npart
Definition: HydjetWrapper.h:46
MonitorElement * Ratio_Esummed_ECAL_HCAL_HO_4
MonitorElement * Ratio_Esummed_ECAL_HCAL_4
MonitorElement * emean_vs_eta_EHFO
MonitorElement * Ratio_Esummed_ECAL_HCAL_HO_0
MonitorElement * Ratio_Esummed_HCAL_0
MonitorElement * Ratio_Esummed_HF_6
MonitorElement * Ratio_Esummed_ECAL_4
MonitorElement * Ratio_Esummed_ECAL_HCAL_0
MonitorElement * emean_vs_eta_HO
MonitorElement * emean_vs_eta_HF
void Fill(long long x)
edm::EDGetTokenT< reco::PFClusterCollection > PFClusterHOTok_
edm::EDGetTokenT< reco::PFClusterCollection > PFClusterHCALTok_
MonitorElement * Ratio_Esummed_HF_5
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
MonitorElement * Ratio_Esummed_HCAL_2
MonitorElement * Ratio_Esummed_HO_1
T sqrt(T t)
Definition: SSEVec.h:19
MonitorElement * bookProfile(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, char const *option="s")
Definition: DQMStore.cc:333
MonitorElement * Ratio_Esummed_ECAL_HCAL_2
edm::EDGetTokenT< edm::HepMCProduct > tok_evt_
MonitorElement * Ratio_Esummed_HO_2
bool isValid() const
Definition: HandleBase.h:70
MonitorElement * Ratio_Esummed_ECAL_HCAL_HO_3
#define PI
Definition: QcdUeDQM.h:37
MonitorElement * Ratio_Esummed_ECAL_1
MonitorElement * emean_vs_eta_EH
edm::EDGetTokenT< reco::PFClusterCollection > PFClusterHFTok_
MonitorElement * Ratio_Esummed_HCAL_4
edm::EDGetTokenT< reco::PFClusterCollection > PFClusterECALTok_
const HepMC::GenEvent * GetEvent() const
Definition: HepMCProduct.h:34
MonitorElement * Ratio_Esummed_HO_3
MonitorElement * Ratio_Esummed_HCAL_3
MonitorElement * Ratio_Esummed_HO_4
double sumEnergy(edm::Handle< reco::PFClusterCollection > pfCluster1)
MonitorElement * emean_vs_eta_H
tmp
align.sh
Definition: createJobs.py:716
MonitorElement * Ratio_Esummed_ECAL_HCAL_3
MonitorElement * Egen_MC
MonitorElement * Ratio_Esummed_ECAL_HCAL_HO_1
MonitorElement * emean_vs_eta_E
MonitorElement * emean_vs_eta_EHF
Definition: event.py:1
Definition: Run.h:45
MonitorElement * Ratio_Esummed_ECAL_0
MonitorElement * Ratio_Esummed_ECAL_3