CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
DQMAnalyzer.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: RecoEgamma/Examples
4 // Class: GsfElectronDataAnalyzer
5 //
13 //
14 // Original Author: Ursula Berthon
15 // Created: Mon Mar 27 13:22:06 CEST 2006
16 // $Id: DQMAnalyzer.cc,v 1.5 2010/10/19 17:34:56 wmtan Exp $
17 //
18 //
19 
20 // user include files
22 
29 
40 
42 
43 #include "CLHEP/Units/GlobalPhysicalConstants.h"
44 #include <iostream>
45 #include "TMath.h"
46 #include "TFile.h"
47 #include "TH1F.h"
48 #include "TH1I.h"
49 #include "TH2F.h"
50 #include "TProfile.h"
51 #include "TTree.h"
52 #include <iostream>
53 #include <cassert>
54 
55 using namespace reco;
56 
57 
59 {
60 
61  outputFile_ = conf.getParameter<std::string>("outputFile");
62  electronCollection_=conf.getParameter<edm::InputTag>("electronCollection");
63  matchingObjectCollection_ = conf.getParameter<edm::InputTag>("matchingObjectCollection");
64  matchingCondition_ = conf.getParameter<std::string>("matchingCondition");
65  readAOD_ = conf.getParameter<bool>("readAOD");
66 
67  histfile_ = new TFile(outputFile_.c_str(),"RECREATE");
68 
69  // currently only one possible matching conditions
70  assert(matchingCondition_=="Cone") ;
71  maxPtMatchingObject_ = conf.getParameter<double>("MaxPtMatchingObject");
72  maxAbsEtaMatchingObject_ = conf.getParameter<double>("MaxAbsEtaMatchingObject");
73  deltaR_ = conf.getParameter<double>("DeltaR");
74 
75  Selection_ = conf.getParameter<int>("Selection");
76  massLow_ = conf.getParameter< double >("MassLow");
77  massHigh_ = conf.getParameter< double >("MassHigh");
78  TPchecksign_ = conf.getParameter<bool>("TPchecksign");
79  TAGcheckclass_ = conf.getParameter<bool>("TAGcheckclass");
80  PROBEetcut_ = conf.getParameter<bool>("PROBEetcut");
81  PROBEcheckclass_ = conf.getParameter<bool>("PROBEcheckclass");
82 
83  minEt_ = conf.getParameter<double>("MinEt");
84  minPt_ = conf.getParameter<double>("MinPt");
85  maxAbsEta_ = conf.getParameter<double>("MaxAbsEta");
86  isEB_ = conf.getParameter<bool>("SelectEB");
87  isEE_ = conf.getParameter<bool>("SelectEE");
88  isNotEBEEGap_ = conf.getParameter<bool>("SelectNotEBEEGap");
89  isEcalDriven_ = conf.getParameter<bool>("SelectEcalDriven");
90  isTrackerDriven_ = conf.getParameter<bool>("SelectTrackerDriven");
91  eOverPMinBarrel_ = conf.getParameter<double>("MinEOverPBarrel");
92  eOverPMaxBarrel_ = conf.getParameter<double>("MaxEOverPBarrel");
93  eOverPMinEndcaps_ = conf.getParameter<double>("MinEOverPEndcaps");
94  eOverPMaxEndcaps_ = conf.getParameter<double>("MaxEOverPEndcaps");
95  dEtaMinBarrel_ = conf.getParameter<double>("MinDetaBarrel");
96  dEtaMaxBarrel_ = conf.getParameter<double>("MaxDetaBarrel");
97  dEtaMinEndcaps_ = conf.getParameter<double>("MinDetaEndcaps");
98  dEtaMaxEndcaps_ = conf.getParameter<double>("MaxDetaEndcaps");
99  dPhiMinBarrel_ = conf.getParameter<double>("MinDphiBarrel");
100  dPhiMaxBarrel_ = conf.getParameter<double>("MaxDphiBarrel");
101  dPhiMinEndcaps_ = conf.getParameter<double>("MinDphiEndcaps");
102  dPhiMaxEndcaps_ = conf.getParameter<double>("MaxDphiEndcaps");
103  sigIetaIetaMinBarrel_ = conf.getParameter<double>("MinSigIetaIetaBarrel");
104  sigIetaIetaMaxBarrel_ = conf.getParameter<double>("MaxSigIetaIetaBarrel");
105  sigIetaIetaMinEndcaps_ = conf.getParameter<double>("MinSigIetaIetaEndcaps");
106  sigIetaIetaMaxEndcaps_ = conf.getParameter<double>("MaxSigIetaIetaEndcaps");
107  hadronicOverEmMaxBarrel_ = conf.getParameter<double>("MaxHoEBarrel");
108  hadronicOverEmMaxEndcaps_ = conf.getParameter<double>("MaxHoEEndcaps");
109  mvaMin_ = conf.getParameter<double>("MinMVA");
110  tipMaxBarrel_ = conf.getParameter<double>("MaxTipBarrel");
111  tipMaxEndcaps_ = conf.getParameter<double>("MaxTipEndcaps");
112  tkIso03Max_ = conf.getParameter<double>("MaxTkIso03");
113  hcalIso03Depth1MaxBarrel_ = conf.getParameter<double>("MaxHcalIso03Depth1Barrel");
114  hcalIso03Depth1MaxEndcaps_ = conf.getParameter<double>("MaxHcalIso03Depth1Endcaps");
115  hcalIso03Depth2MaxEndcaps_ = conf.getParameter<double>("MaxHcalIso03Depth2Endcaps");
116  ecalIso03MaxBarrel_ = conf.getParameter<double>("MaxEcalIso03Barrel");
117  ecalIso03MaxEndcaps_ = conf.getParameter<double>("MaxEcalIso03Endcaps");
118 
119  triggerResults_ = conf.getParameter<edm::InputTag>("triggerResults");
120  HLTPathsByName_= conf.getParameter<std::vector<std::string > >("hltPaths");
121  HLTPathsByIndex_.resize(HLTPathsByName_.size());
122 
123  edm::ParameterSet pset =
124  conf.getParameter<edm::ParameterSet>("HistosConfigurationData") ;
125 
126  etamin=pset.getParameter<double>("Etamin");
127  etamax=pset.getParameter<double>("Etamax");
128  phimin=pset.getParameter<double>("Phimin");
129  phimax=pset.getParameter<double>("Phimax");
130  ptmax=pset.getParameter<double>("Ptmax");
131  pmax=pset.getParameter<double>("Pmax");
132  eopmax=pset.getParameter<double>("Eopmax");
133  eopmaxsht=pset.getParameter<double>("Eopmaxsht");
134  detamin=pset.getParameter<double>("Detamin");
135  detamax=pset.getParameter<double>("Detamax");
136  dphimin=pset.getParameter<double>("Dphimin");
137  dphimax=pset.getParameter<double>("Dphimax");
138  detamatchmin=pset.getParameter<double>("Detamatchmin");
139  detamatchmax=pset.getParameter<double>("Detamatchmax");
140  dphimatchmin=pset.getParameter<double>("Dphimatchmin");
141  dphimatchmax=pset.getParameter<double>("Dphimatchmax");
142  fhitsmax=pset.getParameter<double>("Fhitsmax");
143  lhitsmax=pset.getParameter<double>("Lhitsmax");
144  nbineta=pset.getParameter<int>("Nbineta");
145  nbineta2D=pset.getParameter<int>("Nbineta2D");
146  nbinp=pset.getParameter<int>("Nbinp");
147  nbinpt=pset.getParameter<int>("Nbinpt");
148  nbinp2D=pset.getParameter<int>("Nbinp2D");
149  nbinpt2D=pset.getParameter<int>("Nbinpt2D");
150  nbinpteff=pset.getParameter<int>("Nbinpteff");
151  nbinphi=pset.getParameter<int>("Nbinphi");
152  nbinphi2D=pset.getParameter<int>("Nbinphi2D");
153  nbineop=pset.getParameter<int>("Nbineop");
154  nbineop2D=pset.getParameter<int>("Nbineop2D");
155  nbinfhits=pset.getParameter<int>("Nbinfhits");
156  nbinlhits=pset.getParameter<int>("Nbinlhits");
157  nbinxyz=pset.getParameter<int>("Nbinxyz");
158  nbindeta=pset.getParameter<int>("Nbindeta");
159  nbindphi=pset.getParameter<int>("Nbindphi");
160  nbindetamatch=pset.getParameter<int>("Nbindetamatch");
161  nbindphimatch=pset.getParameter<int>("Nbindphimatch");
162  nbindetamatch2D=pset.getParameter<int>("Nbindetamatch2D");
163  nbindphimatch2D=pset.getParameter<int>("Nbindphimatch2D");
164  nbinpoptrue= pset.getParameter<int>("Nbinpoptrue");
165  poptruemin=pset.getParameter<double>("Poptruemin");
166  poptruemax=pset.getParameter<double>("Poptruemax");
167  nbinmee= pset.getParameter<int>("Nbinmee");
168  meemin=pset.getParameter<double>("Meemin");
169  meemax=pset.getParameter<double>("Meemax");
170  nbinhoe= pset.getParameter<int>("Nbinhoe");
171  hoemin=pset.getParameter<double>("Hoemin");
172  hoemax=pset.getParameter<double>("Hoemax");
173 
174 }
175 
176 
178 {
179 
180  // do anything here that needs to be done at desctruction time
181  // (e.g. close files, deallocate resources etc.)
182  histfile_->Write();
183  histfile_->Close();
184 }
185 
186 void
188 
189  histfile_->cd();
190 
191  nEvents_ = 0;
192  nAfterTrigger_ = 0;
193 
194  // matching object
195  std::string::size_type locSC = matchingObjectCollection_.label().find( "SuperCluster", 0 );
196  std::string type ;
197  if ( locSC != std::string::npos ) {
198  std::cout << "Matching objects are SuperClusters "<< std::endl;
199  type = "SC";
200  } else {
201  std::cout << "Didn't recognize input matching objects!! " << std::endl;
202  }
203 
204  //==================================================
205  // matching object distributions
206  //==================================================
207 
208  std::string htitle, hlabel;
209  hlabel="h_"+type+"Num"; htitle="# "+type+"s";
210  h_matchingObjectNum = new TH1F( hlabel.c_str(), htitle.c_str(), nbinfhits,0.,fhitsmax );
211  hlabel="h_"+type+"_eta"; htitle=type+" #eta";
212  h_matchingObjectEta = new TH1F( hlabel.c_str(), htitle.c_str(), nbineta,etamin,etamax);
213  hlabel="h_"+type+"_abseta"; htitle=type+" |#eta|";
214  h_matchingObjectAbsEta = new TH1F( hlabel.c_str(), htitle.c_str(), nbineta/2,0.,etamax);
215  hlabel="h_"+type+"_P"; htitle=type+" p";
216  h_matchingObjectP = new TH1F( hlabel.c_str(), htitle.c_str(), nbinp,0.,pmax);
217  hlabel="h_"+type+"_Pt"; htitle=type+" pt";
218  h_matchingObjectPt = new TH1F( hlabel.c_str(),htitle.c_str(), nbinpteff,5.,ptmax);
219  hlabel="h_"+type+"_phi"; htitle=type+" phi";
220  h_matchingObjectPhi = new TH1F( hlabel.c_str(), htitle.c_str(), nbinphi,phimin,phimax);
221  hlabel="h_"+type+"_z"; htitle=type+" z";
222  h_matchingObjectZ = new TH1F( hlabel.c_str(), htitle.c_str(), nbinxyz , -25, 25 );
223 
224  h_matchingObjectNum->GetXaxis()-> SetTitle("N_{SC}");
225  h_matchingObjectNum->GetYaxis()-> SetTitle("Events");
226  h_matchingObjectEta->GetXaxis()-> SetTitle("#eta_{SC}");
227  h_matchingObjectEta->GetYaxis()-> SetTitle("Events");
228  h_matchingObjectP->GetXaxis()-> SetTitle("E_{SC} (GeV)");
229  h_matchingObjectP->GetYaxis()-> SetTitle("Events");
230 
231  h_ele_matchingObjectEta_matched = new TH1F( "h_ele_matchingObjectEta_matched", "Efficiency vs matching SC #eta", nbineta,etamin,etamax);
232  h_ele_matchingObjectEta_matched->Sumw2();
233  h_ele_matchingObjectAbsEta_matched = new TH1F( "h_ele_matchingObjectAbsEta_matched", "Efficiency vs matching SC |#eta|", nbineta/2,0.,2.5);
234  h_ele_matchingObjectAbsEta_matched->Sumw2();
235  h_ele_matchingObjectPt_matched = new TH1F( "h_ele_matchingObjectPt_matched", "Efficiency vs matching SC E_{T}", nbinpteff,5.,ptmax);
236  h_ele_matchingObjectPt_matched->Sumw2();
237  h_ele_matchingObjectPhi_matched = new TH1F( "h_ele_matchingObjectPhi_matched", "Efficiency vs matching SC phi", nbinphi,phimin,phimax);
238  h_ele_matchingObjectPhi_matched->Sumw2();
239  h_ele_matchingObjectZ_matched = new TH1F( "h_ele_matchingObjectZ_matched", "Efficiency vs matching SC z", nbinxyz,-25,25);
240  h_ele_matchingObjectZ_matched->Sumw2();
241 
242  //==================================================
243  // caractéristique particule
244  //==================================================
245 
246  h_ele_vertexPt = new TH1F( "h_ele_vertexPt","ele transverse momentum",nbinpt,0.,ptmax);
247  h_ele_Et = new TH1F( "h_ele_Et", "ele SC transverse energy", nbinpt,0.,ptmax);
248  h_ele_vertexEta = new TH1F( "h_ele_vertexEta","ele momentum eta",nbineta,etamin,etamax);
249  h_ele_vertexPhi = new TH1F( "h_ele_vertexPhi","ele momentum #phi",nbinphi,phimin,phimax);
250  h_ele_vertexX = new TH1F( "h_ele_vertexX","ele vertex x",nbinxyz,-0.1,0.1 );
251  h_ele_vertexY = new TH1F( "h_ele_vertexY","ele vertex y",nbinxyz,-0.1,0.1 );
252  h_ele_vertexZ = new TH1F( "h_ele_vertexZ","ele vertex z",nbinxyz,-25, 25 );
253  h_ele_vertexTIP = new TH1F( "h_ele_vertexTIP","ele transverse impact parameter (wrt bs)",90,0.,0.15);
254  h_ele_charge = new TH1F( "h_ele_charge","ele charge",5,-2.,2.);
255 
256  h_ele_charge->GetXaxis()-> SetTitle("charge");
257  h_ele_charge->GetYaxis()-> SetTitle("Events");
258 
259  h_ele_vertexPt->GetXaxis()-> SetTitle("p_{T vertex} (GeV/c)");
260  h_ele_vertexPt->GetYaxis()-> SetTitle("Events");
261 
262  h_ele_Et->GetXaxis()-> SetTitle("E_{T} (GeV)");
263  h_ele_Et->GetYaxis()-> SetTitle("Events");
264 
265  h_ele_vertexEta->GetXaxis()-> SetTitle("#eta");
266  h_ele_vertexEta->GetYaxis()-> SetTitle("Events");
267  h_ele_vertexPhi->GetXaxis()-> SetTitle("#phi (rad)");
268  h_ele_vertexPhi->GetYaxis()-> SetTitle("Events");
269 
270  h_ele_vertexX-> GetXaxis()-> SetTitle("x (cm)");
271  h_ele_vertexX-> GetYaxis()-> SetTitle("Events");
272  h_ele_vertexY-> GetXaxis()-> SetTitle("y (cm)");
273  h_ele_vertexY-> GetYaxis()-> SetTitle("Events");
274  h_ele_vertexZ-> GetXaxis()-> SetTitle("z (cm)");
275  h_ele_vertexZ-> GetYaxis()-> SetTitle("Events");
276 
277  h_ele_vertexTIP-> GetXaxis()-> SetTitle("TIP (cm)");
278  h_ele_vertexTIP-> GetYaxis()-> SetTitle("Events");
279 
280  //==================================================
281  // # rec electrons
282  //==================================================
283 
284  histNum_= new TH1F("h_recEleNum","# rec electrons",20, 0.,20.);
285 
286  histNum_-> GetXaxis()-> SetTitle("N_{ele}");
287  histNum_-> GetYaxis()-> SetTitle("Events");
288 
289  //==================================================
290  // SuperClusters
291  //==================================================
292 
293  histSclEn_ = new TH1F("h_scl_energy","ele supercluster energy",nbinp,0.,pmax);
294  histSclEt_ = new TH1F("h_scl_et","ele supercluster transverse energy",nbinpt,0.,ptmax);
295  histSclEta_ = new TH1F("h_scl_eta","ele supercluster eta",nbineta,etamin,etamax);
296  histSclPhi_ = new TH1F("h_scl_phi","ele supercluster phi",nbinphi,phimin,phimax);
297  histSclSigEtaEta_ = new TH1F("h_scl_sigetaeta","ele supercluster sigma eta eta",100,0.,0.05);
298 
299  //==================================================
300  // electron track
301  //==================================================
302 
303  h_ele_ambiguousTracks = new TH1F( "h_ele_ambiguousTracks", "ele # ambiguous tracks", 5,0.,5.);
304  h_ele_ambiguousTracksVsEta = new TH2F( "h_ele_ambiguousTracksVsEta","ele # ambiguous tracks vs eta", nbineta2D,etamin,etamax,5,0.,5.);
305  h_ele_ambiguousTracksVsPhi = new TH2F( "h_ele_ambiguousTracksVsPhi", "ele # ambiguous tracks vs phi", nbinphi2D,phimin,phimax,5,0.,5.);
306  h_ele_ambiguousTracksVsPt = new TH2F( "h_ele_ambiguousTracksVsPt", "ele # ambiguous tracks vs pt", nbinpt2D,0.,ptmax,5,0.,5.);
307  h_ele_foundHits = new TH1F( "h_ele_foundHits", "ele track # found hits", nbinfhits,0.,fhitsmax);
308  h_ele_foundHitsVsEta = new TH2F( "h_ele_foundHitsVsEta", "ele track # found hits vs eta", nbineta2D,etamin,etamax,nbinfhits,0.,fhitsmax);
309  h_ele_foundHitsVsPhi = new TH2F( "h_ele_foundHitsVsPhi", "ele track # found hits vs phi", nbinphi2D,phimin,phimax,nbinfhits,0.,fhitsmax);
310  h_ele_foundHitsVsPt = new TH2F( "h_ele_foundHitsVsPt", "ele track # found hits vs pt", nbinpt2D,0.,ptmax,nbinfhits,0.,fhitsmax);
311  h_ele_lostHits = new TH1F( "h_ele_lostHits", "ele track # lost hits", 5,0.,5.);
312  h_ele_lostHitsVsEta = new TH2F( "h_ele_lostHitsVsEta", "ele track # lost hits vs eta", nbineta2D,etamin,etamax,nbinlhits,0.,lhitsmax);
313  h_ele_lostHitsVsPhi = new TH2F( "h_ele_lostHitsVsPhi", "ele track # lost hits vs eta", nbinphi2D,phimin,phimax,nbinlhits,0.,lhitsmax);
314  h_ele_lostHitsVsPt = new TH2F( "h_ele_lostHitsVsPt", "ele track # lost hits vs eta", nbinpt2D,0.,ptmax,nbinlhits,0.,lhitsmax);
315  h_ele_chi2 = new TH1F( "h_ele_chi2", "ele track #chi^{2}", 100,0.,15.);
316  h_ele_chi2VsEta = new TH2F( "h_ele_chi2VsEta", "ele track #chi^{2} vs eta", nbineta2D,etamin,etamax,50,0.,15.);
317  h_ele_chi2VsPhi = new TH2F( "h_ele_chi2VsPhi", "ele track #chi^{2} vs phi", nbinphi2D,phimin,phimax,50,0.,15.);
318  h_ele_chi2VsPt = new TH2F( "h_ele_chi2VsPt", "ele track #chi^{2} vs pt", nbinpt2D,0.,ptmax,50,0.,15.);
319 
320  h_ele_foundHits->GetXaxis()-> SetTitle("N_{hits}");
321  h_ele_foundHits->GetYaxis()-> SetTitle("Events");
322  h_ele_lostHits->GetXaxis()-> SetTitle("N_{lost hits}");
323  h_ele_lostHits->GetYaxis()-> SetTitle("Events");
324  h_ele_chi2->GetXaxis()-> SetTitle("#Chi^{2}");
325  h_ele_chi2->GetYaxis()-> SetTitle("Events");
326 
327  //==================================================
328  // electron matching and ID
329  //==================================================
330 
331  h_ele_EoP = new TH1F( "h_ele_EoP", "ele E/P_{vertex}", nbineop,0.,eopmax);
332 // h_ele_EoPout = new TH1F( "h_ele_EoPout", "ele E/P_{out}", nbineop,0.,eopmax);
333  h_ele_EeleOPout = new TH1F( "h_ele_EeleOPout", "ele E_{ele}/P_{out}", nbineop,0.,eopmax);
334  h_ele_dEtaSc_propVtx = new TH1F( "h_ele_dEtaSc_propVtx", "ele #eta_{sc} - #eta_{tr}, prop from vertex", nbindetamatch,detamatchmin,detamatchmax);
335  h_ele_dPhiSc_propVtx = new TH1F( "h_ele_dPhiSc_propVtx", "ele #phi_{sc} - #phi_{tr}, prop from vertex", nbindphimatch,dphimatchmin,dphimatchmax);
336  h_ele_dEtaCl_propOut = new TH1F( "h_ele_dEtaCl_propOut", "ele #eta_{cl} - #eta_{tr}, prop from outermost", nbindetamatch,detamatchmin,detamatchmax);
337  h_ele_dPhiCl_propOut = new TH1F( "h_ele_dPhiCl_propOut", "ele #phi_{cl} - #phi_{tr}, prop from outermost", nbindphimatch,dphimatchmin,dphimatchmax);
338  h_ele_dEtaEleCl_propOut = new TH1F( "h_ele_dEtaEleCl_propOut", "ele #eta_{EleCl} - #eta_{tr}, prop from outermost", nbindetamatch,detamatchmin,detamatchmax);
339  h_ele_dPhiEleCl_propOut = new TH1F( "h_ele_dPhiEleCl_propOut", "ele #phi_{EleCl} - #phi_{tr}, prop from outermost", nbindphimatch,dphimatchmin,dphimatchmax);
340  h_ele_HoE = new TH1F("h_ele_HoE", "ele hadronic energy / em energy", nbinhoe, hoemin, hoemax) ;
341  h_ele_outerP = new TH1F( "h_ele_outerP", "ele track outer p, mean", nbinp,0.,pmax);
342  h_ele_outerP_mode = new TH1F( "h_ele_outerP_mode", "ele track outer p, mode", nbinp,0.,pmax);
343  h_ele_outerPt = new TH1F( "h_ele_outerPt", "ele track outer p_{T}, mean", nbinpt,0.,ptmax);
344  h_ele_outerPt_mode = new TH1F( "h_ele_outerPt_mode", "ele track outer p_{T}, mode", nbinpt,0.,ptmax);
345 
346  h_ele_PinMnPout = new TH1F( "h_ele_PinMnPout", "ele track inner p - outer p, mean" ,nbinp,0.,200.);
347  h_ele_PinMnPout_mode = new TH1F( "h_ele_PinMnPout_mode", "ele track inner p - outer p, mode" ,nbinp,0.,100.);
348 
349  h_ele_mva = new TH1F( "h_ele_mva","ele identification mva",100,-1.,1.);
350  h_ele_provenance = new TH1F( "h_ele_provenance","ele provenance",5,-2.,3.);
351 
352  h_ele_PinMnPout->GetXaxis()-> SetTitle("P_{vertex} - P_{out} (GeV/c)");
353  h_ele_PinMnPout->GetYaxis()-> SetTitle("Events");
354  h_ele_PinMnPout_mode->GetXaxis()-> SetTitle("P_{vertex} - P_{out}, mode (GeV/c)");
355  h_ele_PinMnPout_mode->GetYaxis()-> SetTitle("Events");
356 
357  h_ele_outerP->GetXaxis()-> SetTitle("P_{out} (GeV/c)");
358  h_ele_outerP->GetYaxis()-> SetTitle("Events");
359  h_ele_outerP_mode->GetXaxis()-> SetTitle("P_{out} (GeV/c)");
360  h_ele_outerP_mode->GetYaxis()-> SetTitle("Events");
361 
362  h_ele_outerPt->GetXaxis()-> SetTitle("P_{T out} (GeV/c)");
363  h_ele_outerPt->GetYaxis()-> SetTitle("Events");
364  h_ele_outerPt_mode->GetXaxis()-> SetTitle("P_{T out} (GeV/c)");
365  h_ele_outerPt_mode->GetYaxis()-> SetTitle("Events");
366 
367  h_ele_EoP->GetXaxis()-> SetTitle("E/P_{vertex}");
368  h_ele_EoP->GetYaxis()-> SetTitle("Events");
369 
370 // h_ele_EoPout->GetXaxis()-> SetTitle("E_{seed}/P_{out}");
371 // h_ele_EoPout->GetYaxis()-> SetTitle("Events");
372  h_ele_EeleOPout->GetXaxis()-> SetTitle("E_{ele}/P_{out}");
373  h_ele_EeleOPout->GetYaxis()-> SetTitle("Events");
374 
375  h_ele_dEtaSc_propVtx-> GetXaxis()-> SetTitle("#eta_{sc} - #eta_{tr}");
376  h_ele_dEtaSc_propVtx-> GetYaxis()-> SetTitle("Events");
377  h_ele_dEtaCl_propOut-> GetXaxis()-> SetTitle("#eta_{seedcl} - #eta_{tr}");
378  h_ele_dEtaCl_propOut-> GetYaxis()-> SetTitle("Events");
379  h_ele_dEtaEleCl_propOut-> GetXaxis()-> SetTitle("#eta_{elecl} - #eta_{tr}");
380  h_ele_dEtaEleCl_propOut-> GetYaxis()-> SetTitle("Events");
381  h_ele_dPhiSc_propVtx-> GetXaxis()-> SetTitle("#phi_{sc} - #phi_{tr} (rad)");
382  h_ele_dPhiSc_propVtx-> GetYaxis()-> SetTitle("Events");
383  h_ele_dPhiCl_propOut-> GetXaxis()-> SetTitle("#phi_{seedcl} - #phi_{tr} (rad)");
384  h_ele_dPhiCl_propOut-> GetYaxis()-> SetTitle("Events");
385  h_ele_dPhiEleCl_propOut-> GetXaxis()-> SetTitle("#phi_{elecl} - #phi_{tr} (rad)");
386  h_ele_dPhiEleCl_propOut-> GetYaxis()-> SetTitle("Events");
387  h_ele_HoE-> GetXaxis()-> SetTitle("H/E") ;
388  h_ele_HoE-> GetYaxis()-> SetTitle("Events") ;
389 
390  //==================================================
391  // isolation
392  //==================================================
393 
394  h_ele_tkSumPt_dr03 = new TH1F("h_ele_tkSumPt_dr03","tk isolation sum, dR=0.3",100,0.0,20.);
395  h_ele_ecalRecHitSumEt_dr03= new TH1F("h_ele_ecalRecHitSumEt_dr03","ecal isolation sum, dR=0.3",100,0.0,20.);
396  h_ele_hcalDepth1TowerSumEt_dr03= new TH1F("h_ele_hcalDepth1TowerSumEt_dr03","hcal depth1 isolation sum, dR=0.3",100,0.0,20.);
397  h_ele_hcalDepth2TowerSumEt_dr03= new TH1F("h_ele_hcalDepth2TowerSumEt_dr03","hcal depth2 isolation sum, dR=0.3",100,0.0,20.);
398  h_ele_tkSumPt_dr04= new TH1F("h_ele_tkSumPt_dr04","hcal isolation sum",100,0.0,20.);
399  h_ele_ecalRecHitSumEt_dr04= new TH1F("h_ele_ecalRecHitSumEt_dr04","ecal isolation sum, dR=0.4",100,0.0,20.);
400  h_ele_hcalDepth1TowerSumEt_dr04= new TH1F("h_ele_hcalDepth1TowerSumEt_dr04","hcal depth1 isolation sum, dR=0.4",100,0.0,20.);
401  h_ele_hcalDepth2TowerSumEt_dr04= new TH1F("h_ele_hcalDepth2TowerSumEt_dr04","hcal depth2 isolation sum, dR=0.4",100,0.0,20.);
402 
403  //==================================================
404  // T&P
405  //==================================================
406  h_ele_mee_os = new TH1F( "h_ele_mee_os", "ele pairs invariant mass, opposite sign", nbinmee, meemin, meemax );
407 
408 
409  //==================================================
410  // OBSOLETE
411  //==================================================
412 
413  // h_ele_PtoPtmatchingObject_matched = new TH1F( "h_ele_PtoPtmatchingObject_matched", "ele trans momentum / matching SC trans energy", nbinpoptrue,poptruemin,poptruemax);
414  // h_ele_PtoPtmatchingObject_barrel_matched = new TH1F( "h_ele_PtoPmatchingObject_barrel_matched", "ele trans momentum / matching SC trans energy, barrel",nbinpoptrue,poptruemin,poptruemax);
415  // h_ele_PtoPtmatchingObject_endcaps_matched = new TH1F( "h_ele_PtoPmatchingObject_endcaps_matched", "ele trans momentum / matching SC trans energy, endcaps",nbinpoptrue,poptruemin,poptruemax);
416  // h_ele_PoPmatchingObject_matched = new TH1F( "h_ele_PoPmatchingObject_matched", "ele momentum / matching SC energy", nbinpoptrue,poptruemin,poptruemax);
417  // h_ele_PoPmatchingObject_barrel_matched = new TH1F( "h_ele_PoPmatchingObject_barrel_matched", "ele momentum / matching SC energy, barrel",nbinpoptrue,poptruemin,poptruemax);
418  // h_ele_PoPmatchingObject_endcaps_matched = new TH1F( "h_ele_PoPmatchingObject_endcaps_matched", "ele momentum / matching SC energy, endcaps",nbinpoptrue,poptruemin,poptruemax);
419  // // h_ele_PtoPtmatchingObject_matched = new TH1F( "h_ele_PtoPtmatchingObject_matched", "ele trans momentum / matching SC trans energy", nbinpoptrue,poptruemin,poptruemax);
420  // h_ele_EtaMnEtamatchingObject_matched = new TH1F( "h_ele_EtaMnEtamatchingObject_matched", "ele momentum eta - matching SC eta",nbindeta,detamin,detamax);
421  // h_ele_PhiMnPhimatchingObject_matched = new TH1F( "h_ele_PhiMnPhimatchingObject_matched", "ele momentum phi - matching SC phi",nbindphi,dphimin,dphimax);
422  // h_ele_PhiMnPhimatchingObject2_matched = new TH1F( "h_ele_PhiMnPhimatchingObject2_matched", "ele momentum phi - matching SC phi",nbindphimatch2D,dphimatchmin,dphimatchmax);
423 
424  // h_ele_PoPmatchingObject_matched->GetXaxis()-> SetTitle("P/E_{SC}");
425  // h_ele_PoPmatchingObject_matched->GetYaxis()-> SetTitle("Events");
426  // h_ele_PoPmatchingObject_barrel_matched->GetXaxis()-> SetTitle("P/E_{SC}");
427  // h_ele_PoPmatchingObject_barrel_matched->GetYaxis()-> SetTitle("Events");
428  // h_ele_PoPmatchingObject_endcaps_matched->GetXaxis()-> SetTitle("P/E_{SC}");
429  // h_ele_PoPmatchingObject_endcaps_matched->GetYaxis()-> SetTitle("Events");
430  // h_ele_PtoPtmatchingObject_matched->GetXaxis()-> SetTitle("P_{T}/E_{T}^{SC}");
431  // h_ele_PtoPtmatchingObject_matched->GetYaxis()-> SetTitle("Events");
432  // h_ele_PtoPtmatchingObject_barrel_matched->GetXaxis()-> SetTitle("P_{T}/E_{T}^{SC}");
433  // h_ele_PtoPtmatchingObject_barrel_matched->GetYaxis()-> SetTitle("Events");
434  // h_ele_PtoPtmatchingObject_endcaps_matched->GetXaxis()-> SetTitle("P_{T}/E_{T}^{SC}");
435  // h_ele_PtoPtmatchingObject_endcaps_matched->GetYaxis()-> SetTitle("Events");
436  //
437  // h_ele_EtaMnEtamatchingObject_matched->GetXaxis()-> SetTitle("#eta_{rec} - #eta_{SC}");
438  // h_ele_EtaMnEtamatchingObject_matched->GetYaxis()-> SetTitle("Events");
439  // h_ele_PhiMnPhimatchingObject_matched->GetXaxis()-> SetTitle("#phi_{rec} - #phi_{SC} (rad)");
440  // h_ele_PhiMnPhimatchingObject_matched->GetYaxis()-> SetTitle("Events");
441  // h_ele_EtaMnEtamatchingObject_matched->GetXaxis()-> SetTitle("#eta_{rec} - #eta_{SC}");
442  // h_ele_EtaMnEtamatchingObject_matched->GetYaxis()-> SetTitle("Events");
443  // h_ele_PhiMnPhimatchingObject_matched->GetXaxis()-> SetTitle("#phi_{rec} - #phi_{SC} (rad)");
444  // h_ele_PhiMnPhimatchingObject_matched->GetYaxis()-> SetTitle("Events");
445  }
446 
447 
448 void
450 
451  histfile_->cd();
452  std::cout << "efficiency calculation " << std::endl;
453 
454  // efficiency vs pt
455  TH1F *h_ele_ptEff = (TH1F*)h_ele_matchingObjectPt_matched->Clone("h_ele_ptEff");
456  h_ele_ptEff->Reset();
457  h_ele_ptEff->Divide(h_ele_matchingObjectPt_matched,h_matchingObjectPt,1,1,"b");
458  h_ele_ptEff->GetXaxis()->SetTitle("p_{T} (GeV/c)");
459  h_ele_ptEff->GetYaxis()->SetTitle("Efficiency");
460 
461  // efficiency vs eta
462  TH1F *h_ele_etaEff = (TH1F*)h_ele_matchingObjectEta_matched->Clone("h_ele_etaEff");
463  h_ele_etaEff->Reset();
464  h_ele_etaEff->Divide(h_ele_matchingObjectEta_matched,h_matchingObjectEta,1,1,"b");
465  h_ele_etaEff->Print();
466  h_ele_etaEff->GetXaxis()->SetTitle("#eta");
467  h_ele_etaEff->GetYaxis()->SetTitle("Efficiency");
468 
469  // efficiency vs |eta|
470  TH1F *h_ele_absetaEff = (TH1F*)h_ele_matchingObjectAbsEta_matched->Clone("h_ele_absetaEff");
471  h_ele_absetaEff->Reset();
472  h_ele_absetaEff->Divide(h_ele_matchingObjectAbsEta_matched,h_matchingObjectAbsEta,1,1,"b");
473  h_ele_absetaEff->GetXaxis()->SetTitle("|#eta|");
474  h_ele_absetaEff->GetYaxis()->SetTitle("Efficiency");
475 
476  // efficiency vs phi
477  TH1F *h_ele_phiEff = (TH1F*)h_ele_matchingObjectPhi_matched->Clone("h_ele_phiEff");
478  h_ele_phiEff->Reset();
479  h_ele_phiEff->Divide(h_ele_matchingObjectPhi_matched,h_matchingObjectPhi,1,1,"b");
480  h_ele_phiEff->GetXaxis()->SetTitle("#phi (rad)");
481  h_ele_phiEff->GetYaxis()->SetTitle("Efficiency");
482 
483  // efficiency vs z
484  TH1F *h_ele_zEff = (TH1F*)h_ele_matchingObjectZ_matched->Clone("h_ele_zEff");
485  h_ele_zEff->Reset();
486  h_ele_zEff->Divide(h_ele_matchingObjectZ_matched,h_matchingObjectZ,1,1,"b");
487  h_ele_zEff->Print();
488  h_ele_zEff->GetXaxis()->SetTitle("z (cm)");
489  h_ele_zEff->GetYaxis()->SetTitle("Efficiency");
490 
491 
492 
493  // classes
494 
495 
496  // fbrem
497 
498  //profiles from 2D histos
499 
500  // mc truth
501 
502  h_matchingObjectNum->Write();
503 
504  // rec event
505 
506  histNum_->Write();
507 
508  // mc
509  h_matchingObjectEta->Write();
510  h_matchingObjectAbsEta->Write();
511  h_matchingObjectP->Write();
512  h_matchingObjectPt->Write();
513  h_matchingObjectPhi->Write();
514  h_matchingObjectZ->Write();
515 
516 
517 
518  // matched electrons
519  h_ele_charge->Write();
520 
521  //h_ele_vertexP->Write();
522  h_ele_vertexPt->Write();
523  h_ele_vertexEta->Write();
524  h_ele_vertexPhi->Write();
525  h_ele_vertexX->Write();
526  h_ele_vertexY ->Write();
527  h_ele_vertexZ->Write();
528 
529  h_ele_vertexTIP->Write();
530 
531  h_ele_Et->Write();
532 
533  h_ele_matchingObjectPt_matched->Write();
534  h_ele_matchingObjectAbsEta_matched->Write();
535  h_ele_matchingObjectEta_matched->Write();
536  h_ele_matchingObjectPhi_matched->Write();
537  h_ele_matchingObjectZ_matched->Write();
538 
539 // h_ele_PoPmatchingObject_matched->Write();
540 // h_ele_PtoPtmatchingObject_matched->Write();
541 // h_ele_PoPmatchingObject_barrel_matched ->Write();
542 // h_ele_PoPmatchingObject_endcaps_matched->Write();
543 // h_ele_PtoPtmatchingObject_barrel_matched ->Write();
544 // h_ele_PtoPtmatchingObject_endcaps_matched->Write();
545 // h_ele_EtaMnEtamatchingObject_matched->Write();
546 // h_ele_PhiMnPhimatchingObject_matched ->Write();
547 // h_ele_PhiMnPhimatchingObject2_matched ->Write();
548 
549 
550  // matched electron, superclusters
551  histSclEn_->Write();
552  histSclEt_->Write();
553  histSclEta_->Write();
554  histSclPhi_->Write();
555  histSclSigEtaEta_->Write();
556 
557  // matched electron, gsf tracks
558  h_ele_ambiguousTracks->Write();
559  h_ele_ambiguousTracksVsEta->Write();
560  h_ele_ambiguousTracksVsPhi->Write();
561  h_ele_ambiguousTracksVsPt->Write();
562 
563  h_ele_foundHits->Write();
564  h_ele_foundHitsVsEta->Write();
565  h_ele_foundHitsVsPhi->Write();
566  h_ele_foundHitsVsPt->Write();
567 
568  h_ele_lostHits->Write();
569  h_ele_lostHitsVsEta->Write();
570  h_ele_lostHitsVsPhi->Write();
571  h_ele_lostHitsVsPt->Write();
572 
573  h_ele_chi2 ->Write();
574  h_ele_chi2VsEta ->Write();
575  h_ele_chi2VsPhi ->Write();
576  h_ele_chi2VsPt->Write();
577 
578  h_ele_PinMnPout->Write();
579  h_ele_PinMnPout_mode->Write();
580  h_ele_outerP ->Write();
581  h_ele_outerP_mode->Write();
582  h_ele_outerPt->Write();
583  h_ele_outerPt_mode ->Write();
584 
585  // matched electrons, matching
586  h_ele_EoP ->Write();
587 // h_ele_EoPout->Write();
588  h_ele_EeleOPout->Write();
589  h_ele_dEtaSc_propVtx->Write();
590  h_ele_dPhiSc_propVtx->Write();
591  h_ele_dEtaCl_propOut->Write();
592  h_ele_dPhiCl_propOut->Write();
593  h_ele_dEtaEleCl_propOut->Write();
594  h_ele_dPhiEleCl_propOut->Write();
595  h_ele_HoE->Write();
596 
597 
598 
599  h_ele_mee_os-> GetXaxis()-> SetTitle("m_{e^{+}e^{-}} (GeV/c^{2})");
600  h_ele_mee_os-> GetYaxis()-> SetTitle("Events");
601  h_ele_mee_os->Write();
602 
603  // classes
604 
605  // fbrem
606 
607  // Eff
608  h_ele_etaEff->Write();
609  h_ele_zEff->Write();
610  h_ele_phiEff->Write();
611  h_ele_absetaEff->Write();
612  h_ele_ptEff->Write();
613 
614 
615  // e/g et pflow electrons
616  h_ele_mva->Write();
617  h_ele_provenance->Write();
618 
619  // isolation
620  h_ele_tkSumPt_dr03->GetXaxis()->SetTitle("TkIsoSum, cone 0.3 (GeV/c)");
621  h_ele_tkSumPt_dr03->GetYaxis()->SetTitle("Events");
622  h_ele_ecalRecHitSumEt_dr03->GetXaxis()->SetTitle("EcalIsoSum, cone 0.3 (GeV)");
623  h_ele_ecalRecHitSumEt_dr03->GetYaxis()->SetTitle("Events");
624  h_ele_hcalDepth1TowerSumEt_dr03->GetXaxis()->SetTitle("Hcal1IsoSum, cone 0.3 (GeV)");
625  h_ele_hcalDepth1TowerSumEt_dr03->GetYaxis()->SetTitle("Events");
626  h_ele_hcalDepth2TowerSumEt_dr03->GetXaxis()->SetTitle("Hcal2IsoSum, cone 0.3 (GeV)");
627  h_ele_hcalDepth2TowerSumEt_dr03->GetYaxis()->SetTitle("Events");
628  h_ele_tkSumPt_dr04->GetXaxis()->SetTitle("TkIsoSum, cone 0.4 (GeV/c)");
629  h_ele_tkSumPt_dr04->GetYaxis()->SetTitle("Events");
630  h_ele_ecalRecHitSumEt_dr04->GetXaxis()->SetTitle("EcalIsoSum, cone 0.4 (GeV)");
631  h_ele_ecalRecHitSumEt_dr04->GetYaxis()->SetTitle("Events");
632  h_ele_hcalDepth1TowerSumEt_dr04->GetXaxis()->SetTitle("Hcal1IsoSum, cone 0.4 (GeV)");
633  h_ele_hcalDepth1TowerSumEt_dr04->GetYaxis()->SetTitle("Events");
634  h_ele_hcalDepth2TowerSumEt_dr04->GetXaxis()->SetTitle("Hcal2IsoSum, cone 0.4 (GeV)");
635  h_ele_hcalDepth2TowerSumEt_dr04->GetYaxis()->SetTitle("Events");
636 
637  h_ele_tkSumPt_dr03->Write();
638  h_ele_ecalRecHitSumEt_dr03->Write();
639  h_ele_hcalDepth1TowerSumEt_dr03->Write();
640  h_ele_hcalDepth2TowerSumEt_dr03->Write();
641  h_ele_tkSumPt_dr04->Write();
642  h_ele_ecalRecHitSumEt_dr04->Write();
643  h_ele_hcalDepth1TowerSumEt_dr04->Write();
644  h_ele_hcalDepth2TowerSumEt_dr04->Write();
645 
646  }
647 
648 
649 void
651  {
652  edm::LogInfo("DQMAnalyzer::analyze")<<"Treating event "<<iEvent.id() ;
653  nEvents_++ ;
654  if (!trigger(iEvent)) return ;
655  nAfterTrigger_++ ;
656  edm::LogInfo("DQMAnalyzer::analyze")<<"Trigger OK" ;
658  iEvent.getByLabel(electronCollection_,gsfElectrons);
659  edm::LogInfo("DQMAnalyzer::analyze")<<"Event has "<<gsfElectrons.product()->size()<<" electrons" ;
661  iEvent.getByLabel(matchingObjectCollection_,recoClusters);
662  edm::Handle<reco::BeamSpot> recoBeamSpotHandle;
663  iEvent.getByType(recoBeamSpotHandle);
664  const reco::BeamSpot bs = *recoBeamSpotHandle;
665  histNum_->Fill((*gsfElectrons).size());
666 
667  // selected rec electrons
668  reco::GsfElectronCollection::const_iterator gsfIter ;
669  for
670  ( gsfIter=gsfElectrons->begin() ;
671  gsfIter!=gsfElectrons->end();
672  gsfIter++ )
673  {
674  // vertex TIP
675  double vertexTIP =
676  (gsfIter->vertex().x()-bs.position().x()) * (gsfIter->vertex().x()-bs.position().x()) +
677  (gsfIter->vertex().y()-bs.position().y()) * (gsfIter->vertex().y()-bs.position().y()) ;
678  vertexTIP = sqrt(vertexTIP) ;
679 
680  // select electrons
681  if (!selected(gsfIter,vertexTIP)) continue ;
682 
683  // electron related distributions
684  h_ele_charge->Fill( gsfIter->charge() );
685  //h_ele_vertexP->Fill( gsfIter->p() );
686  h_ele_vertexPt->Fill( gsfIter->pt() );
687  h_ele_Et->Fill( gsfIter->superCluster()->energy()/cosh( gsfIter->superCluster()->eta()) );
688  h_ele_vertexEta->Fill( gsfIter->eta() );
689  h_ele_vertexPhi->Fill( gsfIter->phi() );
690  h_ele_vertexX->Fill( gsfIter->vertex().x() );
691  h_ele_vertexY->Fill( gsfIter->vertex().y() );
692  h_ele_vertexZ->Fill( gsfIter->vertex().z() );
693  h_ele_vertexTIP->Fill( vertexTIP );
694 
695  // supercluster related distributions
696  reco::SuperClusterRef sclRef = gsfIter->superCluster() ;
697  // ALREADY DONE IN GSF ELECTRON CORE
698  // if (!gsfIter->ecalDrivenSeed()&&gsfIter->trackerDrivenSeed())
699  // sclRef = gsfIter->pflowSuperCluster() ;
700  histSclEn_->Fill(sclRef->energy());
701  double R=TMath::Sqrt(sclRef->x()*sclRef->x() + sclRef->y()*sclRef->y() +sclRef->z()*sclRef->z());
702  double Rt=TMath::Sqrt(sclRef->x()*sclRef->x() + sclRef->y()*sclRef->y());
703  histSclEt_->Fill(sclRef->energy()*(Rt/R));
704  histSclEta_->Fill(sclRef->eta());
705  histSclPhi_->Fill(sclRef->phi());
706  histSclSigEtaEta_->Fill(gsfIter->scSigmaEtaEta());
707 
708  // track related distributions
709  h_ele_ambiguousTracks->Fill( gsfIter->ambiguousGsfTracksSize() );
710  h_ele_ambiguousTracksVsEta->Fill( gsfIter->eta(), gsfIter->ambiguousGsfTracksSize() );
711  h_ele_ambiguousTracksVsPhi->Fill( gsfIter->phi(), gsfIter->ambiguousGsfTracksSize() );
712  h_ele_ambiguousTracksVsPt->Fill( gsfIter->pt(), gsfIter->ambiguousGsfTracksSize() );
713  if (!readAOD_)
714  { // track extra does not exist in AOD
715  h_ele_foundHits->Fill( gsfIter->gsfTrack()->numberOfValidHits() );
716  h_ele_foundHitsVsEta->Fill( gsfIter->eta(), gsfIter->gsfTrack()->numberOfValidHits() );
717  h_ele_foundHitsVsPhi->Fill( gsfIter->phi(), gsfIter->gsfTrack()->numberOfValidHits() );
718  h_ele_foundHitsVsPt->Fill( gsfIter->pt(), gsfIter->gsfTrack()->numberOfValidHits() );
719  h_ele_lostHits->Fill( gsfIter->gsfTrack()->numberOfLostHits() );
720  h_ele_lostHitsVsEta->Fill( gsfIter->eta(), gsfIter->gsfTrack()->numberOfLostHits() );
721  h_ele_lostHitsVsPhi->Fill( gsfIter->phi(), gsfIter->gsfTrack()->numberOfLostHits() );
722  h_ele_lostHitsVsPt->Fill( gsfIter->pt(), gsfIter->gsfTrack()->numberOfLostHits() );
723  h_ele_chi2->Fill( gsfIter->gsfTrack()->normalizedChi2() );
724  h_ele_chi2VsEta->Fill( gsfIter->eta(), gsfIter->gsfTrack()->normalizedChi2() );
725  h_ele_chi2VsPhi->Fill( gsfIter->phi(), gsfIter->gsfTrack()->normalizedChi2() );
726  h_ele_chi2VsPt->Fill( gsfIter->pt(), gsfIter->gsfTrack()->normalizedChi2() );
727  }
728 
729  // from gsf track interface, hence using mean
730  if (!readAOD_)
731  { // track extra does not exist in AOD
732  h_ele_PinMnPout->Fill( gsfIter->gsfTrack()->innerMomentum().R() - gsfIter->gsfTrack()->outerMomentum().R() );
733  h_ele_outerP->Fill( gsfIter->gsfTrack()->outerMomentum().R() );
734  h_ele_outerPt->Fill( gsfIter->gsfTrack()->outerMomentum().Rho() );
735  }
736 
737  // from electron interface, hence using mode
738  h_ele_PinMnPout_mode->Fill( gsfIter->trackMomentumAtVtx().R() - gsfIter->trackMomentumOut().R() );
739  h_ele_outerP_mode->Fill( gsfIter->trackMomentumOut().R() );
740  h_ele_outerPt_mode->Fill( gsfIter->trackMomentumOut().Rho() );
741 
742  /*
743  if (!readAOD_) { // track extra does not exist in AOD
744  edm::RefToBase<TrajectorySeed> seed = gsfIter->gsfTrack()->extra()->seedRef();
745  ElectronSeedRef elseed=seed.castTo<ElectronSeedRef>();
746  h_ele_seed_dphi2_-> Fill(elseed->dPhi2());
747  h_ele_seed_dphi2VsEta_-> Fill(gsfIter->eta(), elseed->dPhi2());
748  h_ele_seed_dphi2VsPt_-> Fill(gsfIter->pt(), elseed->dPhi2()) ;
749  h_ele_seed_drz2_-> Fill(elseed->dRz2());
750  h_ele_seed_drz2VsEta_-> Fill(gsfIter->eta(), elseed->dRz2());
751  h_ele_seed_drz2VsPt_-> Fill(gsfIter->pt(), elseed->dRz2());
752  h_ele_seed_subdet2_-> Fill(elseed->subDet2());
753  }
754  */
755 
756  // match distributions
757  h_ele_EoP->Fill( gsfIter->eSuperClusterOverP() );
758  h_ele_EeleOPout->Fill( gsfIter->eEleClusterOverPout() );
759  h_ele_dEtaSc_propVtx->Fill(gsfIter->deltaEtaSuperClusterTrackAtVtx());
760  h_ele_dPhiSc_propVtx->Fill(gsfIter->deltaPhiSuperClusterTrackAtVtx());
761  h_ele_dEtaCl_propOut->Fill(gsfIter->deltaEtaSeedClusterTrackAtCalo());
762  h_ele_dPhiCl_propOut->Fill(gsfIter->deltaPhiSeedClusterTrackAtCalo());
763  h_ele_dEtaEleCl_propOut->Fill(gsfIter->deltaEtaEleClusterTrackAtCalo());
764  h_ele_dPhiEleCl_propOut->Fill(gsfIter->deltaPhiEleClusterTrackAtCalo());
765  h_ele_HoE->Fill(gsfIter->hadronicOverEm());
766 
767  //classes
768 
769  //fbrem
770 
771  h_ele_mva->Fill(gsfIter->mva()) ;
772  if (gsfIter->ecalDrivenSeed()) h_ele_provenance->Fill(1.) ;
773  if (gsfIter->trackerDrivenSeed()) h_ele_provenance->Fill(-1.) ;
774  if (gsfIter->trackerDrivenSeed()||gsfIter->ecalDrivenSeed()) h_ele_provenance->Fill(0.);
775  if (gsfIter->trackerDrivenSeed()&&!gsfIter->ecalDrivenSeed()) h_ele_provenance->Fill(-2.);
776  if (!gsfIter->trackerDrivenSeed()&&gsfIter->ecalDrivenSeed()) h_ele_provenance->Fill(2.);
777 
778  h_ele_tkSumPt_dr03->Fill(gsfIter->dr03TkSumPt());
779  h_ele_ecalRecHitSumEt_dr03->Fill(gsfIter->dr03EcalRecHitSumEt());
780  h_ele_hcalDepth1TowerSumEt_dr03->Fill(gsfIter->dr03HcalDepth1TowerSumEt());
781  h_ele_hcalDepth2TowerSumEt_dr03->Fill(gsfIter->dr03HcalDepth2TowerSumEt());
782  h_ele_tkSumPt_dr04->Fill(gsfIter->dr04TkSumPt());
783  h_ele_ecalRecHitSumEt_dr04->Fill(gsfIter->dr04EcalRecHitSumEt());
784  h_ele_hcalDepth1TowerSumEt_dr04->Fill(gsfIter->dr04HcalDepth1TowerSumEt());
785  h_ele_hcalDepth2TowerSumEt_dr04->Fill(gsfIter->dr04HcalDepth2TowerSumEt());
786  }
787 
788  // association matching object-reco electrons
789  int matchingObjectNum=0 ;
790  reco::SuperClusterCollection::const_iterator moIter ;
791  for
792  ( moIter=recoClusters->begin() ;
793  moIter!=recoClusters->end() ;
794  moIter++ )
795  {
796  // number of matching objects
797  matchingObjectNum++;
798 
799  if
800  ( moIter->energy()/cosh(moIter->eta())>maxPtMatchingObject_ ||
801  fabs(moIter->eta())> maxAbsEtaMatchingObject_ )
802  { continue ; }
803 
804  // suppress the endcaps
805  //if (fabs(moIter->eta()) > 1.5) continue;
806  // select central z
807  //if ( fabs((*mcIter)->production_vertex()->position().z())>50.) continue;
808 
809  h_matchingObjectEta->Fill( moIter->eta() );
810  h_matchingObjectAbsEta->Fill( fabs(moIter->eta()) );
811  h_matchingObjectP->Fill( moIter->energy() );
812  h_matchingObjectPt->Fill( moIter->energy()/cosh(moIter->eta()) );
813  h_matchingObjectPhi->Fill( moIter->phi() );
814  h_matchingObjectZ->Fill( moIter->z() );
815 
816  // find best matched electron
817  bool okGsfFound = false;
818  double gsfOkRatio = 999999.;
819  reco::GsfElectron bestGsfElectron ;
820  reco::GsfElectronCollection::const_iterator gsfIter ;
821  for
822  ( gsfIter=gsfElectrons->begin() ;
823  gsfIter!=gsfElectrons->end() ;
824  gsfIter++ )
825  {
826  double vertexTIP =
827  (gsfIter->vertex().x()-bs.position().x()) * (gsfIter->vertex().x()-bs.position().x()) +
828  (gsfIter->vertex().y()-bs.position().y()) * (gsfIter->vertex().y()-bs.position().y()) ;
829  vertexTIP = sqrt(vertexTIP) ;
830 
831  // select electrons
832  if (!selected(gsfIter,vertexTIP)) continue ;
833 
834  if (Selection_ >= 4)
835  {
836  reco::GsfElectronCollection::const_iterator gsfIter2 ;
837  for
838  ( gsfIter2=gsfIter+1 ;
839  gsfIter2!=gsfElectrons->end() ;
840  gsfIter2++ )
841  {
842  math::XYZTLorentzVector p12 = (*gsfIter).p4()+(*gsfIter2).p4() ;
843  float mee2 = p12.Dot(p12) ;
844  bool opsign = (gsfIter->charge()*gsfIter2->charge()<0.) ;
845  float invMass = sqrt(mee2) ;
846 
847  if (TPchecksign_ && !opsign) break ;
848 
849  // conditions Tag
850  if(TAGcheckclass_ && (gsfIter->classification()==GsfElectron::SHOWERING || gsfIter->isGap())) break;
851 
852  // conditions Probe
853  if(PROBEetcut_ && (gsfIter2->superCluster()->energy()/cosh(gsfIter2->superCluster()->eta())<minEt_)) continue;
854  if(PROBEcheckclass_ && (gsfIter2->classification()==GsfElectron::SHOWERING || gsfIter2->isGap())) continue;
855 
856  if( invMass < massLow_ || invMass > massHigh_ ) continue ;
857 
858  h_ele_mee_os->Fill(invMass) ;
859  bestGsfElectron =* gsfIter2 ;
860  okGsfFound = true ;
861  }
862  }
863  else
864  {
865  reco::GsfElectronCollection::const_iterator gsfIter2 ;
866  for
867  ( gsfIter2=gsfIter+1;
868  gsfIter2!=gsfElectrons->end() ;
869  gsfIter2++ )
870  {
871  math::XYZTLorentzVector p12 = (*gsfIter).p4()+(*gsfIter2).p4() ;
872  float mee2 = p12.Dot(p12) ;
873  //bool opsign = (gsfIter->charge()*gsfIter2->charge()<0.) ;
874  float invMass = sqrt(mee2) ;
875  h_ele_mee_os->Fill(invMass) ;
876  }
877 
878  // matching with a cone in eta phi
879  if ( matchingCondition_ == "Cone" )
880  {
881  double dphi = gsfIter->phi()-moIter->phi() ;
882  if (fabs(dphi)>CLHEP::pi)
883  { dphi = dphi < 0? (CLHEP::twopi) + dphi : dphi - CLHEP::twopi ; }
884  double deltaR = sqrt(std::pow((moIter->eta()-gsfIter->eta()),2) + std::pow(dphi,2)) ;
885  if ( deltaR < deltaR_ )
886  {
887  //if ( (genPc->pdg_id() == 11) && (gsfIter->charge() < 0.) || (genPc->pdg_id() == -11) &&
888  //(gsfIter->charge() > 0.) ){
889  double tmpGsfRatio = gsfIter->p()/moIter->energy();
890  if ( fabs(tmpGsfRatio-1) < fabs(gsfOkRatio-1) && Selection_ != 4 )
891  {
892  gsfOkRatio = tmpGsfRatio;
893  bestGsfElectron=*gsfIter;
894  okGsfFound = true;
895  }
896  //}
897  }
898  }
899  }
900  } // loop over rec ele to look for the best one
901 
902  // analysis when the matching object is matched by a rec electron
903  if (okGsfFound)
904  {
905  // generated distributions for matched electrons
906  h_ele_matchingObjectPt_matched->Fill( moIter->energy()/cosh(moIter->eta()) );
907  h_ele_matchingObjectPhi_matched->Fill( moIter->phi() );
908  h_ele_matchingObjectAbsEta_matched->Fill( fabs(moIter->eta()) );
909  h_ele_matchingObjectEta_matched->Fill( moIter->eta() );
910  h_ele_matchingObjectZ_matched->Fill( moIter->z() );
911 
912 // OBSOLETE
913  // // comparison electron vs matching object
914 // h_ele_EtaMnEtamatchingObject_matched->Fill( bestGsfElectron.eta()-moIter->eta());
915 //
916 // h_ele_PhiMnPhimatchingObject_matched->Fill( bestGsfElectron.phi()-moIter->phi());
917 // h_ele_PhiMnPhimatchingObject2_matched->Fill( bestGsfElectron.phi()-moIter->phi());
918 //
919 // h_ele_PoPmatchingObject_matched->Fill( bestGsfElectron.p()/moIter->energy());
920 // h_ele_PtoPtmatchingObject_matched->Fill( bestGsfElectron.pt()/moIter->energy()/cosh(moIter->eta()));
921 //
922 // if (bestGsfElectron.isEB()) h_ele_PoPmatchingObject_barrel_matched->Fill( bestGsfElectron.p()/moIter->energy());
923 // if (bestGsfElectron.isEE()) h_ele_PoPmatchingObject_endcaps_matched->Fill( bestGsfElectron.p()/moIter->energy());
924 // if (bestGsfElectron.isEB()) h_ele_PtoPtmatchingObject_barrel_matched->Fill( bestGsfElectron.pt()/moIter->energy()/cosh(moIter->eta()));
925 // if (bestGsfElectron.isEE()) h_ele_PtoPtmatchingObject_endcaps_matched->Fill( bestGsfElectron.pt()/moIter->energy()/cosh(moIter->eta()));
926 
927  reco::SuperClusterRef sclRef = bestGsfElectron.superCluster() ;
928 
929  // add here distributions for matched electrons as for all electrons
930  //..
931  } // gsf electron found
932 
933  } // loop overmatching object
934 
935  h_matchingObjectNum->Fill(matchingObjectNum) ;
936 
937  }
938 
940  {
941  // retreive TriggerResults from the event
943  e.getByLabel(triggerResults_,triggerResults) ;
944 
945  bool accept = false ;
946 
947  if (triggerResults.isValid())
948  {
949  //std::cout << "TriggerResults found, number of HLT paths: " << triggerResults->size() << std::endl;
950 
951  // get trigger names
952  const edm::TriggerNames & triggerNames = e.triggerNames(*triggerResults);
953  if (nEvents_==1)
954  {
955  for (unsigned int i=0; i<triggerNames.size(); i++)
956  {
957 // std::cout << "trigger path= " << triggerNames.triggerName(i) << std::endl;
958  }
959  }
960 
961  unsigned int n = HLTPathsByName_.size() ;
962  for (unsigned int i=0; i!=n; i++)
963  {
964  HLTPathsByIndex_[i]=triggerNames.triggerIndex(HLTPathsByName_[i]) ;
965  }
966 
967  // empty input vectors (n==0) means any trigger paths
968  if (n==0)
969  {
970  n=triggerResults->size() ;
971  HLTPathsByName_.resize(n) ;
972  HLTPathsByIndex_.resize(n) ;
973  for ( unsigned int i=0 ; i!=n ; i++)
974  {
975  HLTPathsByName_[i]=triggerNames.triggerName(i) ;
976  HLTPathsByIndex_[i]=i ;
977  }
978  }
979 
980 // if (nEvents_==1)
981 // {
982 // if (n>0)
983 // {
984 // std::cout << "HLT trigger paths requested: index, name and valididty:" << std::endl;
985 // for (unsigned int i=0; i!=n; i++)
986 // {
987 // bool validity = HLTPathsByIndex_[i]<triggerResults->size();
988 // std::cout
989 // << " " << HLTPathsByIndex_[i]
990 // << " " << HLTPathsByName_[i]
991 // << " " << validity << std::endl;
992 // }
993 // }
994 // }
995 
996  // count number of requested HLT paths which have fired
997  unsigned int fired=0 ;
998  for ( unsigned int i=0 ; i!=n ; i++ )
999  {
1000  if (HLTPathsByIndex_[i]<triggerResults->size())
1001  {
1002  if (triggerResults->accept(HLTPathsByIndex_[i]))
1003  {
1004  fired++ ;
1005  //std::cout << "Fired HLT path= " << HLTPathsByName_[i] << std::endl ;
1006  accept = true ;
1007  }
1008  }
1009  }
1010 
1011  }
1012 
1013  return accept ;
1014  }
1015 
1016 bool DQMAnalyzer::selected( const reco::GsfElectronCollection::const_iterator & gsfIter , double vertexTIP )
1017  {
1018  if ((Selection_>0)&&generalCut(gsfIter)) return false ;
1019  if ((Selection_>=1)&&etCut(gsfIter)) return false ;
1020  if ((Selection_>=2)&&isolationCut(gsfIter,vertexTIP)) return false ;
1021  if ((Selection_>=3)&&idCut(gsfIter)) return false ;
1022  return true ;
1023  }
1024 
1025 bool DQMAnalyzer::generalCut( const reco::GsfElectronCollection::const_iterator & gsfIter)
1026  {
1027  if (fabs(gsfIter->eta())>maxAbsEta_) return true ;
1028  if (gsfIter->pt()<minPt_) return true ;
1029 
1030  if (gsfIter->isEB() && isEE_) return true ;
1031  if (gsfIter->isEE() && isEB_) return true ;
1032  if (gsfIter->isEBEEGap() && isNotEBEEGap_) return true ;
1033 
1034  if (gsfIter->ecalDrivenSeed() && isTrackerDriven_) return true ;
1035  if (gsfIter->trackerDrivenSeed() && isEcalDriven_) return true ;
1036 
1037  return false ;
1038  }
1039 
1040 bool DQMAnalyzer::etCut( const reco::GsfElectronCollection::const_iterator & gsfIter )
1041  {
1042  if (gsfIter->superCluster()->energy()/cosh(gsfIter->superCluster()->eta())<minEt_) return true ;
1043 
1044  return false ;
1045  }
1046 
1047 bool DQMAnalyzer::isolationCut( const reco::GsfElectronCollection::const_iterator & gsfIter, double vertexTIP )
1048  {
1049  if (gsfIter->isEB() && vertexTIP > tipMaxBarrel_) return true ;
1050  if (gsfIter->isEE() && vertexTIP > tipMaxEndcaps_) return true ;
1051 
1052  if (gsfIter->dr03TkSumPt() > tkIso03Max_) return true ;
1053  if (gsfIter->isEB() && gsfIter->dr03HcalDepth1TowerSumEt() > hcalIso03Depth1MaxBarrel_) return true ;
1054  if (gsfIter->isEE() && gsfIter->dr03HcalDepth1TowerSumEt() > hcalIso03Depth1MaxEndcaps_) return true ;
1055  if (gsfIter->isEE() && gsfIter->dr03HcalDepth2TowerSumEt() > hcalIso03Depth2MaxEndcaps_) return true ;
1056  if (gsfIter->isEB() && gsfIter->dr03EcalRecHitSumEt() > ecalIso03MaxBarrel_) return true ;
1057  if (gsfIter->isEE() && gsfIter->dr03EcalRecHitSumEt() > ecalIso03MaxEndcaps_) return true ;
1058 
1059  return false ;
1060  }
1061 
1062 bool DQMAnalyzer::idCut( const reco::GsfElectronCollection::const_iterator & gsfIter )
1063  {
1064  if (gsfIter->isEB() && gsfIter->eSuperClusterOverP() < eOverPMinBarrel_) return true ;
1065  if (gsfIter->isEB() && gsfIter->eSuperClusterOverP() > eOverPMaxBarrel_) return true ;
1066  if (gsfIter->isEE() && gsfIter->eSuperClusterOverP() < eOverPMinEndcaps_) return true ;
1067  if (gsfIter->isEE() && gsfIter->eSuperClusterOverP() > eOverPMaxEndcaps_) return true ;
1068  if (gsfIter->isEB() && fabs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) < dEtaMinBarrel_) return true ;
1069  if (gsfIter->isEB() && fabs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) > dEtaMaxBarrel_) return true ;
1070  if (gsfIter->isEE() && fabs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) < dEtaMinEndcaps_) return true ;
1071  if (gsfIter->isEE() && fabs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) > dEtaMaxEndcaps_) return true ;
1072  if (gsfIter->isEB() && fabs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) < dPhiMinBarrel_) return true ;
1073  if (gsfIter->isEB() && fabs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) > dPhiMaxBarrel_) return true ;
1074  if (gsfIter->isEE() && fabs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) < dPhiMinEndcaps_) return true ;
1075  if (gsfIter->isEE() && fabs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) > dPhiMaxEndcaps_) return true ;
1076  if (gsfIter->isEB() && gsfIter->scSigmaIEtaIEta() < sigIetaIetaMinBarrel_) return true ;
1077  if (gsfIter->isEB() && gsfIter->scSigmaIEtaIEta() > sigIetaIetaMaxBarrel_) return true ;
1078  if (gsfIter->isEE() && gsfIter->scSigmaIEtaIEta() < sigIetaIetaMinEndcaps_) return true ;
1079  if (gsfIter->isEE() && gsfIter->scSigmaIEtaIEta() > sigIetaIetaMaxEndcaps_) return true ;
1080  if (gsfIter->isEB() && gsfIter->hadronicOverEm() > hadronicOverEmMaxBarrel_) return true ;
1081  if (gsfIter->isEE() && gsfIter->hadronicOverEm() > hadronicOverEmMaxEndcaps_) return true ;
1082 
1083  return false ;
1084  }
1085 
type
Definition: HCALResponse.h:22
bool trigger(const edm::Event &e)
Definition: DQMAnalyzer.cc:939
T getParameter(std::string const &) const
int i
Definition: DBlmapReader.cc:9
virtual ~DQMAnalyzer()
Definition: DQMAnalyzer.cc:177
virtual edm::TriggerNames const & triggerNames(edm::TriggerResults const &triggerResults) const
Definition: Event.cc:199
virtual void beginJob()
Definition: DQMAnalyzer.cc:187
bool generalCut(const reco::GsfElectronCollection::const_iterator &gsfIter)
double deltaR_
bool getByType(Handle< PROD > &result) const
Definition: Event.h:398
Strings::size_type size() const
Definition: TriggerNames.cc:39
bool accept(const edm::Event &event, const edm::TriggerResults &triggerTable, const std::string &triggerPath)
Definition: TopDQMHelpers.h:22
uint16_t size_type
double deltaR(double eta1, double phi1, double eta2, double phi2)
Definition: deltaR.h:19
bool selected(const reco::GsfElectronCollection::const_iterator &gsfIter, double vertexTIP)
const Double_t pi
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:30
int iEvent
Definition: GenABIO.cc:243
unsigned int triggerIndex(std::string const &name) const
Definition: TriggerNames.cc:32
T sqrt(T t)
Definition: SSEVec.h:46
virtual SuperClusterRef superCluster() const
reference to a SuperCluster
Definition: GsfElectron.h:168
bool isolationCut(const reco::GsfElectronCollection::const_iterator &gsfIter, double vertexTIP)
bool idCut(const reco::GsfElectronCollection::const_iterator &gsfIter)
bool isValid() const
Definition: HandleBase.h:76
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:356
virtual void analyze(const edm::Event &e, const edm::EventSetup &c)
Definition: DQMAnalyzer.cc:650
bool etCut(const reco::GsfElectronCollection::const_iterator &gsfIter)
tuple conf
Definition: dbtoconf.py:185
std::string const & triggerName(unsigned int index) const
Definition: TriggerNames.cc:27
T const * product() const
Definition: Handle.h:74
edm::EventID id() const
Definition: EventBase.h:56
tuple cout
Definition: gather_cfg.py:121
const Point & position() const
position
Definition: BeamSpot.h:63
DQMAnalyzer(const edm::ParameterSet &conf)
Definition: DQMAnalyzer.cc:58
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
virtual void endJob()
Definition: DQMAnalyzer.cc:449