00001
00002 #include "DQMOffline/EGamma/plugins/ElectronAnalyzer.h"
00003
00004 #include "DQMServices/Core/interface/MonitorElement.h"
00005
00006 #include "DataFormats/GsfTrackReco/interface/GsfTrack.h"
00007 #include "DataFormats/EgammaCandidates/interface/GsfElectron.h"
00008 #include "DataFormats/EgammaReco/interface/BasicClusterFwd.h"
00009 #include "DataFormats/VertexReco/interface/VertexFwd.h"
00010 #include "DataFormats/VertexReco/interface/Vertex.h"
00011 #include "DataFormats/Common/interface/Handle.h"
00012 #include "DataFormats/Common/interface/EDProduct.h"
00013 #include "DataFormats/BeamSpot/interface/BeamSpot.h"
00014 #include "DataFormats/Common/interface/TriggerResults.h"
00015
00016 #include "FWCore/Common/interface/TriggerNames.h"
00017 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00018 #include "FWCore/Framework/interface/EDAnalyzer.h"
00019 #include "FWCore/Framework/interface/Event.h"
00020 #include "FWCore/Framework/interface/MakerMacros.h"
00021 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00022
00023 #include "FWCore/ServiceRegistry/interface/Service.h"
00024
00025 #include "CLHEP/Units/GlobalPhysicalConstants.h"
00026 #include "TMath.h"
00027
00028 #include <iostream>
00029
00030 using namespace reco ;
00031
00032 ElectronAnalyzer::ElectronAnalyzer( const edm::ParameterSet & conf )
00033 : ElectronDqmAnalyzerBase(conf)
00034 {
00035
00036 Selection_ = conf.getParameter<int>("Selection");
00037 electronCollection_ = conf.getParameter<edm::InputTag>("ElectronCollection");
00038 matchingObjectCollection_ = conf.getParameter<edm::InputTag>("MatchingObjectCollection");
00039 trackCollection_ = conf.getParameter<edm::InputTag>("TrackCollection");
00040 vertexCollection_ = conf.getParameter<edm::InputTag>("VertexCollection");
00041 gsftrackCollection_ = conf.getParameter<edm::InputTag>("GsfTrackCollection");
00042 beamSpotTag_ = conf.getParameter<edm::InputTag>("BeamSpot");
00043 readAOD_ = conf.getParameter<bool>("ReadAOD");
00044
00045
00046 matchingCondition_ = conf.getParameter<std::string>("MatchingCondition");
00047 assert (matchingCondition_=="Cone") ;
00048 maxPtMatchingObject_ = conf.getParameter<double>("MaxPtMatchingObject");
00049 maxAbsEtaMatchingObject_ = conf.getParameter<double>("MaxAbsEtaMatchingObject");
00050 deltaR_ = conf.getParameter<double>("DeltaR");
00051
00052
00053 minEt_ = conf.getParameter<double>("MinEt");
00054 minPt_ = conf.getParameter<double>("MinPt");
00055 maxAbsEta_ = conf.getParameter<double>("MaxAbsEta");
00056 isEB_ = conf.getParameter<bool>("SelectEb");
00057 isEE_ = conf.getParameter<bool>("SelectEe");
00058 isNotEBEEGap_ = conf.getParameter<bool>("SelectNotEbEeGap");
00059 isEcalDriven_ = conf.getParameter<bool>("SelectEcalDriven");
00060 isTrackerDriven_ = conf.getParameter<bool>("SelectTrackerDriven");
00061 eOverPMinBarrel_ = conf.getParameter<double>("MinEopBarrel");
00062 eOverPMaxBarrel_ = conf.getParameter<double>("MaxEopBarrel");
00063 eOverPMinEndcaps_ = conf.getParameter<double>("MinEopEndcaps");
00064 eOverPMaxEndcaps_ = conf.getParameter<double>("MaxEopEndcaps");
00065 dEtaMinBarrel_ = conf.getParameter<double>("MinDetaBarrel");
00066 dEtaMaxBarrel_ = conf.getParameter<double>("MaxDetaBarrel");
00067 dEtaMinEndcaps_ = conf.getParameter<double>("MinDetaEndcaps");
00068 dEtaMaxEndcaps_ = conf.getParameter<double>("MaxDetaEndcaps");
00069 dPhiMinBarrel_ = conf.getParameter<double>("MinDphiBarrel");
00070 dPhiMaxBarrel_ = conf.getParameter<double>("MaxDphiBarrel");
00071 dPhiMinEndcaps_ = conf.getParameter<double>("MinDphiEndcaps");
00072 dPhiMaxEndcaps_ = conf.getParameter<double>("MaxDphiEndcaps");
00073 sigIetaIetaMinBarrel_ = conf.getParameter<double>("MinSigIetaIetaBarrel");
00074 sigIetaIetaMaxBarrel_ = conf.getParameter<double>("MaxSigIetaIetaBarrel");
00075 sigIetaIetaMinEndcaps_ = conf.getParameter<double>("MinSigIetaIetaEndcaps");
00076 sigIetaIetaMaxEndcaps_ = conf.getParameter<double>("MaxSigIetaIetaEndcaps");
00077 hadronicOverEmMaxBarrel_ = conf.getParameter<double>("MaxHoeBarrel");
00078 hadronicOverEmMaxEndcaps_ = conf.getParameter<double>("MaxHoeEndcaps");
00079 mvaMin_ = conf.getParameter<double>("MinMva");
00080 tipMaxBarrel_ = conf.getParameter<double>("MaxTipBarrel");
00081 tipMaxEndcaps_ = conf.getParameter<double>("MaxTipEndcaps");
00082 tkIso03Max_ = conf.getParameter<double>("MaxTkIso03");
00083 hcalIso03Depth1MaxBarrel_ = conf.getParameter<double>("MaxHcalIso03Depth1Barrel");
00084 hcalIso03Depth1MaxEndcaps_ = conf.getParameter<double>("MaxHcalIso03Depth1Endcaps");
00085 hcalIso03Depth2MaxEndcaps_ = conf.getParameter<double>("MaxHcalIso03Depth2Endcaps");
00086 ecalIso03MaxBarrel_ = conf.getParameter<double>("MaxEcalIso03Barrel");
00087 ecalIso03MaxEndcaps_ = conf.getParameter<double>("MaxEcalIso03Endcaps");
00088
00089
00090 triggerResults_ = conf.getParameter<edm::InputTag>("TriggerResults");
00091
00092
00093
00094
00095 nbineta=conf.getParameter<int>("NbinEta");
00096 nbineta2D=conf.getParameter<int>("NbinEta2D");
00097 etamin=conf.getParameter<double>("EtaMin");
00098 etamax=conf.getParameter<double>("EtaMax");
00099
00100 nbinphi=conf.getParameter<int>("NbinPhi");
00101 nbinphi2D=conf.getParameter<int>("NbinPhi2D");
00102 phimin=conf.getParameter<double>("PhiMin");
00103 phimax=conf.getParameter<double>("PhiMax");
00104
00105 nbinpt=conf.getParameter<int>("NbinPt");
00106 nbinpteff=conf.getParameter<int>("NbinPtEff");
00107 nbinpt2D=conf.getParameter<int>("NbinPt2D");
00108 ptmax=conf.getParameter<double>("PtMax");
00109
00110 nbinp=conf.getParameter<int>("NbinP");
00111 nbinp2D=conf.getParameter<int>("NbinP2D");
00112 pmax=conf.getParameter<double>("PMax");
00113
00114 nbineop=conf.getParameter<int>("NbinEop");
00115 nbineop2D=conf.getParameter<int>("NbinEop2D");
00116 eopmax=conf.getParameter<double>("EopMax");
00117 eopmaxsht=conf.getParameter<double>("EopMaxSht");
00118
00119 nbindeta=conf.getParameter<int>("NbinDeta");
00120 detamin=conf.getParameter<double>("DetaMin");
00121 detamax=conf.getParameter<double>("DetaMax");
00122
00123 nbindphi=conf.getParameter<int>("NbinDphi");
00124 dphimin=conf.getParameter<double>("DphiMin");
00125 dphimax=conf.getParameter<double>("DphiMax");
00126
00127 nbindetamatch=conf.getParameter<int>("NbinDetaMatch");
00128 nbindetamatch2D=conf.getParameter<int>("NbinDetaMatch2D");
00129 detamatchmin=conf.getParameter<double>("DetaMatchMin");
00130 detamatchmax=conf.getParameter<double>("DetaMatchMax");
00131
00132 nbindphimatch=conf.getParameter<int>("NbinDphiMatch");
00133 nbindphimatch2D=conf.getParameter<int>("NbinDphiMatch2D");
00134 dphimatchmin=conf.getParameter<double>("DphiMatchMin");
00135 dphimatchmax=conf.getParameter<double>("DphiMatchMax");
00136
00137 nbinfhits=conf.getParameter<int>("NbinFhits");
00138 fhitsmax=conf.getParameter<double>("FhitsMax");
00139
00140 nbinlhits=conf.getParameter<int>("NbinLhits");
00141 lhitsmax=conf.getParameter<double>("LhitsMax");
00142
00143 nbinxyz=conf.getParameter<int>("NbinXyz");
00144 nbinxyz2D=conf.getParameter<int>("NbinXyz2D");
00145
00146 nbinpoptrue= conf.getParameter<int>("NbinPopTrue");
00147 poptruemin=conf.getParameter<double>("PopTrueMin");
00148 poptruemax=conf.getParameter<double>("PopTrueMax");
00149
00150 nbinmee= conf.getParameter<int>("NbinMee");
00151 meemin=conf.getParameter<double>("MeeMin");
00152 meemax=conf.getParameter<double>("MeeMax");
00153
00154 nbinhoe= conf.getParameter<int>("NbinHoe");
00155 hoemin=conf.getParameter<double>("HoeMin");
00156 hoemax=conf.getParameter<double>("HoeMax");
00157 }
00158
00159 ElectronAnalyzer::~ElectronAnalyzer()
00160 {}
00161
00162 void ElectronAnalyzer::book()
00163 {
00164 nEvents_ = 0 ;
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174 h1_vertexPt_barrel = bookH1("vertexPt_barrel","ele transverse momentum in barrel",nbinpt,0.,ptmax,"p_{T vertex} (GeV/c)");
00175 h1_vertexPt_endcaps = bookH1("vertexPt_endcaps","ele transverse momentum in endcaps",nbinpt,0.,ptmax,"p_{T vertex} (GeV/c)");
00176
00177
00178 h2_vertexEtaVsPhi = bookH2("vertexEtaVsPhi","ele momentum #eta vs #phi",nbineta2D,etamin,etamax,nbinphi2D,phimin,phimax,"#eta","#phi (rad)");
00179
00180
00181 h2_vertexXvsY = bookH2("vertexXvsY","ele vertex x vs y",nbinxyz2D,-0.1,0.1,nbinxyz2D,-0.1,0.1,"x (cm)","y (cm)");
00182 h1_vertexZ = bookH1("vertexZ","ele vertex z",nbinxyz,-25, 25,"z (cm)");
00183
00184
00185
00186
00187
00188 h1_sclEt = bookH1("sclEt","ele supercluster transverse energy",nbinpt,0.,ptmax,"E_{T} (GeV)");
00189
00190
00191
00192
00193
00194
00195 h1_chi2 = bookH1("chi2","ele track #chi^{2}",100,0.,15.,"#Chi^{2}");
00196 py_chi2VsEta = bookP1("chi2VsEta","ele track #chi^{2} vs #eta",nbineta2D,etamin,etamax,0.,15.,"#eta","<#chi^{2}>");
00197 py_chi2VsPhi = bookP1("chi2VsPhi","ele track #chi^{2} vs #phi",nbinphi2D,phimin,phimax,0.,15.,"#phi (rad)","<#chi^{2}>");
00198
00199 h1_foundHits = bookH1("foundHits","ele track # found hits",nbinfhits,0.,fhitsmax,"N_{hits}");
00200 py_foundHitsVsEta = bookP1("foundHitsVsEta","ele track # found hits vs #eta",nbineta2D,etamin,etamax,0.,fhitsmax,"#eta","<# hits>");
00201 py_foundHitsVsPhi = bookP1("foundHitsVsPhi","ele track # found hits vs #phi",nbinphi2D,phimin,phimax,0.,fhitsmax,"#phi (rad)","<# hits>");
00202
00203 h1_lostHits = bookH1("lostHits","ele track # lost hits",5,0.,5.,"N_{lost hits}");
00204 py_lostHitsVsEta = bookP1("lostHitsVsEta","ele track # lost hits vs #eta",nbineta2D,etamin,etamax,0.,lhitsmax,"#eta","<# hits>");
00205 py_lostHitsVsPhi = bookP1("lostHitsVsPhi","ele track # lost hits vs #eta",nbinphi2D,phimin,phimax,0.,lhitsmax,"#phi (rad)","<# hits>");
00206
00207
00208
00209
00210
00211
00212
00213
00214 h1_Eop_barrel = bookH1( "Eop_barrel","ele E/P_{vertex} in barrel",nbineop,0.,eopmax,"E/P_{vertex}");
00215 h1_Eop_endcaps = bookH1( "Eop_endcaps","ele E/P_{vertex} in endcaps",nbineop,0.,eopmax,"E/P_{vertex}");
00216 py_EopVsPhi = bookP1("EopVsPhi","ele E/P_{vertex} vs #phi",nbinphi2D,phimin,phimax,0.,eopmax,"#phi (rad)","<E/P_{vertex}>");
00217
00218 h1_EeleOPout_barrel = bookH1( "EeleOPout_barrel","ele E_{ele}/P_{out} in barrel",nbineop,0.,eopmax,"E_{ele}/P_{out}");
00219 h1_EeleOPout_endcaps = bookH1( "EeleOPout_endcaps","ele E_{ele}/P_{out} in endcaps",nbineop,0.,eopmax,"E_{ele}/P_{out}");
00220
00221
00222 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}");
00223 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}");
00224 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}>");
00225
00226 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}");
00227 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}");
00228
00229
00230 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)");
00231 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)");
00232 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)");
00233
00234 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)");
00235 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)");
00236
00237
00238 h1_Hoe_barrel = bookH1("Hoe_barrel","ele hadronic energy / em energy, in barrel", nbinhoe, hoemin, hoemax,"H/E","Events","ELE_LOGY E1 P") ;
00239 h1_Hoe_endcaps = bookH1("Hoe_endcaps","ele hadronic energy / em energy, in endcaps", nbinhoe, hoemin, hoemax,"H/E","Events","ELE_LOGY E1 P") ;
00240 py_HoeVsPhi = bookP1("HoeVsPhi","ele hadronic energy / em energy vs #phi",nbinphi2D,phimin,phimax,hoemin,hoemax,"#phi (rad)","<H/E>","ELE_LOGY E1 P") ;
00241
00242 h1_sclSigEtaEta_barrel = bookH1("sclSigEtaEta_barrel","ele supercluster sigma ieta ieta in barrel",100,0.,0.05,"sietaieta");
00243 h1_sclSigEtaEta_endcaps = bookH1("sclSigEtaEta_endcaps","ele supercluster sigma ieta ieta in endcaps",100,0.,0.05,"sietaieta");
00244
00245
00246
00247
00248
00249
00250
00251
00252 h1_fbrem = bookH1("fbrem","ele brem fraction",100,0.,1.,"P_{in} - P_{out} / P_{in}") ;
00253 py_fbremVsEta = bookP1("fbremVsEta","ele brem fraction vs #eta",nbineta2D,etamin,etamax,0.,1.,"#eta","<P_{in} - P_{out} / P_{in}>") ;
00254 py_fbremVsPhi = bookP1("fbremVsPhi","ele brem fraction vs #phi",nbinphi2D,phimin,phimax,0.,1.,"#phi (rad)","<P_{in} - P_{out} / P_{in}>") ;
00255
00256 h1_classes = bookH1("classes","ele electron classes",10,0.0,10.);
00257
00258
00259 h1_mva = bookH1( "mva","ele identification mva",100,-1.,1.,"mva");
00260 h1_provenance = bookH1( "provenance","ele provenance",5,-2.,3.,"provenance");
00261
00262
00263 h1_tkSumPt_dr03 = bookH1("tkSumPt_dr03","tk isolation sum, dR=0.3",100,0.0,20.,"TkIsoSum (GeV/c)","Events","ELE_LOGY E1 P");
00264 h1_ecalRecHitSumEt_dr03 = bookH1("ecalRecHitSumEt_dr03","ecal isolation sum, dR=0.3",100,0.0,20.,"EcalIsoSum (GeV)","Events","ELE_LOGY E1 P");
00265 h1_hcalTowerSumEt_dr03 = bookH1("hcalTowerSumEt_dr03","hcal isolation sum, dR=0.3",100,0.0,20.,"HcalIsoSum (GeV)","Events","ELE_LOGY E1 P");
00266
00267
00268
00269
00270
00273
00274
00275 setBookIndex(200) ;
00276 h1_mee = bookH1("mee","ele pairs invariant mass", nbinmee, meemin, meemax,"m_{ee} (GeV/c^{2})");
00277 h1_mee_os = bookH1("mee_os","ele pairs invariant mass, opposite sign", nbinmee, meemin, meemax,"m_{e^{+}e^{-}} (GeV/c^{2})");
00278
00279
00280
00281
00282
00283
00284
00285
00286 std::string matchingObjectType ;
00287 if (std::string::npos!=matchingObjectCollection_.label().find("SuperCluster",0))
00288 { matchingObjectType = "SC" ; }
00289 if (matchingObjectType=="")
00290 { edm::LogError("ElectronMcFakeValidator::beginJob")<<"Unknown matching object type !" ; }
00291 else
00292 { edm::LogInfo("ElectronMcFakeValidator::beginJob")<<"Matching object type: "<<matchingObjectType ; }
00293
00294
00295
00296
00297 h1_matchingObject_Eta = bookH1withSumw2("matchingObject_Eta",matchingObjectType+" #eta",nbineta,etamin,etamax,"#eta_{SC}");
00298
00299
00300 h1_matchingObject_Pt = bookH1withSumw2("matchingObject_Pt",matchingObjectType+" pt",nbinpteff,5.,ptmax,"pt_{SC} (GeV/c)");
00301 h1_matchingObject_Phi = bookH1withSumw2("matchingObject_Phi",matchingObjectType+" #phi",nbinphi,phimin,phimax,"#phi (rad)");
00302 h1_matchingObject_Z = bookH1withSumw2("matchingObject_Z",matchingObjectType+" z",nbinxyz,-25,25,"z (cm)");
00303
00304 h1_matchedObject_Eta = bookH1withSumw2("matchedObject_Eta","Efficiency vs matching SC #eta",nbineta,etamin,etamax,"#eta_{SC}");
00305
00306 h1_matchedObject_Pt = bookH1withSumw2("matchedObject_Pt","Efficiency vs matching SC E_{T}",nbinpteff,5.,ptmax,"pt_{SC} (GeV/c)");
00307 h1_matchedObject_Phi = bookH1withSumw2("matchedObject_Phi","Efficiency vs matching SC #phi",nbinphi,phimin,phimax,"#phi (rad)");
00308 h1_matchedObject_Z = bookH1withSumw2("matchedObject_Z","Efficiency vs matching SC z",nbinxyz,-25,25,"z (cm)");
00309
00310
00311
00312
00313
00314
00315
00316
00317 }
00318
00319 void ElectronAnalyzer::analyze( const edm::Event& iEvent, const edm::EventSetup & iSetup )
00320 {
00321 nEvents_++ ;
00322
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334 edm::Handle<GsfElectronCollection> gsfElectrons ;
00335 iEvent.getByLabel(electronCollection_,gsfElectrons) ;
00336 edm::Handle<reco::SuperClusterCollection> recoClusters ;
00337 iEvent.getByLabel(matchingObjectCollection_,recoClusters) ;
00338 edm::Handle<reco::TrackCollection> tracks;
00339 iEvent.getByLabel(trackCollection_,tracks);
00340 edm::Handle<reco::GsfTrackCollection> gsfTracks;
00341 iEvent.getByLabel(gsftrackCollection_,gsfTracks);
00342 edm::Handle<reco::VertexCollection> vertices;
00343 iEvent.getByLabel(vertexCollection_,vertices);
00344 edm::Handle<reco::BeamSpot> recoBeamSpotHandle ;
00345 iEvent.getByLabel(beamSpotTag_,recoBeamSpotHandle) ;
00346 const BeamSpot bs = *recoBeamSpotHandle ;
00347
00348 int ievt = iEvent.id().event();
00349 int irun = iEvent.id().run();
00350 int ils = iEvent.luminosityBlock();
00351
00352 edm::LogInfo("ElectronAnalyzer::analyze")
00353 <<"Treating "<<gsfElectrons.product()->size()<<" electrons"
00354 <<" from event "<<ievt<<" in run "<<irun<<" and lumiblock "<<ils ;
00355
00356
00357
00358 reco::GsfElectronCollection::const_iterator gsfIter ;
00359 for
00360 ( gsfIter=gsfElectrons->begin() ;
00361 gsfIter!=gsfElectrons->end();
00362 gsfIter++ )
00363 {
00364
00365 double vertexTIP =
00366 (gsfIter->vertex().x()-bs.position().x()) * (gsfIter->vertex().x()-bs.position().x()) +
00367 (gsfIter->vertex().y()-bs.position().y()) * (gsfIter->vertex().y()-bs.position().y()) ;
00368 vertexTIP = sqrt(vertexTIP) ;
00369
00370
00371 if (!selected(gsfIter,vertexTIP)) continue ;
00372
00373
00374 if (gsfIter->isEB()) h1_vertexPt_barrel->Fill( gsfIter->pt() );
00375 if (gsfIter->isEE()) h1_vertexPt_endcaps->Fill( gsfIter->pt() );
00376
00377
00378 h2_vertexEtaVsPhi->Fill( gsfIter->eta(), gsfIter->phi() );
00379
00380
00381 h2_vertexXvsY->Fill( gsfIter->vertex().x(), gsfIter->vertex().y() );
00382 h1_vertexZ->Fill( gsfIter->vertex().z() );
00383
00384
00385
00386
00387
00388
00389 reco::SuperClusterRef sclRef = gsfIter->superCluster() ;
00390
00391
00392
00393
00394
00395
00396 double R=TMath::Sqrt(sclRef->x()*sclRef->x() + sclRef->y()*sclRef->y() +sclRef->z()*sclRef->z());
00397 double Rt=TMath::Sqrt(sclRef->x()*sclRef->x() + sclRef->y()*sclRef->y());
00398 h1_sclEt->Fill(sclRef->energy()*(Rt/R));
00399
00400
00401
00402
00403
00404
00405 if (!readAOD_)
00406 {
00407 h1_foundHits->Fill( gsfIter->gsfTrack()->numberOfValidHits() );
00408 py_foundHitsVsEta->Fill( gsfIter->eta(), gsfIter->gsfTrack()->numberOfValidHits() );
00409 py_foundHitsVsPhi->Fill( gsfIter->phi(), gsfIter->gsfTrack()->numberOfValidHits() );
00410
00411 h1_lostHits->Fill( gsfIter->gsfTrack()->numberOfLostHits() );
00412 py_lostHitsVsEta->Fill( gsfIter->eta(), gsfIter->gsfTrack()->numberOfLostHits() );
00413 py_lostHitsVsPhi->Fill( gsfIter->phi(), gsfIter->gsfTrack()->numberOfLostHits() );
00414
00415 h1_chi2->Fill( gsfIter->gsfTrack()->normalizedChi2() );
00416 py_chi2VsEta->Fill( gsfIter->eta(), gsfIter->gsfTrack()->normalizedChi2() );
00417 py_chi2VsPhi->Fill( gsfIter->phi(), gsfIter->gsfTrack()->normalizedChi2() );
00418
00419 }
00420
00421
00422 if (gsfIter->isEB())
00423 {
00424 h1_Eop_barrel->Fill( gsfIter->eSuperClusterOverP() );
00425 h1_EeleOPout_barrel->Fill( gsfIter->eEleClusterOverPout() );
00426 h1_dEtaSc_propVtx_barrel->Fill(gsfIter->deltaEtaSuperClusterTrackAtVtx());
00427 h1_dEtaEleCl_propOut_barrel->Fill(gsfIter->deltaEtaEleClusterTrackAtCalo());
00428 h1_dPhiSc_propVtx_barrel->Fill(gsfIter->deltaPhiSuperClusterTrackAtVtx());
00429 h1_dPhiEleCl_propOut_barrel->Fill(gsfIter->deltaPhiEleClusterTrackAtCalo());
00430 h1_Hoe_barrel->Fill(gsfIter->hadronicOverEm());
00431 h1_sclSigEtaEta_barrel->Fill( gsfIter->scSigmaEtaEta() );
00432 }
00433 if (gsfIter->isEE())
00434 {
00435 h1_Eop_endcaps->Fill( gsfIter->eSuperClusterOverP() );
00436 h1_EeleOPout_endcaps->Fill( gsfIter->eEleClusterOverPout() );
00437 h1_dEtaSc_propVtx_endcaps->Fill(gsfIter->deltaEtaSuperClusterTrackAtVtx());
00438 h1_dEtaEleCl_propOut_endcaps->Fill(gsfIter->deltaEtaEleClusterTrackAtCalo());
00439 h1_dPhiSc_propVtx_endcaps->Fill(gsfIter->deltaPhiSuperClusterTrackAtVtx());
00440 h1_dPhiEleCl_propOut_endcaps->Fill(gsfIter->deltaPhiEleClusterTrackAtCalo());
00441 h1_Hoe_endcaps->Fill(gsfIter->hadronicOverEm());
00442 h1_sclSigEtaEta_endcaps->Fill( gsfIter->scSigmaEtaEta() );
00443 }
00444 py_EopVsPhi->Fill( gsfIter->phi(), gsfIter->eSuperClusterOverP() );
00445
00446
00447
00448 py_dEtaSc_propVtxVsPhi->Fill(gsfIter->phi(), gsfIter->deltaEtaSuperClusterTrackAtVtx());
00449
00450
00451
00452 py_dPhiSc_propVtxVsPhi->Fill(gsfIter->phi(), gsfIter->deltaPhiSuperClusterTrackAtVtx());
00453
00454
00455
00456 py_HoeVsPhi->Fill(gsfIter->phi(), gsfIter->hadronicOverEm());
00457
00458
00459
00460
00461
00462
00463
00464
00465
00466
00467
00468
00469
00470
00471
00472
00473
00474
00475 h1_fbrem->Fill(gsfIter->fbrem()) ;
00476 py_fbremVsEta->Fill(gsfIter->eta(),gsfIter->fbrem()) ;
00477 py_fbremVsPhi->Fill(gsfIter->phi(),gsfIter->fbrem()) ;
00478
00479 int eleClass = gsfIter->classification() ;
00480 if (gsfIter->isEE()) eleClass+=5;
00481 h1_classes->Fill(eleClass) ;
00482
00483
00484
00485 h1_mva->Fill(gsfIter->mva()) ;
00486 if (gsfIter->ecalDrivenSeed()) h1_provenance->Fill(1.) ;
00487 if (gsfIter->trackerDrivenSeed()) h1_provenance->Fill(-1.) ;
00488 if (gsfIter->trackerDrivenSeed()||gsfIter->ecalDrivenSeed()) h1_provenance->Fill(0.);
00489 if (gsfIter->trackerDrivenSeed()&&!gsfIter->ecalDrivenSeed()) h1_provenance->Fill(-2.);
00490 if (!gsfIter->trackerDrivenSeed()&&gsfIter->ecalDrivenSeed()) h1_provenance->Fill(2.);
00491
00492
00493 h1_tkSumPt_dr03->Fill(gsfIter->dr03TkSumPt());
00494 h1_ecalRecHitSumEt_dr03->Fill(gsfIter->dr03EcalRecHitSumEt());
00495 h1_hcalTowerSumEt_dr03->Fill(gsfIter->dr03HcalTowerSumEt());
00496
00497
00498
00499
00500
00503
00504 }
00505
00506
00507
00508 reco::SuperClusterCollection::const_iterator moIter ;
00509 for
00510 ( moIter=recoClusters->begin() ;
00511 moIter!=recoClusters->end() ;
00512 moIter++ )
00513 {
00514
00515
00516
00517 if
00518 ( moIter->energy()/cosh(moIter->eta())>maxPtMatchingObject_ ||
00519 std::abs(moIter->eta())> maxAbsEtaMatchingObject_ )
00520 { continue ; }
00521
00522
00523
00524
00525
00526
00527 h1_matchingObject_Eta->Fill( moIter->eta() );
00528
00529
00530 h1_matchingObject_Pt->Fill( moIter->energy()/cosh(moIter->eta()) );
00531 h1_matchingObject_Phi->Fill( moIter->phi() );
00532 h1_matchingObject_Z->Fill( moIter->z() );
00533
00534 bool okGsfFound = false ;
00535 double gsfOkRatio = 999999999. ;
00536 reco::GsfElectron bestGsfElectron ;
00537 reco::GsfElectronCollection::const_iterator gsfIter ;
00538 for
00539 ( gsfIter=gsfElectrons->begin() ;
00540 gsfIter!=gsfElectrons->end() ;
00541 gsfIter++ )
00542 {
00543 reco::GsfElectronCollection::const_iterator gsfIter2 ;
00544 for
00545 ( gsfIter2=gsfIter+1;
00546 gsfIter2!=gsfElectrons->end() ;
00547 gsfIter2++ )
00548 {
00549 float invMass = computeInvMass(*gsfIter,*gsfIter2) ;
00550 h1_mee->Fill(invMass) ;
00551 if (((gsfIter->charge())*(gsfIter2->charge()))<0.)
00552 { h1_mee_os->Fill(invMass) ; }
00553 }
00554
00555 double vertexTIP =
00556 (gsfIter->vertex().x()-bs.position().x()) * (gsfIter->vertex().x()-bs.position().x()) +
00557 (gsfIter->vertex().y()-bs.position().y()) * (gsfIter->vertex().y()-bs.position().y()) ;
00558 vertexTIP = sqrt(vertexTIP) ;
00559
00560
00561 if (!selected(gsfIter,vertexTIP)) continue ;
00562
00563
00564 if ( matchingCondition_ == "Cone" )
00565 {
00566 double dphi = gsfIter->phi()-moIter->phi() ;
00567 if (std::abs(dphi)>CLHEP::pi)
00568 { dphi = dphi < 0? (CLHEP::twopi) + dphi : dphi - CLHEP::twopi ; }
00569 double deltaR = sqrt(pow((moIter->eta()-gsfIter->eta()),2) + pow(dphi,2)) ;
00570 if ( deltaR < deltaR_ )
00571 {
00572
00573
00574 double tmpGsfRatio = gsfIter->p()/moIter->energy() ;
00575 if ( std::abs(tmpGsfRatio-1) < std::abs(gsfOkRatio-1) )
00576 {
00577 gsfOkRatio = tmpGsfRatio;
00578 bestGsfElectron=*gsfIter;
00579 okGsfFound = true;
00580 }
00581
00582 }
00583 }
00584 }
00585 if (okGsfFound)
00586 {
00587
00588 h1_matchedObject_Eta->Fill( moIter->eta() );
00589
00590 h1_matchedObject_Pt->Fill( moIter->energy()/cosh(moIter->eta()) );
00591 h1_matchedObject_Phi->Fill( moIter->phi() );
00592 h1_matchedObject_Z->Fill( moIter->z() );
00593
00594
00595
00596
00597
00598
00599
00600
00601
00602 }
00603
00604 }
00605
00606
00607
00608 }
00609
00610 float ElectronAnalyzer::computeInvMass
00611 ( const reco::GsfElectron & e1,
00612 const reco::GsfElectron & e2 )
00613 {
00614 math::XYZTLorentzVector p12 = e1.p4()+e2.p4() ;
00615 float mee2 = p12.Dot(p12) ;
00616 float invMass = sqrt(mee2) ;
00617 return invMass ;
00618 }
00619
00620
00621
00622
00623
00624
00625
00626
00627
00628
00629
00630
00631
00632
00638
00639
00640
00641
00642
00643
00644
00645
00646
00647
00648
00649
00650
00651
00652
00653
00654
00655
00656
00657
00673
00674
00675
00676
00677
00678
00679
00680
00681
00682
00683
00684
00685
00686
00687
00688
00689
00690
00691
00692
00693
00694
00695 bool ElectronAnalyzer::selected( const reco::GsfElectronCollection::const_iterator & gsfIter , double vertexTIP )
00696 {
00697 if ((Selection_>0)&&generalCut(gsfIter)) return false ;
00698 if ((Selection_>=1)&&etCut(gsfIter)) return false ;
00699 if ((Selection_>=2)&&isolationCut(gsfIter,vertexTIP)) return false ;
00700 if ((Selection_>=3)&&idCut(gsfIter)) return false ;
00701 return true ;
00702 }
00703
00704 bool ElectronAnalyzer::generalCut( const reco::GsfElectronCollection::const_iterator & gsfIter)
00705 {
00706 if (std::abs(gsfIter->eta())>maxAbsEta_) return true ;
00707 if (gsfIter->pt()<minPt_) return true ;
00708
00709 if (gsfIter->isEB() && isEE_) return true ;
00710 if (gsfIter->isEE() && isEB_) return true ;
00711 if (gsfIter->isEBEEGap() && isNotEBEEGap_) return true ;
00712
00713 if (gsfIter->ecalDrivenSeed() && isTrackerDriven_) return true ;
00714 if (gsfIter->trackerDrivenSeed() && isEcalDriven_) return true ;
00715
00716 return false ;
00717 }
00718
00719 bool ElectronAnalyzer::etCut( const reco::GsfElectronCollection::const_iterator & gsfIter )
00720 {
00721 if (gsfIter->superCluster()->energy()/cosh(gsfIter->superCluster()->eta())<minEt_) return true ;
00722
00723 return false ;
00724 }
00725
00726 bool ElectronAnalyzer::isolationCut( const reco::GsfElectronCollection::const_iterator & gsfIter, double vertexTIP )
00727 {
00728 if (gsfIter->isEB() && vertexTIP > tipMaxBarrel_) return true ;
00729 if (gsfIter->isEE() && vertexTIP > tipMaxEndcaps_) return true ;
00730
00731 if (gsfIter->dr03TkSumPt() > tkIso03Max_) return true ;
00732 if (gsfIter->isEB() && gsfIter->dr03HcalDepth1TowerSumEt() > hcalIso03Depth1MaxBarrel_) return true ;
00733 if (gsfIter->isEE() && gsfIter->dr03HcalDepth1TowerSumEt() > hcalIso03Depth1MaxEndcaps_) return true ;
00734 if (gsfIter->isEE() && gsfIter->dr03HcalDepth2TowerSumEt() > hcalIso03Depth2MaxEndcaps_) return true ;
00735 if (gsfIter->isEB() && gsfIter->dr03EcalRecHitSumEt() > ecalIso03MaxBarrel_) return true ;
00736 if (gsfIter->isEE() && gsfIter->dr03EcalRecHitSumEt() > ecalIso03MaxEndcaps_) return true ;
00737
00738 return false ;
00739 }
00740
00741 bool ElectronAnalyzer::idCut( const reco::GsfElectronCollection::const_iterator & gsfIter )
00742 {
00743 if (gsfIter->isEB() && gsfIter->eSuperClusterOverP() < eOverPMinBarrel_) return true ;
00744 if (gsfIter->isEB() && gsfIter->eSuperClusterOverP() > eOverPMaxBarrel_) return true ;
00745 if (gsfIter->isEE() && gsfIter->eSuperClusterOverP() < eOverPMinEndcaps_) return true ;
00746 if (gsfIter->isEE() && gsfIter->eSuperClusterOverP() > eOverPMaxEndcaps_) return true ;
00747 if (gsfIter->isEB() && std::abs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) < dEtaMinBarrel_) return true ;
00748 if (gsfIter->isEB() && std::abs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) > dEtaMaxBarrel_) return true ;
00749 if (gsfIter->isEE() && std::abs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) < dEtaMinEndcaps_) return true ;
00750 if (gsfIter->isEE() && std::abs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) > dEtaMaxEndcaps_) return true ;
00751 if (gsfIter->isEB() && std::abs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) < dPhiMinBarrel_) return true ;
00752 if (gsfIter->isEB() && std::abs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) > dPhiMaxBarrel_) return true ;
00753 if (gsfIter->isEE() && std::abs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) < dPhiMinEndcaps_) return true ;
00754 if (gsfIter->isEE() && std::abs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) > dPhiMaxEndcaps_) return true ;
00755 if (gsfIter->isEB() && gsfIter->scSigmaIEtaIEta() < sigIetaIetaMinBarrel_) return true ;
00756 if (gsfIter->isEB() && gsfIter->scSigmaIEtaIEta() > sigIetaIetaMaxBarrel_) return true ;
00757 if (gsfIter->isEE() && gsfIter->scSigmaIEtaIEta() < sigIetaIetaMinEndcaps_) return true ;
00758 if (gsfIter->isEE() && gsfIter->scSigmaIEtaIEta() > sigIetaIetaMaxEndcaps_) return true ;
00759 if (gsfIter->isEB() && gsfIter->hadronicOverEm() > hadronicOverEmMaxBarrel_) return true ;
00760 if (gsfIter->isEE() && gsfIter->hadronicOverEm() > hadronicOverEmMaxEndcaps_) return true ;
00761
00762 return false ;
00763 }