00001
00002 #include "DQMOffline/EGamma/plugins/ElectronTagProbeAnalyzer.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/BeamSpot/interface/BeamSpot.h"
00013 #include "DataFormats/Common/interface/TriggerResults.h"
00014
00015 #include "FWCore/Common/interface/TriggerNames.h"
00016 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00017 #include "FWCore/Framework/interface/EDAnalyzer.h"
00018 #include "FWCore/Framework/interface/Event.h"
00019 #include "FWCore/Framework/interface/MakerMacros.h"
00020 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00021
00022 #include "FWCore/ServiceRegistry/interface/Service.h"
00023
00024 #include "CLHEP/Units/GlobalPhysicalConstants.h"
00025 #include "TMath.h"
00026
00027 #include <iostream>
00028
00029 using namespace reco ;
00030
00031 ElectronTagProbeAnalyzer::ElectronTagProbeAnalyzer( const edm::ParameterSet & conf )
00032 : ElectronDqmAnalyzerBase(conf)
00033 {
00034
00035 Selection_ = conf.getParameter<int>("Selection");
00036 electronCollection_ = conf.getParameter<edm::InputTag>("ElectronCollection");
00037 matchingObjectCollection_ = conf.getParameter<edm::InputTag>("MatchingObjectCollection");
00038 trackCollection_ = conf.getParameter<edm::InputTag>("TrackCollection");
00039 vertexCollection_ = conf.getParameter<edm::InputTag>("VertexCollection");
00040 gsftrackCollection_ = conf.getParameter<edm::InputTag>("GsfTrackCollection");
00041 beamSpotTag_ = conf.getParameter<edm::InputTag>("BeamSpot");
00042 readAOD_ = conf.getParameter<bool>("ReadAOD");
00043
00044
00045 massLow_ = conf.getParameter< double >("MassLow");
00046 massHigh_ = conf.getParameter< double >("MassHigh");
00047 TPchecksign_ = conf.getParameter<bool>("TpCheckSign");
00048 TAGcheckclass_ = conf.getParameter<bool>("TagCheckClass");
00049 PROBEetcut_ = conf.getParameter<bool>("ProbeEtCut");
00050 PROBEcheckclass_ = conf.getParameter<bool>("ProbeCheckClass");
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 ElectronTagProbeAnalyzer::~ElectronTagProbeAnalyzer()
00160 {}
00161
00162 void ElectronTagProbeAnalyzer::book()
00163 {
00164 nEvents_ = 0 ;
00165
00166
00167
00168 h1_vertexPt_barrel = bookH1("vertexPt_barrel","ele transverse momentum in barrel",nbinpt,0.,ptmax,"p_{T vertex} (GeV/c)");
00169 h1_vertexPt_endcaps = bookH1("vertexPt_endcaps","ele transverse momentum in endcaps",nbinpt,0.,ptmax,"p_{T vertex} (GeV/c)");
00170 h1_vertexEta = bookH1("vertexEta","ele momentum #eta",nbineta,etamin,etamax,"#eta");
00171 h2_vertexEtaVsPhi = bookH2("vertexEtaVsPhi","ele momentum #eta vs #phi",nbineta2D,etamin,etamax,nbinphi2D,phimin,phimax,"#eta","#phi (rad)");
00172 h2_vertexXvsY = bookH2("vertexXvsY","ele vertex x vs y",nbinxyz2D,-0.1,0.1,nbinxyz2D,-0.1,0.1,"x (cm)","y (cm)" );
00173 h1_vertexZ = bookH1("vertexZ","ele vertex z",nbinxyz,-25, 25,"z (cm)" );
00174
00175
00176
00177 h1_sclEt = bookH1("sclEt","ele supercluster transverse energy",nbinpt,0.,ptmax);
00178
00179
00180 h1_chi2 = bookH1("chi2","ele track #chi^{2}",100,0.,15.,"#Chi^{2}");
00181 h1_foundHits = bookH1("foundHits","ele track # found hits",nbinfhits,0.,fhitsmax,"N_{hits}");
00182 h1_lostHits = bookH1("lostHits","ele track # lost hits",5,0.,5.,"N_{lost hits}");
00183
00184
00185 h1_Eop_barrel = bookH1( "Eop_barrel","ele E/P_{vertex} in barrel",nbineop,0.,eopmax,"E/P_{vertex}");
00186 h1_Eop_endcaps = bookH1( "Eop_endcaps","ele E/P_{vertex} in endcaps",nbineop,0.,eopmax,"E/P_{vertex}");
00187 h1_EeleOPout_barrel = bookH1( "EeleOPout_barrel","ele E_{ele}/P_{out} in barrel",nbineop,0.,eopmax,"E_{ele}/P_{out}");
00188 h1_EeleOPout_endcaps = bookH1( "EeleOPout_endcaps","ele E_{ele}/P_{out} in endcaps",nbineop,0.,eopmax,"E_{ele}/P_{out}");
00189 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}");
00190 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}");
00191 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}");
00192 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}");
00193 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)");
00194 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)");
00195 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)");
00196 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)");
00197 h1_Hoe_barrel = bookH1("Hoe_barrel","ele hadronic energy / em energy, in barrel", nbinhoe, hoemin, hoemax,"H/E","Events","ELE_LOGY E1 P") ;
00198 h1_Hoe_endcaps = bookH1("Hoe_endcaps","ele hadronic energy / em energy, in endcaps", nbinhoe, hoemin, hoemax,"H/E","Events","ELE_LOGY E1 P") ;
00199 h1_sclSigEtaEta_barrel = bookH1("sclSigEtaEta_barrel","ele supercluster sigma eta eta in barrel",100,0.,0.05);
00200 h1_sclSigEtaEta_endcaps = bookH1("sclSigEtaEta_endcaps","ele supercluster sigma eta eta in endcaps",100,0.,0.05);
00201
00202
00203 h1_fbrem = bookH1("fbrem","ele brem fraction",100,0.,1.,"P_{in} - P_{out} / P_{in}") ;
00204 h1_classes = bookH1("classes","ele electron classes",10,0.0,10.);
00205
00206
00207 h1_mva = bookH1( "mva","ele identification mva",100,-1.,1.);
00208 h1_provenance = bookH1( "provenance","ele provenance",5,-2.,3.);
00209
00210
00211 h1_tkSumPt_dr03 = bookH1("tkSumPt_dr03","tk isolation sum, dR=0.3",100,0.0,20.,"TkIsoSum, cone 0.3 (GeV/c)","Events","ELE_LOGY E1 P");
00212 h1_ecalRecHitSumEt_dr03 = bookH1("ecalRecHitSumEt_dr03","ecal isolation sum, dR=0.3",100,0.0,20.,"EcalIsoSum, cone 0.3 (GeV)","Events","ELE_LOGY E1 P");
00213 h1_hcalTowerSumEt_dr03 = bookH1("hcalTowerSumEt_dr03","hcal isolation sum, dR=0.3",100,0.0,20.,"HcalIsoSum, cone 0.3 (GeV)","Events","ELE_LOGY E1 P");
00214
00215
00216 setBookIndex(200) ;
00217 h1_mee = bookH1("mee","ele pairs invariant mass", nbinmee, meemin, meemax,"m_{ee} (GeV/c^{2})");
00218 h1_mee_os = bookH1("mee_os","ele pairs invariant mass, opposite sign", nbinmee, meemin, meemax,"m_{e^{+}e^{-}} (GeV/c^{2})");
00219
00220
00221
00222
00223
00224
00225
00226
00227 std::string matchingObjectType ;
00228 if (std::string::npos!=matchingObjectCollection_.label().find("SuperCluster",0))
00229 { matchingObjectType = "SC" ; }
00230 if (matchingObjectType=="")
00231 { edm::LogError("ElectronMcFakeValidator::beginJob")<<"Unknown matching object type !" ; }
00232 else
00233 { edm::LogInfo("ElectronMcFakeValidator::beginJob")<<"Matching object type: "<<matchingObjectType ; }
00234
00235
00236 h1_matchingObject_Eta = bookH1withSumw2("matchingObject_Eta",matchingObjectType+" #eta",nbineta,etamin,etamax,"#eta_{SC}");
00237 h1_matchingObject_Pt = bookH1withSumw2("matchingObject_Pt",matchingObjectType+" pt",nbinpteff,5.,ptmax);
00238 h1_matchingObject_Phi = bookH1withSumw2("matchingObject_Phi",matchingObjectType+" phi",nbinphi,phimin,phimax);
00239
00240
00241 h1_matchedObject_Eta = bookH1withSumw2("matchedObject_Eta","Efficiency vs matching SC #eta",nbineta,etamin,etamax);
00242 h1_matchedObject_Pt = bookH1withSumw2("matchedObject_Pt","Efficiency vs matching SC E_{T}",nbinpteff,5.,ptmax);
00243 h1_matchedObject_Phi = bookH1withSumw2("matchedObject_Phi","Efficiency vs matching SC phi",nbinphi,phimin,phimax);
00244
00245
00246 }
00247
00248 void ElectronTagProbeAnalyzer::analyze( const edm::Event& iEvent, const edm::EventSetup & iSetup )
00249 {
00250 nEvents_++ ;
00251
00252 edm::Handle<GsfElectronCollection> gsfElectrons ;
00253 iEvent.getByLabel(electronCollection_,gsfElectrons) ;
00254 edm::Handle<reco::SuperClusterCollection> recoClusters ;
00255 iEvent.getByLabel(matchingObjectCollection_,recoClusters) ;
00256 edm::Handle<reco::TrackCollection> tracks;
00257 iEvent.getByLabel(trackCollection_,tracks);
00258 edm::Handle<reco::GsfTrackCollection> gsfTracks;
00259 iEvent.getByLabel(gsftrackCollection_,gsfTracks);
00260 edm::Handle<reco::VertexCollection> vertices;
00261 iEvent.getByLabel(vertexCollection_,vertices);
00262 edm::Handle<reco::BeamSpot> recoBeamSpotHandle ;
00263 iEvent.getByLabel(beamSpotTag_,recoBeamSpotHandle) ;
00264 const BeamSpot bs = *recoBeamSpotHandle ;
00265
00266 int ievt = iEvent.id().event();
00267 int irun = iEvent.id().run();
00268 int ils = iEvent.luminosityBlock();
00269
00270 edm::LogInfo("ElectronMcSignalValidator::analyze")
00271 <<"Treating "<<gsfElectrons.product()->size()<<" electrons"
00272 <<" from event "<<ievt<<" in run "<<irun<<" and lumiblock "<<ils ;
00273
00274
00275
00276 reco::GsfElectronCollection::const_iterator gsfIter ;
00277 for
00278 ( gsfIter=gsfElectrons->begin() ;
00279 gsfIter!=gsfElectrons->end();
00280 gsfIter++ )
00281 {
00282
00283 double vertexTIP =
00284 (gsfIter->vertex().x()-bs.position().x()) * (gsfIter->vertex().x()-bs.position().x()) +
00285 (gsfIter->vertex().y()-bs.position().y()) * (gsfIter->vertex().y()-bs.position().y()) ;
00286 vertexTIP = sqrt(vertexTIP) ;
00287
00288
00289 if (!selected(gsfIter,vertexTIP)) continue ;
00290
00291 reco::SuperClusterRef sclTagRef = gsfIter->superCluster() ;
00292 reco::SuperClusterCollection::const_iterator moIter ;
00293 for
00294 ( moIter=recoClusters->begin() ;
00295 moIter!=recoClusters->end() ;
00296 moIter++ )
00297 {
00298 if (moIter->eta()==sclTagRef->eta()) continue ;
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310 if(PROBEetcut_ && (moIter->energy()/cosh(moIter->eta())<minEt_)) continue ;
00311
00312 float SCenergy = moIter->energy();
00313 math::XYZPoint caloposition = moIter->position();
00314 float theta = caloposition.Theta();
00315 math::XYZVector momentum;
00316 float SCmomentumX = SCenergy*sin(theta)*cos(moIter->phi());
00317 float SCmomentumY = SCenergy*sin(theta)*sin(moIter->phi());
00318 float SCmomentumZ = SCenergy*cos(theta);
00319 const reco::Particle::LorentzVector pSCprobecandidate(SCmomentumX,SCmomentumY,SCmomentumZ,SCenergy);
00320
00321 math::XYZTLorentzVector p12 = (*gsfIter).p4()+ pSCprobecandidate;
00322 float mee2 = p12.Dot(p12);
00323 float invMass = sqrt(mee2);
00324
00325 if( invMass < massLow_ || invMass > massHigh_ ) continue ;
00326 h1_mee->Fill(invMass) ;
00327
00328 h1_matchingObject_Eta->Fill( moIter->eta() );
00329 h1_matchingObject_Pt->Fill( moIter->energy()/cosh(moIter->eta()) );
00330 h1_matchingObject_Phi->Fill( moIter->phi() );
00331
00332
00333 reco::GsfElectron bestGsfElectron;
00334 reco::SuperClusterRef sclProbeRef;
00335 bool okGsfFound = false;
00336
00337 reco::GsfElectronCollection::const_iterator gsfIter2 ;
00338
00339 for
00340 ( gsfIter2=gsfElectrons->begin();
00341 gsfIter2!=gsfElectrons->end() ;
00342 gsfIter2++ )
00343 {
00344
00345 sclProbeRef = gsfIter2->superCluster();
00346
00347 if (sclProbeRef->eta() == moIter->eta())
00348 {
00349
00350 bestGsfElectron=*gsfIter2;
00351
00352
00353 bool opsign = (((gsfIter->charge())*(bestGsfElectron.charge()))<0.) ;
00354 if ( TPchecksign_ && !opsign )
00355 { okGsfFound = false ; break ; }
00356 else
00357 { okGsfFound = true ; }
00358 }
00359
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375
00376 }
00377
00378 if (okGsfFound)
00379 {
00380
00381 fillMatchedHistos(moIter,bestGsfElectron) ;
00382
00383
00384 if (bestGsfElectron.isEB()) h1_vertexPt_barrel->Fill( bestGsfElectron.pt() );
00385 if (bestGsfElectron.isEE()) h1_vertexPt_endcaps->Fill( bestGsfElectron.pt() );
00386 h1_vertexEta->Fill( bestGsfElectron.eta() );
00387 h2_vertexEtaVsPhi->Fill( bestGsfElectron.eta(), bestGsfElectron.phi() );
00388 h2_vertexXvsY->Fill( bestGsfElectron.vertex().x(), bestGsfElectron.vertex().y() );
00389 h1_vertexZ->Fill( bestGsfElectron.vertex().z() );
00390
00391
00392 reco::SuperClusterRef sclRef = bestGsfElectron.superCluster() ;
00393 double R=TMath::Sqrt(sclRef->x()*sclRef->x() + sclRef->y()*sclRef->y() +sclRef->z()*sclRef->z());
00394 double Rt=TMath::Sqrt(sclRef->x()*sclRef->x() + sclRef->y()*sclRef->y());
00395 h1_sclEt->Fill(sclRef->energy()*(Rt/R));
00396
00397 if (!readAOD_)
00398 {
00399 h1_foundHits->Fill( bestGsfElectron.gsfTrack()->numberOfValidHits() );
00400 h1_lostHits->Fill( bestGsfElectron.gsfTrack()->numberOfLostHits() );
00401 h1_chi2->Fill( bestGsfElectron.gsfTrack()->normalizedChi2() );
00402 }
00403
00404
00405 if (bestGsfElectron.isEB())
00406 {
00407 h1_Eop_barrel->Fill( bestGsfElectron.eSuperClusterOverP() );
00408 h1_EeleOPout_barrel->Fill( bestGsfElectron.eEleClusterOverPout() );
00409 h1_dEtaSc_propVtx_barrel->Fill(bestGsfElectron.deltaEtaSuperClusterTrackAtVtx());
00410 h1_dEtaEleCl_propOut_barrel->Fill(bestGsfElectron.deltaEtaEleClusterTrackAtCalo());
00411 h1_dPhiSc_propVtx_barrel->Fill(bestGsfElectron.deltaPhiSuperClusterTrackAtVtx());
00412 h1_dPhiEleCl_propOut_barrel->Fill(bestGsfElectron.deltaPhiEleClusterTrackAtCalo());
00413 h1_Hoe_barrel->Fill(bestGsfElectron.hadronicOverEm());
00414 h1_sclSigEtaEta_barrel->Fill( bestGsfElectron.scSigmaEtaEta() );
00415 }
00416 if (bestGsfElectron.isEE())
00417 {
00418 h1_Eop_endcaps->Fill( bestGsfElectron.eSuperClusterOverP() );
00419 h1_EeleOPout_endcaps->Fill( bestGsfElectron.eEleClusterOverPout() );
00420 h1_dEtaSc_propVtx_endcaps->Fill(bestGsfElectron.deltaEtaSuperClusterTrackAtVtx());
00421 h1_dEtaEleCl_propOut_endcaps->Fill(bestGsfElectron.deltaEtaEleClusterTrackAtCalo());
00422 h1_dPhiSc_propVtx_endcaps->Fill(bestGsfElectron.deltaPhiSuperClusterTrackAtVtx());
00423 h1_dPhiEleCl_propOut_endcaps->Fill(bestGsfElectron.deltaPhiEleClusterTrackAtCalo());
00424 h1_Hoe_endcaps->Fill(bestGsfElectron.hadronicOverEm());
00425 h1_sclSigEtaEta_endcaps->Fill( bestGsfElectron.scSigmaEtaEta() );
00426 }
00427
00428
00429 h1_fbrem->Fill(bestGsfElectron.fbrem()) ;
00430 int eleClass = bestGsfElectron.classification() ;
00431 if (bestGsfElectron.isEE()) eleClass+=5;
00432 h1_classes->Fill(eleClass);
00433
00434
00435 h1_mva->Fill(bestGsfElectron.mva()) ;
00436 if (bestGsfElectron.ecalDrivenSeed()) h1_provenance->Fill(1.) ;
00437 if (bestGsfElectron.trackerDrivenSeed()) h1_provenance->Fill(-1.) ;
00438 if (bestGsfElectron.trackerDrivenSeed()||bestGsfElectron.ecalDrivenSeed()) h1_provenance->Fill(0.);
00439 if (bestGsfElectron.trackerDrivenSeed()&&!bestGsfElectron.ecalDrivenSeed()) h1_provenance->Fill(-2.);
00440 if (!bestGsfElectron.trackerDrivenSeed()&&bestGsfElectron.ecalDrivenSeed()) h1_provenance->Fill(2.);
00441
00442
00443 h1_tkSumPt_dr03->Fill(bestGsfElectron.dr03TkSumPt());
00444 h1_ecalRecHitSumEt_dr03->Fill(bestGsfElectron.dr03EcalRecHitSumEt());
00445 h1_hcalTowerSumEt_dr03->Fill(bestGsfElectron.dr03HcalTowerSumEt());
00446
00447
00448 if (((gsfIter->charge())*(bestGsfElectron.charge()))<0.)
00449 { h1_mee_os->Fill(invMass) ; }
00450
00451 }
00452
00453 }
00454
00455 }
00456
00457 }
00458
00459 float ElectronTagProbeAnalyzer::computeInvMass
00460 ( const reco::GsfElectron & e1,
00461 const reco::GsfElectron & e2 )
00462 {
00463 math::XYZTLorentzVector p12 = e1.p4()+e2.p4() ;
00464 float mee2 = p12.Dot(p12) ;
00465 float invMass = sqrt(mee2) ;
00466 return invMass ;
00467 }
00468
00469 void ElectronTagProbeAnalyzer::fillMatchedHistos
00470 ( const reco::SuperClusterCollection::const_iterator & moIter,
00471 const reco::GsfElectron & electron )
00472 {
00473
00474 h1_matchedObject_Eta->Fill( moIter->eta() );
00475
00476 h1_matchedObject_Pt->Fill( moIter->energy()/cosh(moIter->eta()) );
00477 h1_matchedObject_Phi->Fill( moIter->phi() );
00478
00479
00480
00481
00482
00483
00484
00485
00486
00487
00488 }
00489
00490
00491
00492
00493
00494
00495
00496
00497
00498
00499
00500
00501
00502
00508
00509
00510
00511
00512
00513
00514
00515
00516
00517
00518
00519
00520
00521
00522
00523
00524
00525
00526
00527
00543
00544
00545
00546
00547
00548
00549
00550
00551
00552
00553
00554
00555
00556
00557
00558
00559
00560
00561
00562
00563
00564
00565 bool ElectronTagProbeAnalyzer::selected( const reco::GsfElectronCollection::const_iterator & gsfIter , double vertexTIP )
00566 {
00567 if ((Selection_>0)&&generalCut(gsfIter)) return false ;
00568 if ((Selection_>=1)&&etCut(gsfIter)) return false ;
00569 if ((Selection_>=2)&&isolationCut(gsfIter,vertexTIP)) return false ;
00570 if ((Selection_>=3)&&idCut(gsfIter)) return false ;
00571 return true ;
00572 }
00573
00574 bool ElectronTagProbeAnalyzer::generalCut( const reco::GsfElectronCollection::const_iterator & gsfIter)
00575 {
00576 if (std::abs(gsfIter->eta())>maxAbsEta_) return true ;
00577 if (gsfIter->pt()<minPt_) return true ;
00578
00579 if (gsfIter->isEB() && isEE_) return true ;
00580 if (gsfIter->isEE() && isEB_) return true ;
00581 if (gsfIter->isEBEEGap() && isNotEBEEGap_) return true ;
00582
00583 if (gsfIter->ecalDrivenSeed() && isTrackerDriven_) return true ;
00584 if (gsfIter->trackerDrivenSeed() && isEcalDriven_) return true ;
00585
00586 return false ;
00587 }
00588
00589 bool ElectronTagProbeAnalyzer::etCut( const reco::GsfElectronCollection::const_iterator & gsfIter )
00590 {
00591 if (gsfIter->superCluster()->energy()/cosh(gsfIter->superCluster()->eta())<minEt_) return true ;
00592
00593 return false ;
00594 }
00595
00596 bool ElectronTagProbeAnalyzer::isolationCut( const reco::GsfElectronCollection::const_iterator & gsfIter, double vertexTIP )
00597 {
00598 if (gsfIter->isEB() && vertexTIP > tipMaxBarrel_) return true ;
00599 if (gsfIter->isEE() && vertexTIP > tipMaxEndcaps_) return true ;
00600
00601 if (gsfIter->dr03TkSumPt() > tkIso03Max_) return true ;
00602 if (gsfIter->isEB() && gsfIter->dr03HcalDepth1TowerSumEt() > hcalIso03Depth1MaxBarrel_) return true ;
00603 if (gsfIter->isEE() && gsfIter->dr03HcalDepth1TowerSumEt() > hcalIso03Depth1MaxEndcaps_) return true ;
00604 if (gsfIter->isEE() && gsfIter->dr03HcalDepth2TowerSumEt() > hcalIso03Depth2MaxEndcaps_) return true ;
00605 if (gsfIter->isEB() && gsfIter->dr03EcalRecHitSumEt() > ecalIso03MaxBarrel_) return true ;
00606 if (gsfIter->isEE() && gsfIter->dr03EcalRecHitSumEt() > ecalIso03MaxEndcaps_) return true ;
00607
00608 return false ;
00609 }
00610
00611 bool ElectronTagProbeAnalyzer::idCut( const reco::GsfElectronCollection::const_iterator & gsfIter )
00612 {
00613 if (gsfIter->isEB() && gsfIter->eSuperClusterOverP() < eOverPMinBarrel_) return true ;
00614 if (gsfIter->isEB() && gsfIter->eSuperClusterOverP() > eOverPMaxBarrel_) return true ;
00615 if (gsfIter->isEE() && gsfIter->eSuperClusterOverP() < eOverPMinEndcaps_) return true ;
00616 if (gsfIter->isEE() && gsfIter->eSuperClusterOverP() > eOverPMaxEndcaps_) return true ;
00617 if (gsfIter->isEB() && std::abs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) < dEtaMinBarrel_) return true ;
00618 if (gsfIter->isEB() && std::abs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) > dEtaMaxBarrel_) return true ;
00619 if (gsfIter->isEE() && std::abs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) < dEtaMinEndcaps_) return true ;
00620 if (gsfIter->isEE() && std::abs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) > dEtaMaxEndcaps_) return true ;
00621 if (gsfIter->isEB() && std::abs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) < dPhiMinBarrel_) return true ;
00622 if (gsfIter->isEB() && std::abs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) > dPhiMaxBarrel_) return true ;
00623 if (gsfIter->isEE() && std::abs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) < dPhiMinEndcaps_) return true ;
00624 if (gsfIter->isEE() && std::abs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) > dPhiMaxEndcaps_) return true ;
00625 if (gsfIter->isEB() && gsfIter->scSigmaIEtaIEta() < sigIetaIetaMinBarrel_) return true ;
00626 if (gsfIter->isEB() && gsfIter->scSigmaIEtaIEta() > sigIetaIetaMaxBarrel_) return true ;
00627 if (gsfIter->isEE() && gsfIter->scSigmaIEtaIEta() < sigIetaIetaMinEndcaps_) return true ;
00628 if (gsfIter->isEE() && gsfIter->scSigmaIEtaIEta() > sigIetaIetaMaxEndcaps_) return true ;
00629 if (gsfIter->isEB() && gsfIter->hadronicOverEm() > hadronicOverEmMaxBarrel_) return true ;
00630 if (gsfIter->isEE() && gsfIter->hadronicOverEm() > hadronicOverEmMaxEndcaps_) return true ;
00631
00632 return false ;
00633 }
00634
00635
00636