22 #include "CLHEP/Units/GlobalPhysicalConstants.h" 28 using namespace reco ;
171 h2_vertexEtaVsPhi =
bookH2(iBooker,
"vertexEtaVsPhi",
"ele momentum #eta vs #phi",
nbineta2D,
etamin,
etamax,
nbinphi2D,
phimin,
phimax,
"#eta",
"#phi (rad)");
172 h2_vertexXvsY =
bookH2(iBooker,
"vertexXvsY",
"ele vertex x vs y",
nbinxyz2D,-0.1,0.1,
nbinxyz2D,-0.1,0.1,
"x (cm)",
"y (cm)" );
180 h1_chi2 =
bookH1(iBooker,
"chi2",
"ele track #chi^{2}",100,0.,15.,
"#Chi^{2}");
182 h1_lostHits =
bookH1(iBooker,
"lostHits",
"ele track # lost hits",5,0.,5.,
"N_{lost hits}");
203 h1_fbrem =
bookH1(iBooker,
"fbrem",
"ele brem fraction",100,0.,1.,
"P_{in} - P_{out} / P_{in}") ;
207 h1_mva =
bookH1(iBooker,
"mva",
"ele identification mva",100,-1.,1.);
211 h1_tkSumPt_dr03 =
bookH1(iBooker,
"tkSumPt_dr03",
"tk isolation sum, dR=0.3",100,0.0,20.,
"TkIsoSum, cone 0.3 (GeV/c)",
"Events",
"ELE_LOGY E1 P");
212 h1_ecalRecHitSumEt_dr03 =
bookH1(iBooker,
"ecalRecHitSumEt_dr03",
"ecal isolation sum, dR=0.3",100,0.0,20.,
"EcalIsoSum, cone 0.3 (GeV)",
"Events",
"ELE_LOGY E1 P");
213 h1_hcalTowerSumEt_dr03 =
bookH1(iBooker,
"hcalTowerSumEt_dr03",
"hcal isolation sum, dR=0.3",100,0.0,20.,
"HcalIsoSum, cone 0.3 (GeV)",
"Events",
"ELE_LOGY E1 P");
230 if (std::string::npos !=
std::string(l.module).find(
"SuperCluster",0))
231 { matchingObjectType =
"SC" ; }
232 if (matchingObjectType==
"")
233 {
edm::LogError(
"ElectronMcFakeValidator::beginJob")<<
"Unknown matching object type !" ; }
235 {
edm::LogInfo(
"ElectronMcFakeValidator::beginJob")<<
"Matching object type: "<<matchingObjectType ; }
266 const BeamSpot bs = *recoBeamSpotHandle ;
273 <<
"Treating "<<gsfElectrons.
product()->size()<<
" electrons" 274 <<
" from event "<<ievt<<
" in run "<<irun<<
" and lumiblock "<<ils ;
277 std::vector<std::pair<double,double> > TTCheck;
278 std::vector<std::pair<double,double> > TTscCheck;
281 reco::GsfElectronCollection::const_iterator gsfIter ;
283 ( gsfIter=gsfElectrons->begin() ;
284 gsfIter!=gsfElectrons->end();
289 (gsfIter->vertex().x()-bs.
position().x()) * (gsfIter->vertex().x()-bs.
position().x()) +
290 (gsfIter->vertex().y()-bs.
position().y()) * (gsfIter->vertex().y()-bs.
position().y()) ;
291 vertexTIP =
sqrt(vertexTIP) ;
294 if (!
selected(gsfIter,vertexTIP)) continue ;
297 reco::SuperClusterCollection::const_iterator moIter ;
299 ( moIter=recoClusters->begin() ;
300 moIter!=recoClusters->end() ;
303 if (moIter->eta()==sclTagRef->eta())
continue ;
317 float SCenergy = moIter->energy();
319 float theta = caloposition.Theta();
321 float SCmomentumX = SCenergy*
sin(theta)*
cos(moIter->phi());
322 float SCmomentumY = SCenergy*
sin(theta)*
sin(moIter->phi());
323 float SCmomentumZ = SCenergy*
cos(theta);
327 float mee2 = p12.Dot(p12);
328 float invMass = mee2 > 0. ?
sqrt(mee2) : 0.;
330 if( invMass < massLow_ || invMass >
massHigh_ ) continue ;
340 bool okGsfFound =
false;
342 reco::GsfElectronCollection::const_iterator gsfIter2 ;
345 ( gsfIter2=gsfElectrons->begin();
346 gsfIter2!=gsfElectrons->end() ;
350 sclProbeRef = gsfIter2->superCluster();
352 if (sclProbeRef->eta() == moIter->eta())
355 bestGsfElectron=*gsfIter2;
358 bool opsign = (((gsfIter->charge())*(bestGsfElectron.
charge()))<0.) ;
360 { okGsfFound =
false ;
364 { okGsfFound =
true ; }
400 double R=TMath::Sqrt(sclRef->x()*sclRef->x() + sclRef->y()*sclRef->y() +sclRef->z()*sclRef->z());
401 double Rt=TMath::Sqrt(sclRef->x()*sclRef->x() + sclRef->y()*sclRef->y());
412 if (bestGsfElectron.
isEB())
423 if (bestGsfElectron.
isEE())
438 if (bestGsfElectron.
isEE()) eleClass+=5;
455 bool invMassTTAlreadyFilled =
false;
456 if(!TTCheck.empty()){
457 int TTCheckDim = TTCheck.size();
458 for(
int i=0 ;
i<TTCheckDim;
i++){
459 if((bestGsfElectron.
eta() == TTCheck.at(
i).first) && (gsfIter->eta() == TTCheck.at(
i).second)){
460 invMassTTAlreadyFilled=
true;
466 if (!invMassTTAlreadyFilled && (((gsfIter->charge())*(bestGsfElectron.
charge()))<0.))
470 float mee2bis = p12.Dot(p12bis);
471 float invMassEE = mee2bis > 0. ?
sqrt(mee2bis) : 0.;
473 std::pair<double,double>
p(gsfIter->eta(),bestGsfElectron.
eta());
474 TTCheck.push_back(
p);
493 float mee2 = p12.Dot(p12) ;
494 float invMass = mee2 > 0. ?
sqrt(mee2) : 0.;
499 (
const reco::SuperClusterCollection::const_iterator & moIter,
531 if (gsfIter->pt()<
minPt_)
return true ;
533 if (gsfIter->isEB() &&
isEE_)
return true ;
534 if (gsfIter->isEE() &&
isEB_)
return true ;
538 if (gsfIter->trackerDrivenSeed() &&
isEcalDriven_)
return true ;
545 if (gsfIter->superCluster()->energy()/cosh(gsfIter->superCluster()->eta())<
minEt_)
return true ;
552 if (gsfIter->isEB() && vertexTIP >
tipMaxBarrel_)
return true ;
555 if (gsfIter->dr03TkSumPt() >
tkIso03Max_)
return true ;
567 if (gsfIter->isEB() && gsfIter->eSuperClusterOverP() <
eOverPMinBarrel_)
return true ;
568 if (gsfIter->isEB() && gsfIter->eSuperClusterOverP() >
eOverPMaxBarrel_)
return true ;
569 if (gsfIter->isEE() && gsfIter->eSuperClusterOverP() <
eOverPMinEndcaps_)
return true ;
570 if (gsfIter->isEE() && gsfIter->eSuperClusterOverP() >
eOverPMaxEndcaps_)
return true ;
void fillMatchedHistos(const reco::SuperClusterCollection::const_iterator &moIter, const reco::GsfElectron &electron)
T getParameter(std::string const &) const
GsfTrackRef gsfTrack() const override
reference to a GsfTrack
EventNumber_t event() const
MonitorElement * h1_dEtaEleCl_propOut_endcaps
MonitorElement * h1_sclSigEtaEta_barrel
MonitorElement * h1_EeleOPout_barrel
MonitorElement * h1_EeleOPout_endcaps
MonitorElement * h1_dEtaSc_propVtx_endcaps
double hadronicOverEmMaxBarrel_
double eta() const final
momentum pseudorapidity
float scSigmaEtaEta() const
double hcalIso03Depth2MaxEndcaps_
double sigIetaIetaMinBarrel_
const LorentzVector & p4(P4Kind kind) const
float eSuperClusterOverP() const
double sigIetaIetaMinEndcaps_
MonitorElement * h1_Hoe_endcaps
bool getByToken(EDGetToken token, Handle< PROD > &result) const
MonitorElement * h1_ecalRecHitSumEt_dr03
edm::InputTag triggerResults_
Sin< T >::type sin(const T &t)
double sigIetaIetaMaxEndcaps_
float computeInvMass(const reco::GsfElectron &e1, const reco::GsfElectron &e2)
MonitorElement * bookH1withSumw2(DQMStore::IBooker &, 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")
Geom::Theta< T > theta() const
edm::EDGetTokenT< reco::GsfElectronCollection > electronCollection_
unsigned long long EventNumber_t
edm::LuminosityBlockNumber_t luminosityBlock() const
MonitorElement * h1_hcalTowerSumEt_dr03
edm::EDGetTokenT< reco::VertexCollection > vertexCollection_
double pt() const final
transverse momentum
MonitorElement * h1_dPhiEleCl_propOut_barrel
int charge() const final
electric charge
MonitorElement * bookH2(DQMStore::IBooker &, 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")
double hadronicOverEmMaxEndcaps_
MonitorElement * h1_Hoe_barrel
MonitorElement * h1_matchedObject_Pt
double ecalIso03MaxEndcaps_
MonitorElement * h1_mee_os
unsigned int LuminosityBlockNumber_t
double sigIetaIetaMaxBarrel_
ElectronTagProbeAnalyzer(const edm::ParameterSet &conf)
~ElectronTagProbeAnalyzer() override
MonitorElement * h1_vertexEta
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
MonitorElement * h1_vertexPt_endcaps
MonitorElement * h1_provenance
float deltaEtaSuperClusterTrackAtVtx() const
float hadronicOverEm() const
void setCurrentFolder(std::string const &fullpath)
MonitorElement * h1_dPhiSc_propVtx_endcaps
MonitorElement * h1_matchingObject_Eta
MonitorElement * h1_tkSumPt_dr03
MonitorElement * h1_Eop_barrel
edm::EDGetTokenT< reco::SuperClusterCollection > matchingObjectCollection_
double hcalIso03Depth1MaxEndcaps_
MonitorElement * h1_classes
MonitorElement * h2_vertexXvsY
float deltaPhiSuperClusterTrackAtVtx() const
Cos< T >::type cos(const T &t)
const Point & vertex() const override
vertex position (overwritten by PF...)
float dr03TkSumPt() const
MonitorElement * h2_vertexEtaVsPhi
MonitorElement * h1_lostHits
Abs< T >::type abs(const T &t)
bool isolationCut(const reco::GsfElectronCollection::const_iterator &gsfIter, double vertexTIP)
edm::EDGetTokenT< reco::BeamSpot > beamSpotTag_
std::string outputInternalPath_
MonitorElement * h1_matchingObject_Pt
float eEleClusterOverPout() const
MonitorElement * h1_fbrem
float deltaPhiEleClusterTrackAtCalo() const
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
double ecalIso03MaxBarrel_
MonitorElement * h1_matchedObject_Eta
edm::EDGetTokenT< reco::TrackCollection > trackCollection_
void analyze(const edm::Event &e, const edm::EventSetup &c) override
MonitorElement * h1_Eop_endcaps
T const * product() const
MonitorElement * h1_vertexZ
MonitorElement * h1_matchedObject_Phi
float deltaEtaEleClusterTrackAtCalo() const
XYZVectorD XYZVector
spatial vector with cartesian internal representation
XYZPointD XYZPoint
point in space with cartesian internal representation
Classification classification() const
MonitorElement * h1_dEtaEleCl_propOut_barrel
MonitorElement * h1_sclSigEtaEta_endcaps
float dr03EcalRecHitSumEt() const
MonitorElement * h1_dPhiEleCl_propOut_endcaps
edm::EDGetTokenT< reco::GsfTrackCollection > gsftrackCollection_
MonitorElement * h1_matchingObject_Phi
MonitorElement * h1_vertexPt_barrel
SuperClusterRef superCluster() const override
reference to a SuperCluster
bool generalCut(const reco::GsfElectronCollection::const_iterator &gsfIter)
bool trackerDrivenSeed() const
float dr03HcalTowerSumEt() const
const Point & position() const
position
MonitorElement * bookH1(DQMStore::IBooker &, 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")
bool etCut(const reco::GsfElectronCollection::const_iterator &gsfIter)
MonitorElement * h1_foundHits
MonitorElement * h1_dPhiSc_propVtx_barrel
double phi() const final
momentum azimuthal angle
math::XYZTLorentzVector LorentzVector
Lorentz vector.
MonitorElement * h1_dEtaSc_propVtx_barrel
double hcalIso03Depth1MaxBarrel_
bool selected(const reco::GsfElectronCollection::const_iterator &gsfIter, double vertexTIP)
MonitorElement * h1_sclEt
bool ecalDrivenSeed() const
bool idCut(const reco::GsfElectronCollection::const_iterator &gsfIter)