CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
ElectronAnalyzer.cc
Go to the documentation of this file.
2 
4 
13 
20 //#include "FWCore/Framework/interface/EDAnalyzer.h"
22 
23 #include "CLHEP/Units/GlobalPhysicalConstants.h"
24 #include "TMath.h"
25 
26 #include <iostream>
27 
28 using namespace reco ;
29 
32  {
33  // general, collections
34  Selection_ = conf.getParameter<int>("Selection");
35  electronCollection_ = conf.getParameter<edm::InputTag>("ElectronCollection");
36  matchingObjectCollection_ = conf.getParameter<edm::InputTag>("MatchingObjectCollection");
37  trackCollection_ = conf.getParameter<edm::InputTag>("TrackCollection");
38  vertexCollection_ = conf.getParameter<edm::InputTag>("VertexCollection");
39  gsftrackCollection_ = conf.getParameter<edm::InputTag>("GsfTrackCollection");
40  beamSpotTag_ = conf.getParameter<edm::InputTag>("BeamSpot");
41  readAOD_ = conf.getParameter<bool>("ReadAOD");
42 
43  // matching
44  matchingCondition_ = conf.getParameter<std::string>("MatchingCondition");
45  assert (matchingCondition_=="Cone") ;
46  maxPtMatchingObject_ = conf.getParameter<double>("MaxPtMatchingObject");
47  maxAbsEtaMatchingObject_ = conf.getParameter<double>("MaxAbsEtaMatchingObject");
48  deltaR_ = conf.getParameter<double>("DeltaR");
49 
50  // electron selection
51  minEt_ = conf.getParameter<double>("MinEt");
52  minPt_ = conf.getParameter<double>("MinPt");
53  maxAbsEta_ = conf.getParameter<double>("MaxAbsEta");
54  isEB_ = conf.getParameter<bool>("SelectEb");
55  isEE_ = conf.getParameter<bool>("SelectEe");
56  isNotEBEEGap_ = conf.getParameter<bool>("SelectNotEbEeGap");
57  isEcalDriven_ = conf.getParameter<bool>("SelectEcalDriven");
58  isTrackerDriven_ = conf.getParameter<bool>("SelectTrackerDriven");
59  eOverPMinBarrel_ = conf.getParameter<double>("MinEopBarrel");
60  eOverPMaxBarrel_ = conf.getParameter<double>("MaxEopBarrel");
61  eOverPMinEndcaps_ = conf.getParameter<double>("MinEopEndcaps");
62  eOverPMaxEndcaps_ = conf.getParameter<double>("MaxEopEndcaps");
63  dEtaMinBarrel_ = conf.getParameter<double>("MinDetaBarrel");
64  dEtaMaxBarrel_ = conf.getParameter<double>("MaxDetaBarrel");
65  dEtaMinEndcaps_ = conf.getParameter<double>("MinDetaEndcaps");
66  dEtaMaxEndcaps_ = conf.getParameter<double>("MaxDetaEndcaps");
67  dPhiMinBarrel_ = conf.getParameter<double>("MinDphiBarrel");
68  dPhiMaxBarrel_ = conf.getParameter<double>("MaxDphiBarrel");
69  dPhiMinEndcaps_ = conf.getParameter<double>("MinDphiEndcaps");
70  dPhiMaxEndcaps_ = conf.getParameter<double>("MaxDphiEndcaps");
71  sigIetaIetaMinBarrel_ = conf.getParameter<double>("MinSigIetaIetaBarrel");
72  sigIetaIetaMaxBarrel_ = conf.getParameter<double>("MaxSigIetaIetaBarrel");
73  sigIetaIetaMinEndcaps_ = conf.getParameter<double>("MinSigIetaIetaEndcaps");
74  sigIetaIetaMaxEndcaps_ = conf.getParameter<double>("MaxSigIetaIetaEndcaps");
75  hadronicOverEmMaxBarrel_ = conf.getParameter<double>("MaxHoeBarrel");
76  hadronicOverEmMaxEndcaps_ = conf.getParameter<double>("MaxHoeEndcaps");
77  mvaMin_ = conf.getParameter<double>("MinMva");
78  tipMaxBarrel_ = conf.getParameter<double>("MaxTipBarrel");
79  tipMaxEndcaps_ = conf.getParameter<double>("MaxTipEndcaps");
80  tkIso03Max_ = conf.getParameter<double>("MaxTkIso03");
81  hcalIso03Depth1MaxBarrel_ = conf.getParameter<double>("MaxHcalIso03Depth1Barrel");
82  hcalIso03Depth1MaxEndcaps_ = conf.getParameter<double>("MaxHcalIso03Depth1Endcaps");
83  hcalIso03Depth2MaxEndcaps_ = conf.getParameter<double>("MaxHcalIso03Depth2Endcaps");
84  ecalIso03MaxBarrel_ = conf.getParameter<double>("MaxEcalIso03Barrel");
85  ecalIso03MaxEndcaps_ = conf.getParameter<double>("MaxEcalIso03Endcaps");
86 
87  // for trigger
88  triggerResults_ = conf.getParameter<edm::InputTag>("TriggerResults");
89 // HLTPathsByName_= conf.getParameter<std::vector<std::string > >("HltPaths");
90 // HLTPathsByIndex_.resize(HLTPathsByName_.size());
91 
92  // histos limits and binning
93  nbineta=conf.getParameter<int>("NbinEta");
94  nbineta2D=conf.getParameter<int>("NbinEta2D");
95  etamin=conf.getParameter<double>("EtaMin");
96  etamax=conf.getParameter<double>("EtaMax");
97  //
98  nbinphi=conf.getParameter<int>("NbinPhi");
99  nbinphi2D=conf.getParameter<int>("NbinPhi2D");
100  phimin=conf.getParameter<double>("PhiMin");
101  phimax=conf.getParameter<double>("PhiMax");
102  //
103  nbinpt=conf.getParameter<int>("NbinPt");
104  nbinpteff=conf.getParameter<int>("NbinPtEff");
105  nbinpt2D=conf.getParameter<int>("NbinPt2D");
106  ptmax=conf.getParameter<double>("PtMax");
107  //
108  nbinp=conf.getParameter<int>("NbinP");
109  nbinp2D=conf.getParameter<int>("NbinP2D");
110  pmax=conf.getParameter<double>("PMax");
111  //
112  nbineop=conf.getParameter<int>("NbinEop");
113  nbineop2D=conf.getParameter<int>("NbinEop2D");
114  eopmax=conf.getParameter<double>("EopMax");
115  eopmaxsht=conf.getParameter<double>("EopMaxSht");
116  //
117  nbindeta=conf.getParameter<int>("NbinDeta");
118  detamin=conf.getParameter<double>("DetaMin");
119  detamax=conf.getParameter<double>("DetaMax");
120  //
121  nbindphi=conf.getParameter<int>("NbinDphi");
122  dphimin=conf.getParameter<double>("DphiMin");
123  dphimax=conf.getParameter<double>("DphiMax");
124  //
125  nbindetamatch=conf.getParameter<int>("NbinDetaMatch");
126  nbindetamatch2D=conf.getParameter<int>("NbinDetaMatch2D");
127  detamatchmin=conf.getParameter<double>("DetaMatchMin");
128  detamatchmax=conf.getParameter<double>("DetaMatchMax");
129  //
130  nbindphimatch=conf.getParameter<int>("NbinDphiMatch");
131  nbindphimatch2D=conf.getParameter<int>("NbinDphiMatch2D");
132  dphimatchmin=conf.getParameter<double>("DphiMatchMin");
133  dphimatchmax=conf.getParameter<double>("DphiMatchMax");
134  //
135  nbinfhits=conf.getParameter<int>("NbinFhits");
136  fhitsmax=conf.getParameter<double>("FhitsMax");
137  //
138  nbinlhits=conf.getParameter<int>("NbinLhits");
139  lhitsmax=conf.getParameter<double>("LhitsMax");
140  //
141  nbinxyz=conf.getParameter<int>("NbinXyz");
142  nbinxyz2D=conf.getParameter<int>("NbinXyz2D");
143  //
144  nbinpoptrue= conf.getParameter<int>("NbinPopTrue");
145  poptruemin=conf.getParameter<double>("PopTrueMin");
146  poptruemax=conf.getParameter<double>("PopTrueMax");
147  //
148  nbinmee= conf.getParameter<int>("NbinMee");
149  meemin=conf.getParameter<double>("MeeMin");
150  meemax=conf.getParameter<double>("MeeMax");
151  //
152  nbinhoe= conf.getParameter<int>("NbinHoe");
153  hoemin=conf.getParameter<double>("HoeMin");
154  hoemax=conf.getParameter<double>("HoeMax");
155  }
156 
158  {}
159 
161  {
162  nEvents_ = 0 ;
163  //nAfterTrigger_ = 0 ;
164 
165 
166  // basic quantities
167 // h1_num_= bookH1("num","# rec electrons",20, 0.,20.,"N_{ele}");
168 // h1_vertexP = bookH1("vertexP", "ele p at vertex", nbinp,0.,pmax,"p_{vertex} (GeV/c)");
169 // h1_Et = bookH1("Et","ele SC transverse energy", nbinpt,0.,ptmax,"E_{T} (GeV)");
170 // h1_vertexTIP = bookH1("vertexTIP","ele transverse impact parameter (wrt bs)",90,0.,0.15,"TIP (cm)");
171 // h1_charge = bookH1("charge","ele charge",5,-2.,2.,"charge");
172  h1_vertexPt_barrel = bookH1("vertexPt_barrel","ele transverse momentum in barrel",nbinpt,0.,ptmax,"p_{T vertex} (GeV/c)");
173  h1_vertexPt_endcaps = bookH1("vertexPt_endcaps","ele transverse momentum in endcaps",nbinpt,0.,ptmax,"p_{T vertex} (GeV/c)");
174  h1_vertexEta = bookH1("vertexEta","ele momentum #eta",nbineta,etamin,etamax,"#eta");
175 // h1_vertexPhi = bookH1("vertexPhi","ele momentum #phi",nbinphi,phimin,phimax,"#phi (rad)");
176  h2_vertexEtaVsPhi = bookH2("vertexEtaVsPhi","ele momentum #eta vs #phi",nbineta2D,etamin,etamax,nbinphi2D,phimin,phimax,"#eta","#phi (rad)");
177 // h1_vertexX = bookH1("vertexX","ele vertex x",nbinxyz,-0.1,0.1,"x (cm)");
178 // h1_vertexY = bookH1("vertexY","ele vertex y",nbinxyz,-0.1,0.1,"y (cm)");
179  h2_vertexXvsY = bookH2("vertexXvsY","ele vertex x vs y",nbinxyz2D,-0.1,0.1,nbinxyz2D,-0.1,0.1,"x (cm)","y (cm)");
180  h1_vertexZ = bookH1("vertexZ","ele vertex z",nbinxyz,-25, 25,"z (cm)");
181 
182  // super-clusters
183 // h1_sclEn = bookH1("sclEnergy","ele supercluster energy",nbinp,0.,pmax,"E (GeV)");
184 // h1_sclEta = bookH1("sclEta","ele supercluster #eta",nbineta,etamin,etamax,"#eta");
185 // h1_sclPhi = bookH1("sclPhi","ele supercluster #phi",nbinphi,phimin,phimax,"#phi (rad)");
186  h1_sclEt = bookH1("sclEt","ele supercluster transverse energy",nbinpt,0.,ptmax,"E_{T} (GeV)");
187 
188  // electron track
189 // h1_ambiguousTracks = bookH1("ambiguousTracks","ele # ambiguous tracks", 5,0.,5.,"N_{amb. tk}");
190 // h2_ambiguousTracksVsEta = bookH2("ambiguousTracksVsEta","ele # ambiguous tracks vs #eta", nbineta2D,etamin,etamax,5,0.,5.,"#eta","N_{amb. tk}");
191 // h2_ambiguousTracksVsPhi = bookH2("ambiguousTracksVsPhi","ele # ambiguous tracks vs #phi", nbinphi2D,phimin,phimax,5,0.,5.,"#phi(rad)","N_{amb. tk}");
192 // h2_ambiguousTracksVsPt = bookH2("ambiguousTracksVsPt","ele # ambiguous tracks vs pt", nbinpt2D,0.,ptmax,5,0.,5.,"p_{T} (GeV/c),"N_{amb. tk}");
193  h1_chi2 = bookH1("chi2","ele track #chi^{2}",100,0.,15.,"#Chi^{2}");
194  py_chi2VsEta = bookP1("chi2VsEta","ele track #chi^{2} vs #eta",nbineta2D,etamin,etamax,0.,15.,"#eta","<#chi^{2}>");
195  py_chi2VsPhi = bookP1("chi2VsPhi","ele track #chi^{2} vs #phi",nbinphi2D,phimin,phimax,0.,15.,"#phi (rad)","<#chi^{2}>");
196  //h2_chi2VsPt = bookH2("chi2VsPt","ele track #chi^{2} vs pt",nbinpt2D,0.,ptmax,50,0.,15.,"p_{T} (GeV/c)","<#chi^{2}>");
197  h1_foundHits = bookH1("foundHits","ele track # found hits",nbinfhits,0.,fhitsmax,"N_{hits}");
198  py_foundHitsVsEta = bookP1("foundHitsVsEta","ele track # found hits vs #eta",nbineta2D,etamin,etamax,0.,fhitsmax,"#eta","<# hits>");
199  py_foundHitsVsPhi = bookP1("foundHitsVsPhi","ele track # found hits vs #phi",nbinphi2D,phimin,phimax,0.,fhitsmax,"#phi (rad)","<# hits>");
200 // h2_foundHitsVsPt = bookH2("foundHitsVsPt","ele track # found hits vs pt",nbinpt2D,0.,ptmax,nbinfhits,0.,fhitsmax,"p_{T} (GeV/c)","<# hits>");
201  h1_lostHits = bookH1("lostHits","ele track # lost hits",5,0.,5.,"N_{lost hits}");
202  py_lostHitsVsEta = bookP1("lostHitsVsEta","ele track # lost hits vs #eta",nbineta2D,etamin,etamax,0.,lhitsmax,"#eta","<# hits>");
203  py_lostHitsVsPhi = bookP1("lostHitsVsPhi","ele track # lost hits vs #eta",nbinphi2D,phimin,phimax,0.,lhitsmax,"#phi (rad)","<# hits>");
204 // h2_lostHitsVsPt = bookH2("lostHitsVsPt","ele track # lost hits vs #eta",nbinpt2D,0.,ptmax,nbinlhits,0.,lhitsmax,"p_{T} (GeV/c)","<# hits>");
205 
206  // electron matching and ID
207  //h1_EoPout = bookH1( "EoPout","ele E/P_{out}",nbineop,0.,eopmax,"E_{seed}/P_{out}");
208  //h1_dEtaCl_propOut = bookH1( "dEtaCl_propOut","ele #eta_{cl} - #eta_{tr}, prop from outermost",nbindetamatch,detamatchmin,detamatchmax,"#eta_{seedcl} - #eta_{tr}");
209  //h1_dPhiCl_propOut = bookH1( "dPhiCl_propOut","ele #phi_{cl} - #phi_{tr}, prop from outermost",nbindphimatch,dphimatchmin,dphimatchmax,"#phi_{seedcl} - #phi_{tr} (rad)");
210  //h1_outerP = bookH1( "outerP","ele track outer p, mean",nbinp,0.,pmax,"P_{out} (GeV/c)");
211  //h1_outerP_mode = bookH1( "outerP_mode","ele track outer p, mode",nbinp,0.,pmax,"P_{out} (GeV/c)");
212  h1_Eop_barrel = bookH1( "Eop_barrel","ele E/P_{vertex} in barrel",nbineop,0.,eopmax,"E/P_{vertex}");
213  h1_Eop_endcaps = bookH1( "Eop_endcaps","ele E/P_{vertex} in endcaps",nbineop,0.,eopmax,"E/P_{vertex}");
214  py_EopVsPhi = bookP1("EopVsPhi","ele E/P_{vertex} vs #phi",nbinphi2D,phimin,phimax,0.,eopmax,"#phi (rad)","<E/P_{vertex}>");
215 // h2_EopVsPt = bookH2("EopVsPt","ele E/P_{vertex} vs pt",nbinpt2D,0.,ptmax,nbineop,0.,eopmax,"p_{T} (GeV/c)","E/P_{vertex}");
216  h1_EeleOPout_barrel = bookH1( "EeleOPout_barrel","ele E_{ele}/P_{out} in barrel",nbineop,0.,eopmax,"E_{ele}/P_{out}");
217  h1_EeleOPout_endcaps = bookH1( "EeleOPout_endcaps","ele E_{ele}/P_{out} in endcaps",nbineop,0.,eopmax,"E_{ele}/P_{out}");
218 // h2_EeleOPoutVsPhi = bookH2("EeleOPoutVsPhi","ele E_{ele}/P_{out} vs #phi",nbinphi2D,phimin,phimax,nbineop,0.,eopmax,"#phi","E_{ele}/P_{out}");
219 // h2_EeleOPoutVsPt = bookH2("EeleOPoutVsPt","ele E_{ele}/P_{out} vs pt",nbinpt2D,0.,ptmax,nbineop,0.,eopmax,"p_{T} (GeV/c)","E_{ele}/P_{out}");
220  h1_dEtaSc_propVtx_barrel = bookH1( "dEtaSc_propVtx_barrel","ele #eta_{sc} - #eta_{tr}, prop from vertex, in barrel",nbindetamatch,detamatchmin,detamatchmax,"#eta_{sc} - #eta_{tr}");
221  h1_dEtaSc_propVtx_endcaps = bookH1( "dEtaSc_propVtx_endcaps","ele #eta_{sc} - #eta_{tr}, prop from vertex, in endcaps",nbindetamatch,detamatchmin,detamatchmax,"#eta_{sc} - #eta_{tr}");
222  py_dEtaSc_propVtxVsPhi = bookP1("dEtaSc_propVtxVsPhi","ele #eta_{sc} - #eta_{tr}, prop from vertex vs #phi",nbinphi2D,phimin,phimax,detamatchmin,detamatchmax,"#phi (rad)","<#eta_{sc} - #eta_{tr}>");
223 // h2_dEtaSc_propVtxVsPt = bookH2("dEtaSc_propVtxVsPt","ele #eta_{sc} - #eta_{tr}, prop from vertex vs pt",nbinpt2D,0.,ptmax,nbindetamatch,detamatchmin,detamatchmax,"#eta_{sc} - #eta_{tr}");
224  h1_dEtaEleCl_propOut_barrel = bookH1( "dEtaEleCl_propOut_barrel","ele #eta_{EleCl} - #eta_{tr}, prop from outermost, in barrel",nbindetamatch,detamatchmin,detamatchmax,"#eta_{elecl} - #eta_{tr}");
225  h1_dEtaEleCl_propOut_endcaps = bookH1( "dEtaEleCl_propOut_endcaps","ele #eta_{EleCl} - #eta_{tr}, prop from outermost, in endcaps",nbindetamatch,detamatchmin,detamatchmax,"#eta_{elecl} - #eta_{tr}");
226 // h2_dEtaEleCl_propOutVsPhi = bookH2("dEtaEleCl_propOutVsPhi","ele #eta_{EleCl} - #eta_{tr}, prop from outermost vs #phi",nbinphi2D,phimin,phimax,nbindetamatch,detamatchmin,detamatchmax,"#phi (rad)","#eta_{elecl} - #eta_{tr}");
227 // h2_dEtaEleCl_propOutVsPt = bookH2("dEtaEleCl_propOutVsPt","ele #eta_{EleCl} - #eta_{tr}, prop from outermost vs pt",nbinpt2D,0.,ptmax,nbindetamatch,detamatchmin,detamatchmax,"p_{T} (GeV/c)","#eta_{elecl} - #eta_{tr}");
228  h1_dPhiSc_propVtx_barrel = bookH1( "dPhiSc_propVtx_barrel","ele #phi_{sc} - #phi_{tr}, prop from vertex, in barrel",nbindphimatch,dphimatchmin,dphimatchmax,"#phi_{sc} - #phi_{tr} (rad)");
229  h1_dPhiSc_propVtx_endcaps = bookH1( "dPhiSc_propVtx_endcaps","ele #phi_{sc} - #phi_{tr}, prop from vertex, in endcaps",nbindphimatch,dphimatchmin,dphimatchmax,"#phi_{sc} - #phi_{tr} (rad)");
230  py_dPhiSc_propVtxVsPhi = bookP1("dPhiSc_propVtxVsPhi","ele #phi_{sc} - #phi_{tr}, prop from vertex vs #phi",nbinphi2D,phimin,phimax,dphimatchmin,dphimatchmax,"#phi (rad)","<#phi_{sc} - #phi_{tr}> (rad)");
231 // h2_dPhiSc_propVtxVsPt = bookH2("dPhiSc_propVtxVsPt","ele #phi_{sc} - #phi_{tr}, prop from vertex vs pt",nbinpt2D,0.,ptmax,nbindphimatch,dphimatchmin,dphimatchmax,"p_{T} (GeV/c)","#phi_{sc} - #phi_{tr} (rad)");
232  h1_dPhiEleCl_propOut_barrel = bookH1( "dPhiEleCl_propOut_barrel","ele #phi_{EleCl} - #phi_{tr}, prop from outermost, in barrel",nbindphimatch,dphimatchmin,dphimatchmax,"#phi_{elecl} - #phi_{tr} (rad)");
233  h1_dPhiEleCl_propOut_endcaps = bookH1( "dPhiEleCl_propOut_endcaps","ele #phi_{EleCl} - #phi_{tr}, prop from outermost, in endcaps",nbindphimatch,dphimatchmin,dphimatchmax,"#phi_{elecl} - #phi_{tr} (rad)");
234 // h2_dPhiEleCl_propOutVsPhi = bookH2("dPhiEleCl_propOutVsPhi","ele #phi_{EleCl} - #phi_{tr}, prop from outermost vs #phi",nbinphi2D,phimin,phimax,nbindphimatch,dphimatchmin,dphimatchmax,"#phi_{elecl} - #phi_{tr} (rad)");
235 // h2_dPhiEleCl_propOutVsPt = bookH2("dPhiEleCl_propOutVsPt","ele #phi_{EleCl} - #phi_{tr}, prop from outermost vs pt",nbinpt2D,0.,ptmax,nbindphimatch,dphimatchmin,dphimatchmax,"p_{T} (GeV/c)","#phi_{elecl} - #phi_{tr} (rad)");
236  h1_Hoe_barrel = bookH1("Hoe_barrel","ele hadronic energy / em energy, in barrel", nbinhoe, hoemin, hoemax,"H/E","Events","ELE_LOGY E1 P") ;
237  h1_Hoe_endcaps = bookH1("Hoe_endcaps","ele hadronic energy / em energy, in endcaps", nbinhoe, hoemin, hoemax,"H/E","Events","ELE_LOGY E1 P") ;
238  py_HoeVsPhi = bookP1("HoeVsPhi","ele hadronic energy / em energy vs #phi",nbinphi2D,phimin,phimax,hoemin,hoemax,"#phi (rad)","<H/E>","E1 P") ;
239 // h2_HoeVsPt = bookH2("HoeVsPt","ele hadronic energy / em energy vs pt",nbinpt2D,0.,ptmax,nbinhoe,hoemin,hoemax,"p_{T} (GeV/c)","<H/E>","ELE_LOGY COLZ") ;
240  h1_sclSigEtaEta_barrel = bookH1("sclSigEtaEta_barrel","ele supercluster sigma ieta ieta in barrel",100,0.,0.05,"sietaieta");
241  h1_sclSigEtaEta_endcaps = bookH1("sclSigEtaEta_endcaps","ele supercluster sigma ieta ieta in endcaps",100,0.,0.05,"sietaieta");
242 
243  // fbrem
244 // h1_innerPt_mean = bookH1( "innerPt_mean","ele track inner p_{T}, mean",nbinpt,0.,ptmax,"P_{T in} (GeV/c)");
245 // h1_outerPt_mean = bookH1( "outerPt_mean","ele track outer p_{T}, mean",nbinpt,0.,ptmax,"P_{T out} (GeV/c)");
246 // h1_outerPt_mode = bookH1( "outerPt_mode","ele track outer p_{T}, mode",nbinpt,0.,ptmax,"P_{T out} (GeV/c)");
247 // //h_PinMnPout_mode = bookH1( "PinMnPout_mode","ele track inner p - outer p, mode" ,nbinp,0.,100.,"P_{in} - P_{out} (GeV/c)");
248 // h1_PinMnPout = bookH1( "PinMnPout","ele track inner p - outer p, mean" ,nbinp,0.,200.,"P_{in} - P_{out} (GeV/c)");
249 // h1_PinMnPout_mode = bookH1( "PinMnPout_mode","ele track inner p - outer p, mode",nbinp,0.,100.,"P_{in} - P_{out}, mode (GeV/c)");
250  h1_fbrem = bookH1("fbrem","ele brem fraction",100,0.,1.,"P_{in} - P_{out} / P_{in}") ;
251  py_fbremVsEta = bookP1("fbremVsEta","ele brem fraction vs #eta",nbineta2D,etamin,etamax,0.,1.,"#eta","<P_{in} - P_{out} / P_{in}>") ;
252  py_fbremVsPhi = bookP1("fbremVsPhi","ele brem fraction vs #phi",nbinphi2D,phimin,phimax,0.,1.,"#phi (rad)","<P_{in} - P_{out} / P_{in}>") ;
253 // h2_fbremVsPt = bookH2("fbremVsPt","ele brem fraction vs pt",nbinpt2D,0.,ptmax,100,0.,1.,"p_{T} (GeV/c)","<P_{in} - P_{out} / P_{in}>") ;
254  h1_classes = bookH1("classes","ele electron classes",10,0.0,10.);
255 
256  // pflow
257  h1_mva = bookH1( "mva","ele identification mva",100,-1.,1.,"mva");
258  h1_provenance = bookH1( "provenance","ele provenance",5,-2.,3.,"provenance");
259 
260  // isolation
261  h1_tkSumPt_dr03 = bookH1("tkSumPt_dr03","tk isolation sum, dR=0.3",100,0.0,20.,"TkIsoSum (GeV/c)","Events","ELE_LOGY E1 P");
262  h1_ecalRecHitSumEt_dr03 = bookH1("ecalRecHitSumEt_dr03","ecal isolation sum, dR=0.3",100,0.0,20.,"EcalIsoSum (GeV)","Events","ELE_LOGY E1 P");
263  h1_hcalTowerSumEt_dr03 = bookH1("hcalTowerSumEt_dr03","hcal isolation sum, dR=0.3",100,0.0,20.,"HcalIsoSum (GeV)","Events","ELE_LOGY E1 P");
264 // h1_hcalDepth1TowerSumEt_dr03 = bookH1("hcalDepth1TowerSumEt_dr03","hcal depth1 isolation sum, dR=0.3",100,0.0,20.,"Hcal1IsoSum (GeV)","Events","ELE_LOGY E1 P");
265 // h1_hcalDepth2TowerSumEt_dr03 = bookH1("hcalDepth2TowerSumEt_dr03","hcal depth2 isolation sum, dR=0.3",100,0.0,20.,"Hcal2IsoSum (GeV)","Events","ELE_LOGY E1 P");
266 // h1_tkSumPt_dr04 = bookH1("tkSumPt_dr04","hcal isolation sum",100,0.0,20.,"TkIsoSum (GeV/c)","Events","ELE_LOGY E1 P");
267 // h1_ecalRecHitSumEt_dr04 = bookH1("ecalRecHitSumEt_dr04","ecal isolation sum, dR=0.4",100,0.0,20.,"EcalIsoSum (GeV)","Events","ELE_LOGY E1 P");
268 // h1_hcalTowerSumEt_dr04 = bookH1("hcalTowerSumEt_dr04","hcal isolation sum, dR=0.4",100,0.0,20.,"HcalIsoSum (GeV)","Events","ELE_LOGY E1 P");
271 
272  // di-electron mass
273  setBookIndex(200) ;
274  h1_mee = bookH1("mee","ele pairs invariant mass", nbinmee, meemin, meemax,"m_{ee} (GeV/c^{2})");
275  h1_mee_os = bookH1("mee_os","ele pairs invariant mass, opposite sign", nbinmee, meemin, meemax,"m_{e^{+}e^{-}} (GeV/c^{2})");
276 
277 
278 
279  //===========================
280  // histos for matching and matched matched objects
281  //===========================
282 
283  // matching object
284  std::string matchingObjectType ;
285  if (std::string::npos!=matchingObjectCollection_.label().find("SuperCluster",0))
286  { matchingObjectType = "SC" ; }
287  if (matchingObjectType=="")
288  { edm::LogError("ElectronMcFakeValidator::beginJob")<<"Unknown matching object type !" ; }
289  else
290  { edm::LogInfo("ElectronMcFakeValidator::beginJob")<<"Matching object type: "<<matchingObjectType ; }
291 // std::string htitle = "# "+matchingObjectType+"s", xtitle = "N_{"+matchingObjectType+"}" ;
292 // h1_matchingObject_Num = bookH1withSumw2("matchingObject_Num",htitle,nbinfhits,0.,fhitsmax,xtitle) ;
293 
294  // matching object distributions
295  h1_matchingObject_Eta = bookH1withSumw2("matchingObject_Eta",matchingObjectType+" #eta",nbineta,etamin,etamax,"#eta_{SC}");
296 // h1_matchingObject_AbsEta = bookH1withSumw2("matchingObject_AbsEta",matchingObjectType+" |#eta|",nbineta/2,0.,etamax,"|#eta|_{SC}");
297 // h1_matchingObject_P = bookH1withSumw2("matchingObject_P",matchingObjectType+" p",nbinp,0.,pmax,"E_{SC} (GeV)");
298  h1_matchingObject_Pt = bookH1withSumw2("matchingObject_Pt",matchingObjectType+" pt",nbinpteff,5.,ptmax,"pt_{SC} (GeV/c)");
299  h1_matchingObject_Phi = bookH1withSumw2("matchingObject_Phi",matchingObjectType+" #phi",nbinphi,phimin,phimax,"#phi (rad)");
300 // h1_matchingObject_Z = bookH1withSumw2("matchingObject_Z",matchingObjectType+" z",nbinxyz,-25,25,"z (cm)");
301 
302  h1_matchedObject_Eta = bookH1withSumw2("matchedObject_Eta","Efficiency vs matching SC #eta",nbineta,etamin,etamax,"#eta_{SC}");
303 // h1_matchedObject_AbsEta = bookH1withSumw2("matchedObject_AbsEta","Efficiency vs matching SC |#eta|",nbineta/2,0.,2.5,"|#eta|_{SC}");
304  h1_matchedObject_Pt = bookH1withSumw2("matchedObject_Pt","Efficiency vs matching SC E_{T}",nbinpteff,5.,ptmax,"pt_{SC} (GeV/c)");
305  h1_matchedObject_Phi = bookH1withSumw2("matchedObject_Phi","Efficiency vs matching SC #phi",nbinphi,phimin,phimax,"#phi (rad)");
306 // h1_matchedObject_Z = bookH1withSumw2("matchedObject_Z","Efficiency vs matching SC z",nbinxyz,-25,25,"z (cm)");
307 
308 // // classes
309 // h1_matchedEle_eta = bookH1( "matchedEle_eta", "ele electron #eta", nbineta/2,0.0,etamax,"#eta");
310 // h1_matchedEle_eta_golden = bookH1( "matchedEle_eta_golden", "ele electron #eta golden", nbineta/2,0.0,etamax,"#eta");
311 // h1_matchedEle_eta_shower = bookH1( "matchedEle_eta_shower", "ele electron #eta showering", nbineta/2,0.0,etamax,"#eta");
312 // //h1_matchedEle_eta_bbrem = bookH1( "matchedEle_eta_bbrem", "ele electron #eta bbrem", nbineta/2,0.0,etamax,"#eta");
313 // //h1_matchedEle_eta_narrow = bookH1( "matchedEle_eta_narrow", "ele electron #eta narrow", nbineta/2,0.0,etamax,"#eta");
314 //
315  }
316 
318 {
319  nEvents_++ ;
320 // if (!trigger(iEvent)) return ;
321 // nAfterTrigger_++ ;
322 
323 // edm::Handle<SuperClusterCollection> barrelSCs ;
324 // iEvent.getByLabel("correctedHybridSuperClusters",barrelSCs) ;
325 // edm::Handle<SuperClusterCollection> endcapsSCs ;
326 // iEvent.getByLabel("correctedMulti5x5SuperClustersWithPreshower",endcapsSCs) ;
327 // std::cout<<"[ElectronMcSignalValidator::analyze]"
328 // <<"Event "<<iEvent.id()
329 // <<" has "<<barrelSCs.product()->size()<<" barrel superclusters"
330 // <<" and "<<endcapsSCs.product()->size()<<" endcaps superclusters" ;
331 //
333  iEvent.getByLabel(electronCollection_,gsfElectrons) ;
335  iEvent.getByLabel(matchingObjectCollection_,recoClusters) ;
337  iEvent.getByLabel(trackCollection_,tracks);
339  iEvent.getByLabel(gsftrackCollection_,gsfTracks);
341  iEvent.getByLabel(vertexCollection_,vertices);
342  edm::Handle<reco::BeamSpot> recoBeamSpotHandle ;
343  iEvent.getByLabel(beamSpotTag_,recoBeamSpotHandle) ;
344  const BeamSpot bs = *recoBeamSpotHandle ;
345 
346  int ievt = iEvent.id().event();
347  int irun = iEvent.id().run();
348  int ils = iEvent.luminosityBlock();
349 
350  edm::LogInfo("ElectronAnalyzer::analyze")
351  <<"Treating "<<gsfElectrons.product()->size()<<" electrons"
352  <<" from event "<<ievt<<" in run "<<irun<<" and lumiblock "<<ils ;
353  //h1_num_->Fill((*gsfElectrons).size()) ;
354 
355  // selected rec electrons
356  reco::GsfElectronCollection::const_iterator gsfIter ;
357  for
358  ( gsfIter=gsfElectrons->begin() ;
359  gsfIter!=gsfElectrons->end();
360  gsfIter++ )
361  {
362  // vertex TIP
363  double vertexTIP =
364  (gsfIter->vertex().x()-bs.position().x()) * (gsfIter->vertex().x()-bs.position().x()) +
365  (gsfIter->vertex().y()-bs.position().y()) * (gsfIter->vertex().y()-bs.position().y()) ;
366  vertexTIP = sqrt(vertexTIP) ;
367 
368  // select electrons
369  if (!selected(gsfIter,vertexTIP)) continue ;
370 
371  // basic quantities
372  if (gsfIter->isEB()) h1_vertexPt_barrel->Fill( gsfIter->pt() );
373  if (gsfIter->isEE()) h1_vertexPt_endcaps->Fill( gsfIter->pt() );
374  h1_vertexEta->Fill( gsfIter->eta() );
375 // h1_vertexPhi->Fill( gsfIter->phi() );
376  h2_vertexEtaVsPhi->Fill( gsfIter->eta(), gsfIter->phi() );
377 // h1_vertexX->Fill( gsfIter->vertex().x() );
378 // h1_vertexY->Fill( gsfIter->vertex().y() );
379  h2_vertexXvsY->Fill( gsfIter->vertex().x(), gsfIter->vertex().y() );
380  h1_vertexZ->Fill( gsfIter->vertex().z() );
381 // h1_vertexP->Fill( gsfIter->p() );
382 // h1_Et->Fill( gsfIter->superCluster()->energy()/cosh( gsfIter->superCluster()->eta()) );
383 // h1_vertexTIP->Fill( vertexTIP );
384 // h1_charge->Fill( gsfIter->charge() );
385 
386  // supercluster related distributions
387  reco::SuperClusterRef sclRef = gsfIter->superCluster() ;
388  // ALREADY DONE IN GSF ELECTRON CORE
389  // if (!gsfIter->ecalDrivenSeed()&&gsfIter->trackerDrivenSeed())
390  // sclRef = gsfIter->pflowSuperCluster() ;
391 // h1_sclEn->Fill(sclRef->energy());
392 // h1_sclEta->Fill(sclRef->eta());
393 // h1_sclPhi->Fill(sclRef->phi());
394  double R=TMath::Sqrt(sclRef->x()*sclRef->x() + sclRef->y()*sclRef->y() +sclRef->z()*sclRef->z());
395  double Rt=TMath::Sqrt(sclRef->x()*sclRef->x() + sclRef->y()*sclRef->y());
396  h1_sclEt->Fill(sclRef->energy()*(Rt/R));
397 
398  // track related distributions
399 // h1_ambiguousTracks->Fill( gsfIter->ambiguousGsfTracksSize() );
400 // h2_ambiguousTracksVsEta->Fill( gsfIter->eta(), gsfIter->ambiguousGsfTracksSize() );
401 // h2_ambiguousTracksVsPhi->Fill( gsfIter->phi(), gsfIter->ambiguousGsfTracksSize() );
402 // h2_ambiguousTracksVsPt->Fill( gsfIter->pt(), gsfIter->ambiguousGsfTracksSize() );
403  if (!readAOD_)
404  { // track extra does not exist in AOD
405  h1_foundHits->Fill( gsfIter->gsfTrack()->numberOfValidHits() );
406  py_foundHitsVsEta->Fill( gsfIter->eta(), gsfIter->gsfTrack()->numberOfValidHits() );
407  py_foundHitsVsPhi->Fill( gsfIter->phi(), gsfIter->gsfTrack()->numberOfValidHits() );
408  //h2_foundHitsVsPt->Fill( gsfIter->pt(), gsfIter->gsfTrack()->numberOfValidHits() );
409  h1_lostHits->Fill( gsfIter->gsfTrack()->numberOfLostHits() );
410  py_lostHitsVsEta->Fill( gsfIter->eta(), gsfIter->gsfTrack()->numberOfLostHits() );
411  py_lostHitsVsPhi->Fill( gsfIter->phi(), gsfIter->gsfTrack()->numberOfLostHits() );
412  //h2_lostHitsVsPt->Fill( gsfIter->pt(), gsfIter->gsfTrack()->numberOfLostHits() );
413  h1_chi2->Fill( gsfIter->gsfTrack()->normalizedChi2() );
414  py_chi2VsEta->Fill( gsfIter->eta(), gsfIter->gsfTrack()->normalizedChi2() );
415  py_chi2VsPhi->Fill( gsfIter->phi(), gsfIter->gsfTrack()->normalizedChi2() );
416  //h2_chi2VsPt->Fill( gsfIter->pt(), gsfIter->gsfTrack()->normalizedChi2() );
417  }
418 
419  // match distributions
420  if (gsfIter->isEB())
421  {
422  h1_Eop_barrel->Fill( gsfIter->eSuperClusterOverP() );
423  h1_EeleOPout_barrel->Fill( gsfIter->eEleClusterOverPout() );
424  h1_dEtaSc_propVtx_barrel->Fill(gsfIter->deltaEtaSuperClusterTrackAtVtx());
425  h1_dEtaEleCl_propOut_barrel->Fill(gsfIter->deltaEtaEleClusterTrackAtCalo());
426  h1_dPhiSc_propVtx_barrel->Fill(gsfIter->deltaPhiSuperClusterTrackAtVtx());
427  h1_dPhiEleCl_propOut_barrel->Fill(gsfIter->deltaPhiEleClusterTrackAtCalo());
428  h1_Hoe_barrel->Fill(gsfIter->hadronicOverEm());
429  h1_sclSigEtaEta_barrel->Fill( gsfIter->scSigmaEtaEta() );
430  }
431  if (gsfIter->isEE())
432  {
433  h1_Eop_endcaps->Fill( gsfIter->eSuperClusterOverP() );
434  h1_EeleOPout_endcaps->Fill( gsfIter->eEleClusterOverPout() );
435  h1_dEtaSc_propVtx_endcaps->Fill(gsfIter->deltaEtaSuperClusterTrackAtVtx());
436  h1_dEtaEleCl_propOut_endcaps->Fill(gsfIter->deltaEtaEleClusterTrackAtCalo());
437  h1_dPhiSc_propVtx_endcaps->Fill(gsfIter->deltaPhiSuperClusterTrackAtVtx());
438  h1_dPhiEleCl_propOut_endcaps->Fill(gsfIter->deltaPhiEleClusterTrackAtCalo());
439  h1_Hoe_endcaps->Fill(gsfIter->hadronicOverEm());
440  h1_sclSigEtaEta_endcaps->Fill( gsfIter->scSigmaEtaEta() );
441  }
442  py_EopVsPhi->Fill( gsfIter->phi(), gsfIter->eSuperClusterOverP() );
443 // h2_EopVsPt->Fill( gsfIter->pt(), gsfIter->eSuperClusterOverP() );
444 // h2_EeleOPoutVsPhi->Fill( gsfIter->phi(), gsfIter->eEleClusterOverPout() );
445 // h2_EeleOPoutVsPt->Fill( gsfIter->pt(), gsfIter->eEleClusterOverPout() );
446  py_dEtaSc_propVtxVsPhi->Fill(gsfIter->phi(), gsfIter->deltaEtaSuperClusterTrackAtVtx());
447 // h2_dEtaSc_propVtxVsPt->Fill(gsfIter->pt(), gsfIter->deltaEtaSuperClusterTrackAtVtx());
448 // h2_dEtaEleCl_propOutVsPhi->Fill(gsfIter->phi(), gsfIter->deltaEtaEleClusterTrackAtCalo());
449 // h2_dEtaEleCl_propOutVsPt->Fill(gsfIter->pt(), gsfIter->deltaEtaEleClusterTrackAtCalo());
450  py_dPhiSc_propVtxVsPhi->Fill(gsfIter->phi(), gsfIter->deltaPhiSuperClusterTrackAtVtx());
451 // h2_dPhiSc_propVtxVsPt->Fill(gsfIter->pt(), gsfIter->deltaPhiSuperClusterTrackAtVtx());
452 // h2_dPhiEleCl_propOutVsPhi->Fill(gsfIter->phi(), gsfIter->deltaPhiEleClusterTrackAtCalo());
453 // h2_dPhiEleCl_propOutVsPt->Fill(gsfIter->pt(), gsfIter->deltaPhiEleClusterTrackAtCalo());
454  py_HoeVsPhi->Fill(gsfIter->phi(), gsfIter->hadronicOverEm());
455 // h2_HoeVsPt->Fill(gsfIter->pt(), gsfIter->hadronicOverEm());
456 
457 // // from gsf track interface, hence using mean
458 // if (!readAOD_)
459 // { // track extra does not exist in AOD
460 // h_PinMnPout->Fill( gsfIter->gsfTrack()->innerMomentum().R() - gsfIter->gsfTrack()->outerMomentum().R() );
461 // //h_outerP->Fill( gsfIter->gsfTrack()->outerMomentum().R() );
462 // h_innerPt_mean->Fill( gsfIter->gsfTrack()->innerMomentum().Rho() );
463 // h_outerPt_mean->Fill( gsfIter->gsfTrack()->outerMomentum().Rho() );
464 // }
465 //
466 // // from electron interface, hence using mode
467 // h_PinMnPout_mode->Fill( gsfIter->trackMomentumAtVtx().R() - gsfIter->trackMomentumOut().R() );
468 // //h_outerP_mode->Fill( gsfIter->trackMomentumOut().R() );
469 // h_outerPt_mode->Fill( gsfIter->trackMomentumOut().Rho() );
470 //
471 
472  // fbrem, classes
473  h1_fbrem->Fill(gsfIter->fbrem()) ;
474  py_fbremVsEta->Fill(gsfIter->eta(),gsfIter->fbrem()) ;
475  py_fbremVsPhi->Fill(gsfIter->phi(),gsfIter->fbrem()) ;
476 // h2_fbremVsPt->Fill(gsfIter->pt(),gsfIter->fbrem()) ;
477  int eleClass = gsfIter->classification() ;
478  if (gsfIter->isEE()) eleClass+=5;
479  h1_classes->Fill(eleClass) ;
480 
481 
482  // pflow
483  h1_mva->Fill(gsfIter->mva()) ;
484  if (gsfIter->ecalDrivenSeed()) h1_provenance->Fill(1.) ;
485  if (gsfIter->trackerDrivenSeed()) h1_provenance->Fill(-1.) ;
486  if (gsfIter->trackerDrivenSeed()||gsfIter->ecalDrivenSeed()) h1_provenance->Fill(0.);
487  if (gsfIter->trackerDrivenSeed()&&!gsfIter->ecalDrivenSeed()) h1_provenance->Fill(-2.);
488  if (!gsfIter->trackerDrivenSeed()&&gsfIter->ecalDrivenSeed()) h1_provenance->Fill(2.);
489 
490  // isolation
491  h1_tkSumPt_dr03->Fill(gsfIter->dr03TkSumPt());
492  h1_ecalRecHitSumEt_dr03->Fill(gsfIter->dr03EcalRecHitSumEt());
493  h1_hcalTowerSumEt_dr03->Fill(gsfIter->dr03HcalTowerSumEt());
494 // h1_hcalDepth1TowerSumEt_dr03->Fill(gsfIter->dr03HcalDepth1TowerSumEt());
495 // h1_hcalDepth2TowerSumEt_dr03->Fill(gsfIter->dr03HcalDepth2TowerSumEt());
496 // h1_tkSumPt_dr04->Fill(gsfIter->dr04TkSumPt());
497 // h1_ecalRecHitSumEt_dr04->Fill(gsfIter->dr04EcalRecHitSumEt());
498 // h1_hcalTowerSumEt_dr04->Fill(gsfIter->dr04HcalTowerSumEt());
501 
502  }
503 
504  // association matching object-reco electrons
505  int matchingObjectNum=0;
506  reco::SuperClusterCollection::const_iterator moIter ;
507  for
508  ( moIter=recoClusters->begin() ;
509  moIter!=recoClusters->end() ;
510  moIter++ )
511  {
512 // // number of matching objects
513  matchingObjectNum++;
514 
515  if
516  ( moIter->energy()/cosh(moIter->eta())>maxPtMatchingObject_ ||
517  std::abs(moIter->eta())> maxAbsEtaMatchingObject_ )
518  { continue ; }
519 
520 // // suppress the endcaps
521 // //if (std::abs(moIter->eta()) > 1.5) continue;
522 // // select central z
523 // //if ( std::abs((*mcIter)->production_vertex()->position().z())>50.) continue;
524 
525  h1_matchingObject_Eta->Fill( moIter->eta() );
526 // h1_matchingObject_AbsEta->Fill( std::abs(moIter->eta()) );
527 // h1_matchingObject_P->Fill( moIter->energy() );
528  h1_matchingObject_Pt->Fill( moIter->energy()/cosh(moIter->eta()) );
529  h1_matchingObject_Phi->Fill( moIter->phi() );
530 // h1_matchingObject_Z->Fill( moIter->z() );
531 
532  bool okGsfFound = false ;
533  double gsfOkRatio = 999999999. ;
534  reco::GsfElectron bestGsfElectron ;
535  reco::GsfElectronCollection::const_iterator gsfIter ;
536  for
537  ( gsfIter=gsfElectrons->begin() ;
538  gsfIter!=gsfElectrons->end() ;
539  gsfIter++ )
540  {
541  reco::GsfElectronCollection::const_iterator gsfIter2 ;
542  for
543  ( gsfIter2=gsfIter+1;
544  gsfIter2!=gsfElectrons->end() ;
545  gsfIter2++ )
546  {
547  float invMass = computeInvMass(*gsfIter,*gsfIter2) ;
548  if(matchingObjectNum == 1){h1_mee->Fill(invMass) ;}
549  if ((matchingObjectNum == 1) && (((gsfIter->charge())*(gsfIter2->charge()))<0.))
550  { h1_mee_os->Fill(invMass) ; }
551  }
552 
553  double vertexTIP =
554  (gsfIter->vertex().x()-bs.position().x()) * (gsfIter->vertex().x()-bs.position().x()) +
555  (gsfIter->vertex().y()-bs.position().y()) * (gsfIter->vertex().y()-bs.position().y()) ;
556  vertexTIP = sqrt(vertexTIP) ;
557 
558  // select electrons
559  if (!selected(gsfIter,vertexTIP)) continue ;
560 
561  // matching with a cone in eta phi
562  if ( matchingCondition_ == "Cone" )
563  {
564  double dphi = gsfIter->phi()-moIter->phi() ;
565  if (std::abs(dphi)>CLHEP::pi)
566  { dphi = dphi < 0? (CLHEP::twopi) + dphi : dphi - CLHEP::twopi ; }
567  double deltaR = sqrt(pow((moIter->eta()-gsfIter->eta()),2) + pow(dphi,2)) ;
568  if ( deltaR < deltaR_ )
569  {
570  //if ( (genPc->pdg_id() == 11) && (gsfIter->charge() < 0.) || (genPc->pdg_id() == -11) &&
571  //(gsfIter->charge() > 0.) ){
572  double tmpGsfRatio = gsfIter->p()/moIter->energy() ;
573  if ( std::abs(tmpGsfRatio-1) < std::abs(gsfOkRatio-1) )
574  {
575  gsfOkRatio = tmpGsfRatio;
576  bestGsfElectron=*gsfIter;
577  okGsfFound = true;
578  }
579  //}
580  }
581  }
582  } // loop over rec ele to look for the best one
583  if (okGsfFound)
584  {
585  // generated distributions for matched electrons
586  h1_matchedObject_Eta->Fill( moIter->eta() );
587  // h1_matchedObject_AbsEta->Fill( std::abs(moIter->eta()) );
588  h1_matchedObject_Pt->Fill( moIter->energy()/cosh(moIter->eta()) );
589  h1_matchedObject_Phi->Fill( moIter->phi() );
590  // h1_matchedObject_Z->Fill( moIter->z() );
591 
592  //classes
593  // int eleClass = bestGsfElectron.classification() ;
594  // h_classes->Fill(eleClass) ;
595  // h_matchedEle_eta->Fill(std::abs(bestGsfElectron.eta()));
596  // if (bestGsfElectron.classification() == GsfElectron::GOLDEN) h_matchedEle_eta_golden->Fill(std::abs(bestGsfElectron.eta()));
597  // if (bestGsfElectron.classification() == GsfElectron::SHOWERING) h_matchedEle_eta_shower->Fill(std::abs(bestGsfElectron.eta()));
598  // //if (bestGsfElectron.classification() == GsfElectron::BIGBREM) h_matchedEle_eta_bbrem->Fill(std::abs(bestGsfElectron.eta()));
599  // //if (bestGsfElectron.classification() == GsfElectron::OLDNARROW) h_matchedEle_eta_narrow->Fill(std::abs(bestGsfElectron.eta()));
600  }
601 
602  } // loop overmatching object
603 
604 // h_matchingObject_Num->Fill(matchingObjectNum) ;
605 
606  }
607 
609  ( const reco::GsfElectron & e1,
610  const reco::GsfElectron & e2 )
611  {
612  math::XYZTLorentzVector p12 = e1.p4()+e2.p4() ;
613  float mee2 = p12.Dot(p12) ;
614  float invMass = sqrt(mee2) ;
615  return invMass ;
616  }
617 
618 //bool ElectronAnalyzer::trigger( const edm::Event & e )
619 // {
620 // // retreive TriggerResults from the event
621 // edm::Handle<edm::TriggerResults> triggerResults ;
622 // e.getByLabel(triggerResults_,triggerResults) ;
623 //
624 // bool accept = false ;
625 //
626 // if (triggerResults.isValid())
627 // {
628 // //std::cout << "TriggerResults found, number of HLT paths: " << triggerResults->size() << std::endl;
629 // // get trigger names
630 // const edm::TriggerNames & triggerNames_ = e.triggerNames(*triggerResults);
636 //
637 // unsigned int n = HLTPathsByName_.size() ;
638 // for (unsigned int i=0; i!=n; i++)
639 // {
640 // HLTPathsByIndex_[i]=triggerNames_.triggerIndex(HLTPathsByName_[i]) ;
641 // }
642 //
643 // // empty input vectors (n==0) means any trigger paths
644 // if (n==0)
645 // {
646 // n=triggerResults->size() ;
647 // HLTPathsByName_.resize(n) ;
648 // HLTPathsByIndex_.resize(n) ;
649 // for ( unsigned int i=0 ; i!=n ; i++)
650 // {
651 // HLTPathsByName_[i]=triggerNames_.triggerName(i) ;
652 // HLTPathsByIndex_[i]=i ;
653 // }
654 // }
655 //
671 //
672 // // count number of requested HLT paths which have fired
673 // unsigned int fired=0 ;
674 // for ( unsigned int i=0 ; i!=n ; i++ )
675 // {
676 // if (HLTPathsByIndex_[i]<triggerResults->size())
677 // {
678 // if (triggerResults->accept(HLTPathsByIndex_[i]))
679 // {
680 // fired++ ;
681 // h1_triggers->Fill(float(HLTPathsByIndex_[i]));
682 // //std::cout << "Fired HLT path= " << HLTPathsByName_[i] << std::endl ;
683 // accept = true ;
684 // }
685 // }
686 // }
687 //
688 // }
689 //
690 // return accept ;
691 // }
692 
693 bool ElectronAnalyzer::selected( const reco::GsfElectronCollection::const_iterator & gsfIter , double vertexTIP )
694  {
695  if ((Selection_>0)&&generalCut(gsfIter)) return false ;
696  if ((Selection_>=1)&&etCut(gsfIter)) return false ;
697  if ((Selection_>=2)&&isolationCut(gsfIter,vertexTIP)) return false ;
698  if ((Selection_>=3)&&idCut(gsfIter)) return false ;
699  return true ;
700  }
701 
702 bool ElectronAnalyzer::generalCut( const reco::GsfElectronCollection::const_iterator & gsfIter)
703  {
704  if (std::abs(gsfIter->eta())>maxAbsEta_) return true ;
705  if (gsfIter->pt()<minPt_) return true ;
706 
707  if (gsfIter->isEB() && isEE_) return true ;
708  if (gsfIter->isEE() && isEB_) return true ;
709  if (gsfIter->isEBEEGap() && isNotEBEEGap_) return true ;
710 
711  if (gsfIter->ecalDrivenSeed() && isTrackerDriven_) return true ;
712  if (gsfIter->trackerDrivenSeed() && isEcalDriven_) return true ;
713 
714  return false ;
715  }
716 
717 bool ElectronAnalyzer::etCut( const reco::GsfElectronCollection::const_iterator & gsfIter )
718  {
719  if (gsfIter->superCluster()->energy()/cosh(gsfIter->superCluster()->eta())<minEt_) return true ;
720 
721  return false ;
722  }
723 
724 bool ElectronAnalyzer::isolationCut( const reco::GsfElectronCollection::const_iterator & gsfIter, double vertexTIP )
725  {
726  if (gsfIter->isEB() && vertexTIP > tipMaxBarrel_) return true ;
727  if (gsfIter->isEE() && vertexTIP > tipMaxEndcaps_) return true ;
728 
729  if (gsfIter->dr03TkSumPt() > tkIso03Max_) return true ;
730  if (gsfIter->isEB() && gsfIter->dr03HcalDepth1TowerSumEt() > hcalIso03Depth1MaxBarrel_) return true ;
731  if (gsfIter->isEE() && gsfIter->dr03HcalDepth1TowerSumEt() > hcalIso03Depth1MaxEndcaps_) return true ;
732  if (gsfIter->isEE() && gsfIter->dr03HcalDepth2TowerSumEt() > hcalIso03Depth2MaxEndcaps_) return true ;
733  if (gsfIter->isEB() && gsfIter->dr03EcalRecHitSumEt() > ecalIso03MaxBarrel_) return true ;
734  if (gsfIter->isEE() && gsfIter->dr03EcalRecHitSumEt() > ecalIso03MaxEndcaps_) return true ;
735 
736  return false ;
737  }
738 
739 bool ElectronAnalyzer::idCut( const reco::GsfElectronCollection::const_iterator & gsfIter )
740  {
741  if (gsfIter->isEB() && gsfIter->eSuperClusterOverP() < eOverPMinBarrel_) return true ;
742  if (gsfIter->isEB() && gsfIter->eSuperClusterOverP() > eOverPMaxBarrel_) return true ;
743  if (gsfIter->isEE() && gsfIter->eSuperClusterOverP() < eOverPMinEndcaps_) return true ;
744  if (gsfIter->isEE() && gsfIter->eSuperClusterOverP() > eOverPMaxEndcaps_) return true ;
745  if (gsfIter->isEB() && std::abs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) < dEtaMinBarrel_) return true ;
746  if (gsfIter->isEB() && std::abs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) > dEtaMaxBarrel_) return true ;
747  if (gsfIter->isEE() && std::abs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) < dEtaMinEndcaps_) return true ;
748  if (gsfIter->isEE() && std::abs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) > dEtaMaxEndcaps_) return true ;
749  if (gsfIter->isEB() && std::abs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) < dPhiMinBarrel_) return true ;
750  if (gsfIter->isEB() && std::abs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) > dPhiMaxBarrel_) return true ;
751  if (gsfIter->isEE() && std::abs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) < dPhiMinEndcaps_) return true ;
752  if (gsfIter->isEE() && std::abs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) > dPhiMaxEndcaps_) return true ;
753  if (gsfIter->isEB() && gsfIter->scSigmaIEtaIEta() < sigIetaIetaMinBarrel_) return true ;
754  if (gsfIter->isEB() && gsfIter->scSigmaIEtaIEta() > sigIetaIetaMaxBarrel_) return true ;
755  if (gsfIter->isEE() && gsfIter->scSigmaIEtaIEta() < sigIetaIetaMinEndcaps_) return true ;
756  if (gsfIter->isEE() && gsfIter->scSigmaIEtaIEta() > sigIetaIetaMaxEndcaps_) return true ;
757  if (gsfIter->isEB() && gsfIter->hadronicOverEm() > hadronicOverEmMaxBarrel_) return true ;
758  if (gsfIter->isEE() && gsfIter->hadronicOverEm() > hadronicOverEmMaxEndcaps_) return true ;
759 
760  return false ;
761  }
RunNumber_t run() const
Definition: EventID.h:42
MonitorElement * h1_foundHits
virtual void book()
T getParameter(std::string const &) const
EventNumber_t event() const
Definition: EventID.h:44
MonitorElement * bookP1(const std::string &name, const std::string &title, int nchX, double lowX, double highX, double lowY, double highY, const std::string &titleX="", const std::string &titleY="", Option_t *option="E1 P")
MonitorElement * bookH1(const std::string &name, const std::string &title, int nchX, double lowX, double highX, const std::string &titleX="", const std::string &titleY="Events", Option_t *option="E1 P")
double hadronicOverEmMaxEndcaps_
MonitorElement * h1_mee_os
const LorentzVector & p4(P4Kind kind) const
Definition: GsfElectron.cc:204
bool selected(const reco::GsfElectronCollection::const_iterator &gsfIter, double vertexTIP)
MonitorElement * h1_dPhiSc_propVtx_barrel
edm::InputTag vertexCollection_
unsigned int nEvents_
MonitorElement * h1_vertexPt_barrel
MonitorElement * py_lostHitsVsEta
MonitorElement * h1_sclSigEtaEta_barrel
MonitorElement * py_chi2VsEta
MonitorElement * h1_vertexEta
MonitorElement * py_chi2VsPhi
MonitorElement * h1_Eop_endcaps
MonitorElement * h1_ecalRecHitSumEt_dr03
#define abs(x)
Definition: mlp_lapack.h:159
edm::LuminosityBlockNumber_t luminosityBlock() const
Definition: EventBase.h:59
MonitorElement * h1_hcalTowerSumEt_dr03
MonitorElement * h1_matchingObject_Eta
MonitorElement * h1_Hoe_barrel
edm::InputTag triggerResults_
MonitorElement * py_HoeVsPhi
MonitorElement * h1_matchedObject_Pt
double sigIetaIetaMinBarrel_
MonitorElement * bookH1withSumw2(const std::string &name, const std::string &title, int nchX, double lowX, double highX, const std::string &titleX="", const std::string &titleY="Events", Option_t *option="E1 P")
MonitorElement * h1_matchedObject_Phi
void Fill(long long x)
MonitorElement * h1_tkSumPt_dr03
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:30
double sigIetaIetaMaxBarrel_
int iEvent
Definition: GenABIO.cc:243
edm::InputTag gsftrackCollection_
MonitorElement * h2_vertexXvsY
MonitorElement * py_fbremVsEta
MonitorElement * h1_provenance
MonitorElement * h1_dEtaEleCl_propOut_barrel
MonitorElement * py_EopVsPhi
edm::InputTag matchingObjectCollection_
MonitorElement * h1_Eop_barrel
T sqrt(T t)
Definition: SSEVec.h:46
edm::InputTag electronCollection_
double sigIetaIetaMinEndcaps_
MonitorElement * py_dEtaSc_propVtxVsPhi
double sigIetaIetaMaxEndcaps_
std::string matchingCondition_
double hcalIso03Depth1MaxBarrel_
MonitorElement * h1_dEtaEleCl_propOut_endcaps
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:356
MonitorElement * h1_Hoe_endcaps
tuple conf
Definition: dbtoconf.py:185
ElectronAnalyzer(const edm::ParameterSet &conf)
MonitorElement * h1_vertexPt_endcaps
MonitorElement * py_lostHitsVsPhi
double deltaR(double eta1, double eta2, double phi1, double phi2)
Definition: TreeUtility.cc:17
MonitorElement * h1_vertexZ
MonitorElement * py_dPhiSc_propVtxVsPhi
double hcalIso03Depth1MaxEndcaps_
MonitorElement * h1_dPhiEleCl_propOut_endcaps
virtual void analyze(const edm::Event &e, const edm::EventSetup &c)
MonitorElement * py_fbremVsPhi
MonitorElement * py_foundHitsVsPhi
bool etCut(const reco::GsfElectronCollection::const_iterator &gsfIter)
tuple tracks
Definition: testEve_cfg.py:39
MonitorElement * h1_fbrem
MonitorElement * h1_chi2
double maxAbsEtaMatchingObject_
MonitorElement * h1_lostHits
MonitorElement * h2_vertexEtaVsPhi
MonitorElement * h1_EeleOPout_endcaps
edm::InputTag beamSpotTag_
MonitorElement * h1_mee
T const * product() const
Definition: Handle.h:74
MonitorElement * bookH2(const std::string &name, const std::string &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, const std::string &titleX="", const std::string &titleY="", Option_t *option="COLZ")
MonitorElement * h1_classes
MonitorElement * h1_sclEt
std::string const & label() const
Definition: InputTag.h:25
MonitorElement * h1_EeleOPout_barrel
edm::EventID id() const
Definition: EventBase.h:56
bool generalCut(const reco::GsfElectronCollection::const_iterator &gsfIter)
MonitorElement * h1_dEtaSc_propVtx_barrel
float computeInvMass(const reco::GsfElectron &e1, const reco::GsfElectron &e2)
MonitorElement * h1_matchingObject_Phi
MonitorElement * h1_dPhiSc_propVtx_endcaps
edm::InputTag trackCollection_
virtual ~ElectronAnalyzer()
MonitorElement * h1_sclSigEtaEta_endcaps
const Point & position() const
position
Definition: BeamSpot.h:63
double pi
MonitorElement * py_foundHitsVsEta
bool idCut(const reco::GsfElectronCollection::const_iterator &gsfIter)
double hcalIso03Depth2MaxEndcaps_
double hadronicOverEmMaxBarrel_
MonitorElement * h1_matchedObject_Eta
MonitorElement * h1_matchingObject_Pt
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
MonitorElement * h1_dPhiEleCl_propOut_barrel
MonitorElement * h1_dEtaSc_propVtx_endcaps
MonitorElement * h1_mva
bool isolationCut(const reco::GsfElectronCollection::const_iterator &gsfIter, double vertexTIP)