1734 using namespace edm;
1738 const float BARL = 1.4442;
1740 const float END_HI = 2.5;
1745 e.
getByLabel(
"trackAssociatorByHitsForPhotonValidation",theHitsAssociator);
1751 LogInfo(
"PhotonValidator") <<
"PhotonValidator Analyzing event number: " << e.
id() <<
" Global Counter " <<
nEvt_ <<
"\n";
1771 if (!photonHandle.
isValid()) {
1773 <<
"Error! Can't get the Photon collection " 1781 if (!pfCandidateHandle.
isValid()) {
1782 edm::LogError(
"PhotonValidator") <<
"Error! Can't get the product pfCandidates "<< std::endl ;
1787 if (
fName_ ==
"pfPhotonValidator") {
1789 if ( ! phoToParticleBasedIsoMapHandle.
isValid()) {
1790 edm::LogInfo(
"PhotonValidator") <<
"Error! Can't get the product: valueMap photons to particle based iso " << std::endl;
1793 phoToParticleBasedIsoMap = *(phoToParticleBasedIsoMapHandle.
product());
1809 for (
trackingRecHit_iterator itHits=iTk->extra()->recHitsBegin(); itHits!=iTk->extra()->recHitsEnd(); ++itHits ) {
1810 if ( (*itHits)->isValid() ) {
1827 for (
trackingRecHit_iterator itHits=iTk->extra()->recHitsBegin(); itHits!=iTk->extra()->recHitsEnd(); ++itHits ) {
1828 if ( (*itHits)->isValid() ) {
1840 std::vector<SimTrack> theSimTracks;
1841 std::vector<SimVertex> theSimVertices;
1856 theSimTracks.insert(theSimTracks.end(),SimTk->begin(),SimTk->end());
1857 theSimVertices.insert(theSimVertices.end(),SimVtx->begin(),SimVtx->end());
1884 trackingParticles = *(ElectronTPHandle.
product());
1889 std::vector<reco::PhotonCollection::const_iterator> StoRMatchedConvertedPhotons;
1907 vector<reco::SimToRecoCollection*> StoRCollPtrs;
1908 StoRCollPtrs.push_back(&OISimToReco);
1909 StoRCollPtrs.push_back(&IOSimToReco);
1910 vector<reco::RecoToSimCollection*> RtoSCollPtrs;
1911 RtoSCollPtrs.push_back(&OIRecoToSim);
1912 RtoSCollPtrs.push_back(&IORecoToSim);
1914 for (
int i=0;
i<2;
i++)
1916 for (
int i=0;
i<2;
i++)
1920 std::vector<reco::PhotonRef> myPhotons;
1922 for(
unsigned int iPho=0; iPho < photonHandle->size(); iPho++) {
1925 if ( fabs(phoRef->eta()) > 2.5 )
continue;
1926 myPhotons.push_back(phoRef);
1929 std::sort(myPhotons.begin(), myPhotons.end(), sortPhotons());
1931 if ( myPhotons.size() >=2 ) {
1932 if ( myPhotons[0]->
et() > 40 && myPhotons[1]->et() > 25 ) {
1937 float gamgamMass2 = p12.Dot(p12);
1938 float gamgamMass2_regr1 = p12_regr1.Dot(p12_regr1);
1939 float gamgamMass2_regr2 = p12_regr2.Dot(p12_regr2);
1942 if ( gamgamMass2 > 0 ) {
1945 if ( myPhotons[0]->isEB() && myPhotons[1]->isEB() )
1947 if ( ( myPhotons[0]->isEE() && myPhotons[1]->isEE() ) ||
1948 ( myPhotons[0]->isEE() && myPhotons[1]->isEB() ) ||
1949 ( myPhotons[0]->isEB() && myPhotons[1]->isEE() ) )
1952 if ( myPhotons[0]->
r9() > 0.94 && myPhotons[1]->
r9() > 0.94 ) {
1954 if ( myPhotons[0]->isEB() && myPhotons[1]->isEB() )
1956 if ( ( myPhotons[0]->isEE() && myPhotons[1]->isEE() ) ||
1957 ( myPhotons[0]->isEE() && myPhotons[1]->isEB() ) ||
1958 ( myPhotons[0]->isEB() && myPhotons[1]->isEE() ) )
1966 if ( chi2Prob1 > 0.0005 && chi2Prob2 > 0.0005 ) {
1968 if ( myPhotons[0]->isEB() && myPhotons[1]->isEB() ) {
1971 if ( ( myPhotons[0]->isEE() && myPhotons[1]->isEE() ) ||
1972 ( myPhotons[0]->isEE() && myPhotons[1]->isEB() ) ||
1973 ( myPhotons[0]->isEB() && myPhotons[1]->isEE() ) ) {
1981 if ( chi2Prob1 > 0.0005 ) {
1983 if ( myPhotons[0]->isEB() && myPhotons[1]->isEB() ) {
1986 if ( myPhotons[0]->isEE() || myPhotons[1]->isEE() ) {
1994 if ( chi2Prob1 > 0.0005 ) {
1996 if ( myPhotons[0]->isEB() && myPhotons[1]->isEB() ) {
1999 if ( myPhotons[0]->isEE() || myPhotons[1]->isEE() ) {
2008 if ( gamgamMass2_regr1 > 0 ) {
2011 if ( myPhotons[0]->isEB() && myPhotons[1]->isEB() )
2013 if ( ( myPhotons[0]->isEE() && myPhotons[1]->isEE() ) ||
2014 ( myPhotons[0]->isEE() && myPhotons[1]->isEB() ) ||
2015 ( myPhotons[0]->isEB() && myPhotons[1]->isEE() ) )
2018 if ( myPhotons[0]->
r9() > 0.94 && myPhotons[1]->
r9() > 0.94 ) {
2020 if ( myPhotons[0]->isEB() && myPhotons[1]->isEB() )
2022 if ( ( myPhotons[0]->isEE() && myPhotons[1]->isEE() ) ||
2023 ( myPhotons[0]->isEE() && myPhotons[1]->isEB() ) ||
2024 ( myPhotons[0]->isEB() && myPhotons[1]->isEE() ) )
2034 if ( chi2Prob1 > 0.0005 && chi2Prob2 > 0.0005 ) {
2036 if ( myPhotons[0]->isEB() && myPhotons[1]->isEB() ) {
2039 if ( ( myPhotons[0]->isEE() && myPhotons[1]->isEE() ) ||
2040 ( myPhotons[0]->isEE() && myPhotons[1]->isEB() ) ||
2041 ( myPhotons[0]->isEB() && myPhotons[1]->isEE() ) ) {
2049 if ( chi2Prob1 > 0.0005 ) {
2051 if ( myPhotons[0]->isEB() && myPhotons[1]->isEB() ) {
2054 if ( myPhotons[0]->isEE() || myPhotons[1]->isEE() ) {
2062 if ( chi2Prob1 > 0.0005 ) {
2064 if ( myPhotons[0]->isEB() && myPhotons[1]->isEB() ) {
2067 if ( myPhotons[0]->isEE() || myPhotons[1]->isEE() ) {
2077 if ( gamgamMass2_regr2 > 0 ) {
2080 if ( myPhotons[0]->isEB() && myPhotons[1]->isEB() )
2082 if ( ( myPhotons[0]->isEE() && myPhotons[1]->isEE() ) ||
2083 ( myPhotons[0]->isEE() && myPhotons[1]->isEB() ) ||
2084 ( myPhotons[0]->isEB() && myPhotons[1]->isEE() ) )
2087 if ( myPhotons[0]->
r9() > 0.94 && myPhotons[1]->
r9() > 0.94 ) {
2089 if ( myPhotons[0]->isEB() && myPhotons[1]->isEB() )
2091 if ( ( myPhotons[0]->isEE() && myPhotons[1]->isEE() ) ||
2092 ( myPhotons[0]->isEE() && myPhotons[1]->isEB() ) ||
2093 ( myPhotons[0]->isEB() && myPhotons[1]->isEE() ) )
2103 if ( chi2Prob1 > 0.0005 && chi2Prob2 > 0.0005 ) {
2105 if ( myPhotons[0]->isEB() && myPhotons[1]->isEB() ) {
2108 if ( ( myPhotons[0]->isEE() && myPhotons[1]->isEE() ) ||
2109 ( myPhotons[0]->isEE() && myPhotons[1]->isEB() ) ||
2110 ( myPhotons[0]->isEB() && myPhotons[1]->isEE() ) ) {
2118 if ( chi2Prob1 > 0.0005 ) {
2120 if ( myPhotons[0]->isEB() && myPhotons[1]->isEB() ) {
2123 if ( myPhotons[0]->isEE() || myPhotons[1]->isEE() ) {
2131 if ( chi2Prob1 > 0.0005 ) {
2133 if ( myPhotons[0]->isEB() && myPhotons[1]->isEB() ) {
2136 if ( myPhotons[0]->isEE() || myPhotons[1]->isEE() ) {
2160 for ( std::vector<PhotonMCTruth>::const_iterator mcPho=mcPhotons.begin(); mcPho !=mcPhotons.end(); mcPho++) {
2161 if ( (*mcPho).fourMomentum().et() <
minPhoEtCut_ )
continue;
2163 for ( HepMC::GenEvent::particle_const_iterator mcIter=myGenEvent->particles_begin(); mcIter != myGenEvent->particles_end(); mcIter++ ) {
2164 if ( (*mcIter)->pdg_id() != 22 )
continue;
2165 bool isTheSame=
false;
2167 if ( (*mcIter)->production_vertex() ) {
2168 if ( (*mcIter)->production_vertex()->particles_begin(
HepMC::parents) !=
2170 mother = *((*mcIter)->production_vertex()->particles_begin(
HepMC::parents));
2176 float mcPhi= (*mcPho).fourMomentum().phi();
2178 mcEta_= (*mcPho).fourMomentum().pseudoRapidity();
2180 mcConvR_= (*mcPho).vertex().perp();
2188 if ( fabs(
mcEta_) > END_HI )
continue;
2192 if ( mother ==
nullptr 2193 || (mother !=
nullptr && mother->pdg_id() == 22)
2194 || (mother !=
nullptr && mother->pdg_id() == 25)
2195 || (mother !=
nullptr && mother->pdg_id() == 35) )
2197 double dPt = fabs((*mcIter)->momentum().perp() - (*mcPho).fourMomentum().et());
2198 float phiMother=(*mcIter)->momentum().phi();
2200 double dEta = fabs( (*mcIter)->momentum().eta() - (*mcPho).fourMomentum().pseudoRapidity() );
2202 if ( dEta <=0.0001 && dPhi <=0.0001 && dPt <=0.0001)
2206 if ( ! isTheSame )
continue;
2223 bool goodSimConversion=
false;
2224 bool visibleConversion=
false;
2225 bool visibleConversionsWithTwoSimTracks=
false;
2226 if ( (*mcPho).isAConversion() == 1 ) {
2238 if ( ( fabs(
mcEta_) <= BARL && mcConvR_ <85 ) ||
2239 ( fabs(
mcEta_) > BARL && fabs(
mcEta_) <=END_HI && fabs( (*mcPho).vertex().z() ) < 210 ) ) visibleConversion=
true;
2244 for(
size_t i = 0;
i < trackingParticles.size(); ++
i){
2246 if ( fabs( tp->vx() - (*mcPho).vertex().x() ) < 0.001 &&
2247 fabs( tp->vy() - (*mcPho).vertex().y() ) < 0.001 &&
2248 fabs( tp->vz() - (*mcPho).vertex().z() ) < 0.001) {
2253 if (
theConvTP_.
size() == 2 ) visibleConversionsWithTwoSimTracks=
true;
2254 goodSimConversion=
false;
2256 if ( visibleConversion && visibleConversionsWithTwoSimTracks ) goodSimConversion=
true;
2257 if ( goodSimConversion ) {
2280 float minDelta=10000.;
2281 std::vector<reco::PhotonRef> thePhotons;
2286 for(
unsigned int iPho=0; iPho < photonHandle->size(); iPho++) {
2288 thePhotons.push_back(aPho);
2289 float phiPho=aPho->phi();
2290 float etaPho=aPho->eta();
2293 if ( deltaPhi >
pi ) deltaPhi -= twopi;
2294 if ( deltaPhi < -
pi) deltaPhi += twopi;
2295 deltaPhi=
pow(deltaPhi,2);
2296 deltaEta=
pow(deltaEta,2);
2298 if ( delta<0.1 && delta < minDelta ) {
2305 if ( iMatch>-1 ) matched=
true;
2322 if ( ! matched)
continue;
2326 bool phoIsInBarrel=
false;
2327 bool phoIsInEndcap=
false;
2328 bool phoIsInEndcapP=
false;
2329 bool phoIsInEndcapM=
false;
2333 if ( fabs(matchingPho->superCluster()->position().eta() ) < 1.479 ) {
2337 if ( matchingPho->superCluster()->position().eta() > 0) phoIsInEndcapP=
true;
2338 if ( matchingPho->superCluster()->position().eta() < 0) phoIsInEndcapM=
true;
2343 if ( phoIsInBarrel ) {
2346 if (!ecalRecHitHandle.
isValid()) {
2350 <<
"Error! Can't get the product " 2355 }
else if ( phoIsInEndcap ) {
2359 if (!ecalRecHitHandle.
isValid()) {
2363 <<
"Error! Can't get the product " 2372 float photonE = matchingPho->energy();
2373 float sigmaEoE = matchingPho->getCorrectedEnergyError(matchingPho->getCandidateP4type())/matchingPho->energy();
2375 float photonEt= matchingPho->pt();
2378 float r9 = matchingPho->r9();
2380 float r1 = matchingPho->r1x5();
2381 float r2 = matchingPho->r2x5();
2382 float sigmaIetaIeta = matchingPho->sigmaIetaIeta();
2384 float hOverE = matchingPho->hadronicOverEm();
2385 float newhOverE = matchingPho->hadTowOverEm();
2386 float ecalIso = matchingPho->ecalRecHitSumEtConeDR04();
2387 float hcalIso = matchingPho->hcalTowerSumEtConeDR04();
2388 float newhcalIso = matchingPho->hcalTowerSumEtBcConeDR04();
2389 float trkIso = matchingPho->trkSumPtSolidConeDR04();
2390 float nIsoTrk = matchingPho->nTrkSolidConeDR04();
2392 float chargedHadIso = matchingPho->chargedHadronIso();
2393 float neutralHadIso = matchingPho->neutralHadronIso();
2394 float photonIso = matchingPho->photonIso();
2395 float etOutsideMustache = matchingPho->etOutsideMustache();
2396 int nClusterOutsideMustache = matchingPho->nClusterOutsideMustache();
2397 float pfMVA = matchingPho->pfMVA();
2403 std::vector< std::pair<DetId, float> >::const_iterator rhIt;
2404 bool atLeastOneDeadChannel=
false;
2405 for(
reco::CaloCluster_iterator bcIt = matchingPho->superCluster()->clustersBegin();bcIt != matchingPho->superCluster()->clustersEnd(); ++bcIt) {
2406 for(rhIt = (*bcIt)->hitsAndFractions().begin();rhIt != (*bcIt)->hitsAndFractions().end(); ++rhIt) {
2409 if (rhIt->first == (*it).id() ) {
2410 if ( (*it).recoFlag() == 9 ) {
2411 atLeastOneDeadChannel=
true;
2419 if ( atLeastOneDeadChannel ) {
2426 if ( phoIsInBarrel )
2438 h_scEt_[
type][0]->
Fill( matchingPho->superCluster()->energy()/cosh( matchingPho->superCluster()->eta()) );
2439 if ( phoIsInEndcap )
h_psE_->
Fill( matchingPho->superCluster()->preshowerEnergy() ) ;
2513 h_phoDEta_[0]->
Fill ( matchingPho->eta() - (*mcPho).fourMomentum().eta() );
2517 h_nConv_[0][0]->
Fill(
float( matchingPho->conversions().size()));
2518 h_nConv_[1][0]->
Fill(
float( matchingPho->conversionsOneLeg().size()));
2528 p_eResVsEt_[0][0]->
Fill ((*mcPho).fourMomentum().et(), photonE/(*mcPho).fourMomentum().e() ) ;
2539 if ( (*mcPho).isAConversion() == 0 ) {
2572 if ( photonE/(*mcPho).fourMomentum().e() < 0.3 && photonE/(*mcPho).fourMomentum().e() > 0.1 ) {
2577 if ( (r9>0.94 && phoIsInBarrel) || (r9>0.95 && phoIsInEndcap) ) {
2583 p_eResVsEt_[0][1]->
Fill ((*mcPho).fourMomentum().et(), photonE/(*mcPho).fourMomentum().e() ) ;
2589 }
else if ( ( r9 <= 0.94&& phoIsInBarrel) || ( r9 <= 0.95&& phoIsInEndcap) ) {
2594 p_eResVsEt_[0][2]->
Fill ((*mcPho).fourMomentum().et(), photonE/(*mcPho).fourMomentum().e() ) ;
2600 h2_eResVsEt_[0][2]->
Fill ((*mcPho).fourMomentum().et(), photonE/(*mcPho).fourMomentum().e() ) ;
2606 if ( phoIsInBarrel ) {
2608 h_scEt_[
type][1]->
Fill( matchingPho->superCluster()->energy()/cosh( matchingPho->superCluster()->eta()) );
2632 h_nConv_[1][1]->
Fill(
float( matchingPho->conversionsOneLeg().size()));
2638 p_sceResVsR9_[1]->
Fill (r9, matchingPho->superCluster()->energy()/(*mcPho).fourMomentum().e() ) ;
2641 h2_sceResVsR9_[1]->
Fill (r9, matchingPho->superCluster()->energy()/(*mcPho).fourMomentum().e() ) ;
2644 h2_eResVsEt_[1][0]->
Fill ((*mcPho).fourMomentum().et(), photonE/(*mcPho).fourMomentum().e() ) ;
2646 p_eResVsEt_[1][0]->
Fill ((*mcPho).fourMomentum().et(), photonE/(*mcPho).fourMomentum().e() ) ;
2647 p_eResVsNVtx_[1][0]->
Fill (
float(vtxH->size()), photonE/(*mcPho).fourMomentum().e() ) ;
2657 p_eResVsEt_[1][1]->
Fill ((*mcPho).fourMomentum().et(), photonE/(*mcPho).fourMomentum().e() ) ;
2658 p_eResVsNVtx_[1][1]->
Fill (
float(vtxH->size()), photonE/(*mcPho).fourMomentum().e() ) ;
2667 p_eResVsEt_[1][2]->
Fill ((*mcPho).fourMomentum().et(), photonE/(*mcPho).fourMomentum().e() ) ;
2668 p_eResVsNVtx_[1][2]->
Fill (
float(vtxH->size()), photonE/(*mcPho).fourMomentum().e() ) ;
2672 h2_eResVsEt_[1][2]->
Fill ((*mcPho).fourMomentum().et(), photonE/(*mcPho).fourMomentum().e() ) ;
2677 if ( phoIsInEndcap ) {
2679 h_scEt_[
type][2]->
Fill( matchingPho->superCluster()->energy()/cosh( matchingPho->superCluster()->eta()) );
2703 h_nConv_[1][2]->
Fill(
float( matchingPho->conversionsOneLeg().size()));
2709 p_sceResVsR9_[2]->
Fill (r9, matchingPho->superCluster()->energy()/(*mcPho).fourMomentum().e() ) ;
2712 h2_sceResVsR9_[2]->
Fill (r9, matchingPho->superCluster()->energy()/(*mcPho).fourMomentum().e() ) ;
2715 h2_eResVsEt_[2][0]->
Fill ((*mcPho).fourMomentum().et(), photonE/(*mcPho).fourMomentum().e() ) ;
2718 p_eResVsEt_[2][0]->
Fill ((*mcPho).fourMomentum().et(), photonE/(*mcPho).fourMomentum().e() ) ;
2719 p_eResVsNVtx_[2][0]->
Fill (
float(vtxH->size()), photonE/(*mcPho).fourMomentum().e() ) ;
2730 p_eResVsEt_[2][1]->
Fill ((*mcPho).fourMomentum().et(), photonE/(*mcPho).fourMomentum().e() ) ;
2731 p_eResVsNVtx_[2][1]->
Fill (
float(vtxH->size()), photonE/(*mcPho).fourMomentum().e() ) ;
2740 p_eResVsEt_[2][2]->
Fill ((*mcPho).fourMomentum().et(), photonE/(*mcPho).fourMomentum().e() ) ;
2741 p_eResVsNVtx_[2][2]->
Fill (
float(vtxH->size()), photonE/(*mcPho).fourMomentum().e() ) ;
2746 h2_eResVsEt_[2][2]->
Fill ((*mcPho).fourMomentum().et(), photonE/(*mcPho).fourMomentum().e() ) ;
2753 if (
fName_ ==
"pfPhotonValidator") {
2755 float SumPtIsoValCh = 0.;
2756 float SumPtIsoValNh = 0.;
2757 float SumPtIsoValPh = 0.;
2759 float SumPtIsoValCleanCh = 0.;
2760 float SumPtIsoValCleanNh = 0.;
2761 float SumPtIsoValCleanPh = 0.;
2763 for(
unsigned int lCand=0; lCand < pfCandidateHandle->size(); lCand++) {
2765 float dR=
deltaR(matchingPho->eta(), matchingPho->phi(),pfCandRef->eta(), pfCandRef->phi());
2773 SumPtIsoValCh += pfCandRef->pt();
2781 SumPtIsoValNh += pfCandRef->pt();
2789 SumPtIsoValPh += pfCandRef->pt();
2798 for( std::vector<reco::PFCandidateRef>::const_iterator
i = phoToParticleBasedIsoMap[matchingPho].
begin();
i != phoToParticleBasedIsoMap[matchingPho].
end(); ++
i ) {
2799 if ( (*
i) == pfCandRef ) {
2804 if ( skip )
continue;
2806 SumPtIsoValCleanCh += pfCandRef->pt();
2814 SumPtIsoValCleanNh += pfCandRef->pt();
2822 SumPtIsoValCleanPh += pfCandRef->pt();
2842 if( phoIsInBarrel) {
2861 if ( ! (visibleConversion && visibleConversionsWithTwoSimTracks ) )
continue;
2866 if ( phoIsInBarrel )
h_r9_[1][1]->
Fill( r9 );
2867 if ( phoIsInEndcap )
h_r9_[1][2]->
Fill( r9 );
2870 if ( fabs(mcEta_) <=1.) {
2882 bool atLeastOneRecoTwoTrackConversion=
false;
2883 for (
unsigned int iConv=0; iConv<conversions.
size(); iConv++) {
2885 double like = aConv->MVAout();
2889 p_EoverEtrueVsEta_[1]->
Fill (mcEta_,matchingPho->superCluster()->energy()/ (*mcPho).fourMomentum().e() ) ;
2893 const std::vector<edm::RefToBase<reco::Track> >
tracks = aConv->tracks();
2894 if (tracks.size() < 2 )
continue;
2895 atLeastOneRecoTwoTrackConversion=
true;
2899 if ( tracks.size()==2 ) {
2905 if ( (fabs(mcEta_) > 1.1 && fabs (mcEta_) < 1.4 ) &&
2907 if ( fabs( aConv->pairCotThetaSeparation() ) >
dCotCutValue_ )
continue;
2912 std::map<const reco::Track*,TrackingParticleRef> myAss;
2913 std::map<const reco::Track*,TrackingParticleRef>::const_iterator itAss;
2914 std::map<reco::TrackRef,TrackingParticleRef>::const_iterator itAssMin;
2915 std::map<reco::TrackRef,TrackingParticleRef>::const_iterator itAssMax;
2919 for (
unsigned int i=0;
i<tracks.size();
i++) {
2934 std::vector<std::pair<RefToBase<reco::Track>,
double> > trackV;
2938 trackV = (std::vector<std::pair<RefToBase<reco::Track>,
double> >) q[
theConvTP_[0]];
2940 trackV = (std::vector<std::pair<RefToBase<reco::Track>,
double> >) q[
theConvTP_[1]];
2944 if ( trackV.empty() )
continue;
2955 float refP =-99999.;
2956 float refPt =-99999.;
2957 if ( aConv->conversionVertex().isValid() ) {
2958 refP=
sqrt(aConv->refittedPairMomentum().Mag2());
2959 refPt=
sqrt(aConv->refittedPairMomentum().perp2());
2961 float invM = aConv->pairInvariantMass();
2968 if ( tracks.size() ==2 ) {
2976 if (!aConv->caloCluster().empty())
h_convEta_[1]->
Fill( aConv->caloCluster()[0]->eta() );
2978 float trkProvenance=3;
2979 if ( tracks[0]->
algoName() ==
"outInEcalSeededConv" && tracks[1]->algoName() ==
"outInEcalSeededConv" ) trkProvenance=0;
2980 if ( tracks[0]->
algoName() ==
"inOutEcalSeededConv" && tracks[1]->algoName() ==
"inOutEcalSeededConv" ) trkProvenance=1;
2981 if ( ( tracks[0]->
algoName() ==
"outInEcalSeededConv" && tracks[1]->
algoName() ==
"inOutEcalSeededConv") ||
2982 ( tracks[1]->algoName() ==
"outInEcalSeededConv" && tracks[0]->algoName() ==
"inOutEcalSeededConv") ) trkProvenance=2;
2983 if ( trkProvenance==3 ) {
2997 if ( phoIsInBarrel )
h_r9_[2][1]->
Fill( r9 );
2998 if ( phoIsInEndcap )
h_r9_[2][2]->
Fill( r9 );
3001 if (!aConv->caloCluster().empty())
h_convEta_[2]->
Fill( aConv->caloCluster()[0]->eta() );
3011 if ( aConv->conversionVertex().isValid() ) {
3012 float chi2Prob =
ChiSquaredProbability( aConv->conversionVertex().chi2(), aConv->conversionVertex().ndof() );
3013 if ( chi2Prob > 0) {
3020 if ( chi2Prob > 0.0005) {
3030 if ( chi2Prob > 0.0005 ) {
3031 if (!aConv->caloCluster().empty()) {
3034 h_convERes_[0][0]->
Fill( aConv->caloCluster()[0]->energy() / (*mcPho).fourMomentum().e() );
3042 if ( phoIsInBarrel ) {
3043 if (!aConv->caloCluster().empty())
h_convERes_[0][1]->
Fill(aConv->caloCluster()[0]->energy() / (*mcPho).fourMomentum().e() );
3047 if ( phoIsInEndcap ) {
3048 if (!aConv->caloCluster().empty())
h_convERes_[0][2]->
Fill(aConv->caloCluster()[0]->energy() / (*mcPho).fourMomentum().e() );
3067 float eoverp= -99999.;
3069 if ( aConv->conversionVertex().isValid() ) {
3070 eoverp = photonE/
sqrt(aConv->refittedPairMomentum().Mag2());
3081 p_eResVsR_ ->
Fill ( mcConvR_, photonE / (*mcPho).fourMomentum().e() );
3090 p_EoverEtrueVsEta_[0]->
Fill (mcEta_,matchingPho->superCluster()->energy()/ (*mcPho).fourMomentum().e() ) ;
3091 p_EoverEtrueVsR_[0]->
Fill (mcConvR_,matchingPho->superCluster()->energy()/ (*mcPho).fourMomentum().e() ) ;
3097 float dPhiTracksAtVtx = aConv->dPhiTracksAtVtx();
3110 if ( phoIsInBarrel ) {
3112 if ( aConv->conversionVertex().isValid() ) {
3128 if ( phoIsInEndcap ) {
3130 if ( aConv->conversionVertex().isValid() ) {
3142 if ( aConv->conversionVertex().isValid() ) {
3167 float signX= aConv->refittedPairMomentum().x()/fabs(aConv->refittedPairMomentum().x());
3168 float signY= aConv->refittedPairMomentum().y()/fabs(aConv->refittedPairMomentum().y());
3169 float signZ= aConv->refittedPairMomentum().z()/fabs(aConv->refittedPairMomentum().z());
3180 float thetaConv=aConv->refittedPairMomentum().Theta();
3181 float thetaSC=matchingPho->superCluster()->position().theta();
3182 float rSC=
sqrt(matchingPho->superCluster()->position().x()*matchingPho->superCluster()->position().x() +
3183 matchingPho->superCluster()->position().y()*matchingPho->superCluster()->position().y() );
3184 float zSC=matchingPho->superCluster()->position().z();
3185 float zPV =
sqrt(rSC*rSC+zSC*zSC)*
sin( thetaConv - thetaSC)/
sin(thetaConv);
3190 if ( phoIsInBarrel ) {
3193 }
else if ( phoIsInEndcap) {
3196 }
else if ( phoIsInEndcapP) {
3199 }
else if ( phoIsInEndcapM) {
3204 p_dzPVVsR_ ->
Fill(mcConvR_, zPV - (*mcPho).primaryVertex().z() );
3209 float dPhiTracksAtEcal=-99;
3210 float dEtaTracksAtEcal=-99;
3211 if (!aConv->bcMatchingWithTracks().empty() && aConv->bcMatchingWithTracks()[0].
isNonnull() && aConv->bcMatchingWithTracks()[1].
isNonnull() ) {
3213 float recoPhi1 = aConv->ecalImpactPosition()[0].phi();
3214 float recoPhi2 = aConv->ecalImpactPosition()[1].phi();
3215 float recoEta1 = aConv->ecalImpactPosition()[0].eta();
3216 float recoEta2 = aConv->ecalImpactPosition()[1].eta();
3217 float bcPhi1 = aConv->bcMatchingWithTracks()[0]->phi();
3218 float bcPhi2 = aConv->bcMatchingWithTracks()[1]->phi();
3225 dPhiTracksAtEcal = recoPhi1 -recoPhi2;
3227 dEtaTracksAtEcal = recoEta1 -recoEta2;
3237 if ( phoIsInBarrel ) {
3241 if ( phoIsInEndcap ) {
3247 for (
unsigned int i=0;
i<tracks.size();
i++) {
3249 itAss= myAss.find( tfrb.
get() );
3250 if ( itAss == myAss.end() )
continue;
3252 float trkProvenance=3;
3253 if ( tracks[0]->
algoName() ==
"outInEcalSeededConv" && tracks[1]->algoName() ==
"outInEcalSeededConv" ) trkProvenance=0;
3254 if ( tracks[0]->
algoName() ==
"inOutEcalSeededConv" && tracks[1]->algoName() ==
"inOutEcalSeededConv" ) trkProvenance=1;
3255 if ( ( tracks[0]->
algoName() ==
"outInEcalSeededConv" && tracks[1]->
algoName() ==
"inOutEcalSeededConv") ||
3256 ( tracks[1]->algoName() ==
"outInEcalSeededConv" && tracks[0]->algoName() ==
"inOutEcalSeededConv") ) trkProvenance=2;
3270 float simPt =
sqrt( ((*itAss).second)->momentum().perp2() );
3275 if ( aConv->conversionVertex().isValid() ) {
3276 reco::Track refTrack= aConv->conversionVertex().refittedTracks()[
i];
3279 refPt=
sqrt (px*px + py*py );
3281 float ptres= refPt - simPt ;
3283 float pterror = aConv->conversionVertex().refittedTracks()[
i].ptError();
3296 if ( !aConv->bcMatchingWithTracks().empty() && aConv->bcMatchingWithTracks()[
i].
isNonnull() )
hBCEnergyOverTrackPout_[0]->
Fill ( aConv->bcMatchingWithTracks()[
i]->energy()/
sqrt(aConv->tracks()[
i]->outerMomentum().Mag2()) );
3298 if ( phoIsInBarrel ) {
3303 if ( !aConv->bcMatchingWithTracks().empty() && aConv->bcMatchingWithTracks()[
i].
isNonnull() )
hBCEnergyOverTrackPout_[1]->
Fill ( aConv->bcMatchingWithTracks()[
i]->energy()/
sqrt(aConv->tracks()[
i]->outerMomentum().Mag2()) );
3306 if ( phoIsInEndcap ) {
3311 if ( !aConv->bcMatchingWithTracks().empty() && aConv->bcMatchingWithTracks()[
i].
isNonnull() )
hBCEnergyOverTrackPout_[2]->
Fill ( aConv->bcMatchingWithTracks()[
i]->energy()/
sqrt(aConv->tracks()[
i]->outerMomentum().Mag2()) );
3325 if ( !atLeastOneRecoTwoTrackConversion ) {
3326 for (
unsigned int iConv=0; iConv<conversionsOneLeg.
size(); iConv++) {
3328 const std::vector<edm::RefToBase<reco::Track> > tracks = aConv->tracks();
3334 std::map<const reco::Track*,TrackingParticleRef> myAss;
3335 for (
unsigned int i=0;
i<tracks.size();
i++) {
3339 p_nHitsVsRSL_[0] ->
Fill (mcConvR_,
float(tracks[0]->numberOfValidHits()-0.0001) );
3343 float eoverp = photonE/tracks[0]->p();
3345 if ( phoIsInBarrel ) {
3351 if ( fabs(mcEta_) <=1.) {
3361 std::vector<std::pair<RefToBase<reco::Track>,
double> > trackV;
3365 trackV = (std::vector<std::pair<RefToBase<reco::Track>,
double> >) q[
theConvTP_[0]];
3367 trackV = (std::vector<std::pair<RefToBase<reco::Track>,
double> >) q[
theConvTP_[1]];
3371 if ( trackV.empty() )
continue;
3404 for( reco::PhotonCollection::const_iterator iPho = photonCollection.begin(); iPho != photonCollection.end(); iPho++) {
3408 for (
unsigned int iConv=0; iConv<conversions.
size(); iConv++) {
3410 double like = aConv->MVAout();
3413 const std::vector<edm::RefToBase<reco::Track> > tracks = aConv->tracks();
3414 if (tracks.size() < 2 )
continue;
3422 bool phoIsInBarrel=
false;
3423 bool phoIsInEndcap=
false;
3424 if ( fabs(aPho.
superCluster()->position().eta()) < 1.479 ) {
3431 if ( ( fabs(mcEta_) > 1.1 && fabs (mcEta_) < 1.4 ) &&
3433 if ( fabs( aConv->pairCotThetaSeparation() ) >
dCotCutValue_ )
continue;
3439 if ( aConv->conversionVertex().isValid() )
h_RecoConvTwoTracks_[2]->
Fill( aConv->conversionVertex().position().perp2() );
3446 for ( std::vector<PhotonMCTruth>::const_iterator mcPho=mcPhotons.begin(); mcPho !=mcPhotons.end(); mcPho++) {
3448 float mcPhi= (*mcPho).fourMomentum().phi();
3451 mcEta_= (*mcPho).fourMomentum().pseudoRapidity();
3459 if ( fabs(mcEta_) > END_HI )
continue;
3465 if ( (*mcPho).isAConversion() != 1 )
continue;
3466 if (!( ( fabs(mcEta_) <= BARL && mcConvR_ <85 ) ||
3467 ( fabs(mcEta_) > BARL && fabs(mcEta_) <=END_HI && fabs( (*mcPho).vertex().z() ) < 210 ) ) )
3471 for(
size_t i = 0;
i < trackingParticles.size(); ++
i){
3473 if ( fabs( tp->vx() - (*mcPho).vertex().x() ) < 0.0001 &&
3474 fabs( tp->vy() - (*mcPho).vertex().y() ) < 0.0001 &&
3475 fabs( tp->vz() - (*mcPho).vertex().z() ) < 0.0001) {
3485 std::vector<std::pair<RefToBase<reco::Track>,
double> > trackV1, trackV2;
3487 auto itP1 = p1.
find(tk1);
3488 auto itP2 = p2.
find(tk2);
3489 bool good = (itP1 != p1.
end()) and (not itP1->val.empty()) and (itP2 != p2.
end()) and (not itP2->val.empty());
3491 itP1 = p1.
find(tk2);
3492 itP2 = p2.
find(tk1);
3493 good = (itP1 != p1.
end()) and (not itP1->val.empty()) and (itP2 != p2.
end()) and (not itP2->val.empty());
3496 std::vector<std::pair<TrackingParticleRef, double> >
const& tp1 = itP1->val;
3497 std::vector<std::pair<TrackingParticleRef, double> >
const& tp2 = itP2->val;
3502 if (
abs(tpr1->pdgId())==11&&
abs(tpr2->pdgId())==11) {
3503 if ( (tpr1->parentVertex()->sourceTracks_end()-tpr1->parentVertex()->sourceTracks_begin()==1) &&
3504 (tpr2->parentVertex()->sourceTracks_end()-tpr2->parentVertex()->sourceTracks_begin()==1)) {
3505 if (tpr1->parentVertex().
key()==tpr2->parentVertex().
key() && ((*tpr1->parentVertex()->sourceTracks_begin())->
pdgId()==22)) {
3522 if ( aConv->conversionVertex().isValid() )
h_RecoConvTwoMTracks_[2]->
Fill( aConv->conversionVertex().position().perp2() );
3530 if ( aConv->conversionVertex().isValid() ) {
3532 float chi2Prob =
ChiSquaredProbability( aConv->conversionVertex().chi2(), aConv->conversionVertex().ndof() );
3533 double convR=
sqrt(aConv->conversionVertex().position().perp2());
3534 double scalar = aConv->conversionVertex().position().x()*aConv->pairMomentum().x() +
3535 aConv->conversionVertex().position().y()*aConv->pairMomentum().y();
3538 if ( scalar < 0 ) convR= -
sqrt(aConv->conversionVertex().position().perp2());
3539 h_convVtxRvsZ_[0] ->
Fill ( fabs (aConv->conversionVertex().position().z() ),
sqrt(aConv->conversionVertex().position().perp2()) ) ;
3541 if (!aConv->caloCluster().empty()) {
3543 if ( fabs(aConv->caloCluster()[0]->eta() ) <= 1.) {
3545 h_convVtxYvsX_ ->
Fill ( aConv->conversionVertex().position().y() , aConv->conversionVertex().position().x() ) ;
3546 h_convVtxRvsZ_[1] ->
Fill ( fabs (aConv->conversionVertex().position().z() ), convR ) ;
3549 h_convVtxYvsX_zoom_[0] ->
Fill ( aConv->conversionVertex().position().y() , aConv->conversionVertex().position().x() ) ;
3550 h_convVtxYvsX_zoom_[1] ->
Fill ( aConv->conversionVertex().position().y() , aConv->conversionVertex().position().x() ) ;
3556 if ( fabs(aConv->caloCluster()[0]->eta() ) > 1.)
h_convVtxRvsZ_[2] ->
Fill ( fabs (aConv->conversionVertex().position().z() ), convR ) ;
3561 h_vtxChi2_[0]->
Fill( aConv->conversionVertex().normalizedChi2() );
3562 if ( phoIsInBarrel ) {
3564 h_vtxChi2_[1]->
Fill( aConv->conversionVertex().normalizedChi2() );
3566 if ( phoIsInEndcap ) {
3568 h_vtxChi2_[2]->
Fill( aConv->conversionVertex().normalizedChi2() );
3581 for (reco::GenJetCollection::const_iterator genJetIter = genJetCollection.begin();
3582 genJetIter != genJetCollection.end(); ++genJetIter) {
3585 if ( fabs(genJetIter->eta()) > 2.5 )
continue;
3587 float mcJetPhi= genJetIter->phi();
3590 float mcJetPt = genJetIter->pt() ;
3596 std::vector<reco::Photon> thePhotons;
3600 for( reco::PhotonCollection::const_iterator iPho = photonCollection.begin(); iPho != photonCollection.end(); iPho++) {
3602 float phiPho=aPho.
phi();
3603 float etaPho=aPho.
eta();
3606 if ( deltaPhi >
pi ) deltaPhi -= twopi;
3607 if ( deltaPhi < -
pi) deltaPhi += twopi;
3608 deltaPhi=
pow(deltaPhi,2);
3609 deltaEta=
pow(deltaEta,2);
3610 float delta =
sqrt( deltaPhi+deltaEta);
3612 matchingPho = * iPho;
3617 if (! matched )
continue;
3625 bool phoIsInBarrel=
false;
3626 bool phoIsInEndcap=
false;
3627 if ( fabs(matchingPho.
superCluster()->position().eta() ) < 1.479 ) {
3633 if ( phoIsInBarrel ) {
3636 if (!ecalRecHitHandle.
isValid()) {
3640 <<
"Error! Can't get the product " 3645 }
else if ( phoIsInEndcap ) {
3649 if (!ecalRecHitHandle.
isValid()) {
3653 <<
"Error! Can't get the product " 3661 float photonE = matchingPho.
energy();
3662 float photonEt= matchingPho.
et();
3663 float r9 = matchingPho.
r9();
3664 float r1 = matchingPho.
r1x5();
3665 float r2 = matchingPho.
r2x5();
3672 std::vector< std::pair<DetId, float> >::const_iterator rhIt;
3674 bool atLeastOneDeadChannel=
false;
3676 for(rhIt = (*bcIt)->hitsAndFractions().begin();rhIt != (*bcIt)->hitsAndFractions().end(); ++rhIt) {
3679 if (rhIt->first == (*it).id() ) {
3680 if ( (*it).recoFlag() == 9 ) {
3681 atLeastOneDeadChannel=
true;
3689 if ( atLeastOneDeadChannel ) {
3764 if ( phoIsInBarrel ) {
3790 }
else if ( phoIsInEndcap ) {
3820 for (
unsigned int iConv=0; iConv<conversions.
size(); iConv++) {
3823 const std::vector<edm::RefToBase<reco::Track> > tracks = aConv->tracks();
3824 double like = aConv->MVAout();
3826 if ( tracks.size() < 2 )
continue;
3827 if (!aConv->caloCluster().empty()) {
3832 float eoverp= aConv->EoverP();
3836 float dPhiTracksAtVtx = aConv->dPhiTracksAtVtx();
3839 if ( phoIsInBarrel ) {
3845 }
else if ( phoIsInEndcap ) {
3853 if ( aConv->conversionVertex().isValid() ) {
3855 double convR=
sqrt(aConv->conversionVertex().position().perp2());
3856 double scalar = aConv->conversionVertex().position().x()*aConv->pairMomentum().x() +
3857 aConv->conversionVertex().position().y()*aConv->pairMomentum().y();
3858 if ( scalar < 0 ) convR= -
sqrt(aConv->conversionVertex().position().perp2());
3861 h_convVtxRvsZBkg_[0] ->
Fill ( fabs (aConv->conversionVertex().position().z() ),
sqrt(aConv->conversionVertex().position().perp2()) ) ;
3862 if ( !aConv->caloCluster().empty() && fabs(aConv->caloCluster()[0]->eta() ) <= 1. ) {
3863 h_convVtxYvsXBkg_ ->
Fill ( aConv->conversionVertex().position().y() , aConv->conversionVertex().position().x() ) ;
3877 for ( reco::GenParticleCollection::const_iterator mcIter=genParticles->begin() ; mcIter!=genParticles->end() ; mcIter++ ) {
3878 if ( !(mcIter->pdgId() == 22 ) )
continue;
3879 if ( mcIter->mother() !=
nullptr and !(mcIter->mother()->pdgId()==25) )
continue;
3880 if ( fabs(mcIter->eta()) > 2.5 )
continue;
3882 float mcPhi= mcIter->phi();
3883 float mcEta= mcIter->eta();
3885 float mcEnergy=mcIter->energy();
3888 double dR = 9999999.;
3893 for(
unsigned int ipho=0; ipho < photonHandle->size(); ipho++) {
3896 double dphi = pho->phi()-mcPhi;
3898 { dphi = dphi < 0? (CLHEP::twopi) + dphi : dphi - CLHEP::twopi ; }
3899 double deta = pho->superCluster()->position().eta()-mcEta;
3902 if ( dR<0.1 && dR< minDr ) {
3909 if ( iMatch >-1) matched=
true;
3910 if ( ! matched)
continue;
3915 bool phoIsInBarrel=
false;
3916 bool phoIsInEndcap=
false;
3918 float phoEta = matchingPho->
superCluster()->position().eta();
3919 if ( fabs(phoEta) < 1.479) {
3927 float photonE = matchingPho->
energy();
3929 float photonEt= matchingPho->
energy()/cosh( matchingPho->
eta()) ;
3932 float r9 = matchingPho->
r9();
3933 float full5x5_r9 = matchingPho->
full5x5_r9();
3934 float r1 = matchingPho->
r1x5();
3935 float r2 = matchingPho->
r2x5();
3948 float photonIso = matchingPho->
photonIso();
3953 if ( ( photonEt > 14 && newhOverE <0.15 ) || ( photonEt > 10 && photonEt < 14 && chargedHadIso <10 ) ) {
3988 if ( phoIsInBarrel ) {
4013 if ( phoIsInEndcap ) {
MonitorElement * p_DCotTracksVsR_
MonitorElement * p_sigmaEoEVsEta_[3]
value_type const * get() const
MonitorElement * h_convVtxdX_endcap_
T getParameter(std::string const &) const
reco::SimToRecoCollection associateSimToReco(const edm::Handle< edm::View< reco::Track >> &tCH, const edm::Handle< TrackingParticleCollection > &tPCH) const
MonitorElement * h_SumPtOverPhoPt_NeuHad_unCleaned_[3]
MonitorElement * h_zPVFromTracks_[5]
MonitorElement * h_hOverE_miniAOD_[3][3]
edm::EDGetTokenT< EcalRecHitCollection > barrelEcalHits_
MonitorElement * h_OIinnermostHitR_
MonitorElement * h2_nTrkSolidConeDR04VsEta_[3]
MonitorElement * p_hOverEVsEtBkg_
MonitorElement * h_nSimPho_[2]
MonitorElement * p_DPhiTracksAtEcalVsR_
float hcalTowerSumEtConeDR04() const
Hcal isolation sum.
MonitorElement * h_scBkgPhi_
MonitorElement * h2_Chi2VsR_[3]
MonitorElement * h_sigmaIetaIeta_[3][3]
const unsigned int nTracks(const reco::Vertex &sv)
ParticleType
particle types
MonitorElement * p_sceResVsR9_[3]
MonitorElement * h_DPhiTracksAtEcal_[2][3]
MonitorElement * h_scPhi_miniAOD_[2]
bool isNonnull() const
Checks for non-null.
MonitorElement * h2_hcalTowerSumEtConeDR04VsEta_[3]
double eta() const final
momentum pseudorapidity
MonitorElement * h_IOinnermostHitR_
const_iterator end() const
MonitorElement * h_phoBkgDPhi_
MonitorElement * p_nHitsVsEtaSL_[2]
MonitorElement * h_DPhiTracksAtVtx_[2][3]
MonitorElement * p_EoverEtrueVsEta_[3]
MonitorElement * p_EoverPVsEta_[3]
MonitorElement * h_convVtxdZ_
MonitorElement * h_dRPhoPFcand_Pho_Cleaned_[3]
MonitorElement * h_newhOverE_[3][3]
MonitorElement * h_phoBkgPhi_
MonitorElement * h_chHadIso_[3]
float chargedHadronIso() const
Accessors for Particle Flow Isolation variables.
MonitorElement * h_phoPhi_[2]
edm::EDGetTokenT< edm::SimVertexContainer > g4_simVtx_Token_
MonitorElement * h_hcalTowerBcSumEtConeDR04_[3][3]
std::vector< TrackingParticle > TrackingParticleCollection
MonitorElement * h2_PoverPtrueVsEoverP_[3]
MonitorElement * h_mvaOut_[3]
MonitorElement * h_scE_[2][3]
edm::EDGetTokenT< reco::VertexCollection > offline_pvToken_
const_iterator end() const
last iterator over the map (read only)
float neutralHadronIso() const
MonitorElement * h_nRecoVtx_
MonitorElement * h_convVtxRvsZ_zoom_[2]
MonitorElement * h2_hOverEVsEt_[3]
MonitorElement * h_hcalTowerSumEtConeDR04_miniAOD_[3][3]
MonitorElement * h_SumPtOverPhoPt_NeuHad_Cleaned_[3]
edm::EDGetTokenT< edm::HepMCProduct > hepMC_Token_
MonitorElement * p_hcalTowerSumEtConeDR04VsEt_[3]
bool getByToken(EDGetToken token, Handle< PROD > &result) const
MonitorElement * p_isoTrkSolidConeDR04VsEtBkg_[3]
MonitorElement * h_DPhiTracksAtVtxBkg_[3]
edm::EDGetTokenT< edm::SimVertexContainer > famos_simVtx_Token_
MonitorElement * h2_EoverPVsR_[3]
MonitorElement * h_phoEt_[2][3]
MonitorElement * h_DEtaTracksAtEcal_[2][3]
edm::EDGetTokenT< reco::PFCandidateCollection > pfCandidates_
MonitorElement * h_phoEResRegr2_[3][3]
MonitorElement * p_convVtxdYVsY_
MonitorElement * h_phoDEta_[2]
MonitorElement * h_SimJet_[3]
MonitorElement * h2_convVtxdRVsEta_
MonitorElement * h_RecoConvTwoMTracks_[5]
MonitorElement * h_convVtxdY_
MonitorElement * h_scEtaWidth_[2]
Sin< T >::type sin(const T &t)
float trkSumPtSolidConeDR04() const
MonitorElement * h2_hOverEVsEtaBkg_
MonitorElement * h2_DCotTracksVsEta_
std::vector< GenJet > GenJetCollection
collection of GenJet objects
const_iterator find(const key_type &k) const
find element with specified reference key
MonitorElement * h2_etaVsRsim_[3]
MonitorElement * h2_PtRecVsPtSim_[3]
MonitorElement * h2_PoverPtrueVsEta_[3]
MonitorElement * h_convVtxdZ_endcap_
std::vector< EcalRecHit >::const_iterator const_iterator
MonitorElement * h_scEt_[2][3]
edm::EDGetTokenT< edm::View< reco::Track > > conversionIOTrackPr_Token_
MonitorElement * h_dzPVFromTracks_[5]
MonitorElement * p_EoverEtrueVsR_[3]
MonitorElement * h2_sigmaIetaIetaVsEtBkg_[3]
MonitorElement * h_ecalRecHitSumEtConeDR04Bkg_[3]
MonitorElement * h_simConvVtxRvsZ_[4]
MonitorElement * h2_hcalTowerSumEtConeDR04VsEt_[3]
MonitorElement * h_MatchedSimJet_[3]
MonitorElement * p_nHitsVsRSL_[2]
MonitorElement * p_r2VsEtBkg_
MonitorElement * h_dRPhoPFcand_NeuHad_Cleaned_[3]
float ecalRecHitSumEtConeDR04() const
MonitorElement * h2_isoTrkSolidConeDR04VsEtaBkg_
MonitorElement * h_SimConvTwoMTracksAndVtxPGT0005_[5]
MonitorElement * h2_r1VsEtaBkg_
MonitorElement * h2_isoTrkSolidConeDR04VsEtBkg_[3]
MonitorElement * h_TkD0_[3]
MonitorElement * h_dRPhoPFcand_ChHad_Cleaned_[3]
MonitorElement * h_chHadIso_miniAOD_[3]
MonitorElement * h_convVtxdY_endcap_
MonitorElement * h_EoverP_SL_[3]
std::unique_ptr< PhotonMCTruthFinder > thePhotonMCTruthFinder_
MonitorElement * p_eResVsR9_[3]
MonitorElement * h_etOutsideMustache_[3]
key_type key() const
Accessor for product key.
MonitorElement * h2_DPhiTracksAtVtxVsEta_
MonitorElement * p_DPhiTracksAtVtxVsR_
MonitorElement * h_SumPtOverPhoPt_ChHad_Cleaned_[3]
MonitorElement * p_sigmaEoEVsEt_[3][3]
MonitorElement * h_convVtxdR_endcap_
const Vector & momentum() const
track momentum vector
MonitorElement * h_convSLVtxRvsZ_[3]
MonitorElement * h_phoEt_miniAOD_[2][3]
const_iterator end() const
Termination of iteration.
reco::SuperClusterRef superCluster() const override
Ref to SuperCluster.
MonitorElement * p_newhOverEVsEta_[3]
MonitorElement * h2_convVtxRrecVsTrue_
MonitorElement * h2_DCotTracksVsR_
edm::EDGetTokenT< EcalRecHitCollection > endcapEcalHits_
MonitorElement * h2_PtRecVsPtSimMixProv_
MonitorElement * h_SumPtOverPhoPt_ChHad_unCleaned_[3]
MonitorElement * h_convEtaBkg_
edm::EDGetTokenT< edm::ValueMap< std::vector< reco::PFCandidateRef > > > particleBasedIso_token
static const double deltaEta
const_iterator begin() const
Initialize an iterator over the RefVector.
MonitorElement * h_phoE_miniAOD_[2][3]
MonitorElement * h_scPhi_[2]
MonitorElement * h2_r2VsEtaBkg_
MonitorElement * h_convVtxdPhi_
MonitorElement * h_scBkgE_[3]
MonitorElement * h_convERes_[2][3]
MonitorElement * p_Chi2VsR_[3]
MonitorElement * h_SimPho_[3]
Denominator for efficiencies.
MonitorElement * h2_r2VsEtBkg_
MonitorElement * p_r2VsEtaBkg_
MonitorElement * h_convVtxRvsZ_[3]
MonitorElement * h_nTrkSolidConeDR04_miniAOD_[3][3]
MonitorElement * h_convPhi_[2]
MonitorElement * h_nConv_[2][3]
info per conversion
MonitorElement * h2_isoTrkSolidConeDR04VsEt_[3]
MonitorElement * h_full5x5_r9_miniAOD_[3][3]
MonitorElement * h_r9_[3][3]
MonitorElement * h2_sigmaIetaIetaVsEta_[3]
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
MonitorElement * h_dRPhoPFcand_Pho_unCleaned_[3]
MonitorElement * p_EoverPVsR_[3]
MonitorElement * h2_sceResVsR9_[3]
MonitorElement * h_phoEta_[2]
MonitorElement * h2_Chi2VsEta_[3]
MonitorElement * h_simTkPt_
MonitorElement * h_mvaOutBkg_[3]
MonitorElement * h_trkAlgo_
MonitorElement * h2_dzPVVsR_
edm::EDGetTokenT< edm::SimTrackContainer > g4_simTk_Token_
MonitorElement * h_scEta_[2]
MonitorElement * h_convVtxdX_barrel_
MonitorElement * h2_hOverEVsEta_[3]
float full5x5_sigmaIetaIeta() const
MonitorElement * p_eResVsR_
MonitorElement * p_hcalTowerSumEtConeDR04VsEtBkg_[3]
MonitorElement * h_tkChi2Large_[2]
MonitorElement * h2_r1VsEt_[3]
MonitorElement * h_trkProv_[2]
MonitorElement * p_sigmaIetaIetaVsEtaBkg_
edm::ParameterSet parameters_
MonitorElement * p_convVtxdRVsEta_
MonitorElement * h_r1_[3][3]
MonitorElement * h_EoverPTracks_[2][3]
MonitorElement * h_phoSigmaEoE_miniAOD_[3][3]
MonitorElement * h_scPhiWidth_[2]
MonitorElement * h2_etaVsRreco_[3]
double et() const final
transverse energy
reco::ConversionRefVector conversions() const
vector of references to Conversion's
MonitorElement * h2_r1VsEta_[3]
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
float hcalTowerSumEtBcConeDR04() const
Hcal isolation sum subtracting the hadronic energy in towers behind the BCs in the SC...
MonitorElement * p_ecalRecHitSumEtConeDR04VsEtaBkg_
float phiNormalization(float &a)
MonitorElement * h2_r2VsEta_[3]
MonitorElement * h_nHadIso_miniAOD_[3]
MonitorElement * h_isoTrkSolidConeDR04_[3][3]
MonitorElement * p_hOverEVsEt_[3]
MonitorElement * h_EtR9Less093_[3][3]
MonitorElement * h_tkChi2SL_[2]
MonitorElement * h2_eResVsEt_[3][3]
MonitorElement * h_r9VsNofTracks_[2][3]
MonitorElement * h_ecalRecHitSumEtConeDR04_[3][3]
float sigmaIetaIeta() const
MonitorElement * h_ecalRecHitSumEtConeDR04_miniAOD_[3][3]
MonitorElement * h_phoEResRegr1_[3][3]
double energy() const final
energy
MonitorElement * h2_r9VsEtBkg_
MonitorElement * p_hOverEVsEta_[3]
MonitorElement * h2_TkPtPull_[3]
Abs< T >::type abs(const T &t)
MonitorElement * h_SumPtOverPhoPt_Pho_Cleaned_[3]
MonitorElement * h_MatchedSimPhoBadCh_[3]
MonitorElement * h_MatchedSimJetBadCh_[3]
MonitorElement * h_convVtxdEta_
MonitorElement * h_r2_[3][3]
MonitorElement * p_nHitsVsEta_[2]
MonitorElement * h_convVtxdY_barrel_
float ChiSquaredProbability(double chiSquared, double nrDOF)
MonitorElement * p_sigmaIetaIetaVsEtBkg_[3]
MonitorElement * h2_EoverEtrueVsEta_[3]
MonitorElement * h_phoBkgDEta_
MonitorElement * h_phoIso_miniAOD_[3]
MonitorElement * h_simTkEta_
float hadTowOverEm() const
the ration of hadronic energy in towers behind the BCs in the SC and the SC energy ...
MonitorElement * nHitsVsEta_[2]
MonitorElement * p_nTrkSolidConeDR04VsEtaBkg_
MonitorElement * h2_sigmaIetaIetaVsEtaBkg_
MonitorElement * h_gamgamMassRegr1_[3][3]
MonitorElement * p_convVtxdXVsX_
MonitorElement * p_dzPVVsR_
float hadronicOverEm() const
the total hadronic over electromagnetic fraction
double convTrackMinPtCut_
MonitorElement * hBCEnergyOverTrackPout_[3]
MonitorElement * h_PoverETracksBkg_[3]
MonitorElement * h_invMass_[2][3]
edm::EDGetTokenT< TrackingParticleCollection > token_tp_
MonitorElement * h2_EoverEtrueVsEoverP_[3]
MonitorElement * h_phoE_[2][3]
MonitorElement * h_simConvVtxYvsX_
MonitorElement * h_hOverE_[3][3]
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
reco::RecoToSimCollection associateRecoToSim(const edm::Handle< edm::View< reco::Track >> &tCH, const edm::Handle< TrackingParticleCollection > &tPCH) const
MonitorElement * h_hOverEBkg_[3]
float getCorrectedEnergyError(P4type type) const
MonitorElement * h_dRPhoPFcand_NeuHad_unCleaned_[3]
MonitorElement * h_SimPhoMotherEt_[2]
P4type getCandidateP4type() const
MonitorElement * h2_eResVsR9_[3]
MonitorElement * nHitsVsR_[2]
MonitorElement * h_r1Bkg_[3]
MonitorElement * h_scEta_miniAOD_[2]
Histos for comparison with miniAOD content.
const_iterator end() const
MonitorElement * h_convVtxdX_
MonitorElement * p_isoTrkSolidConeDR04VsEtaBkg_
MonitorElement * h2_DPhiTracksAtVtxVsR_
MonitorElement * h_convVtxYvsXBkg_
MonitorElement * h_TkPtPull_[3]
MonitorElement * h2_EoverPVsEta_[3]
edm::ESHandle< CaloGeometry > theCaloGeom_
MonitorElement * h_nTrkSolidConeDR04Bkg_[3]
MonitorElement * p_DCotTracksVsEta_
MonitorElement * h_convPtRes_[2][3]
MonitorElement * h2_nTrkSolidConeDR04VsEtaBkg_
MonitorElement * h_r2Bkg_[3]
MonitorElement * h_MatchedSimPho_[3]
Numerator for efficiencies.
MonitorElement * p_convVtxdRVsR_
MonitorElement * h_convVtxRvsZBkg_[2]
MonitorElement * p_Chi2VsEta_[3]
MonitorElement * h_nHadIso_[3]
MonitorElement * h2_hOverEVsEtBkg_
MonitorElement * p_sigmaEoEVsNVtx_[3][3]
MonitorElement * p_eResVsNVtx_[3][3]
const HepMC::GenEvent * GetEvent() const
MonitorElement * h_SumPtOverPhoPt_Pho_unCleaned_[3]
MonitorElement * h2_ecalRecHitSumEtConeDR04VsEtBkg_[3]
T const * product() const
void clear()
Clear the vector.
MonitorElement * h_nSimConv_[2]
MonitorElement * h_nTrkSolidConeDR04_[3][3]
MonitorElement * h_sigmaIetaIetaBkg_[3]
MonitorElement * h2_EoverEtrueVsR_[3]
MonitorElement * p_hcalTowerBcSumEtConeDR04VsEta_[3]
MonitorElement * h_SimConvTwoMTracksAndVtxPGT0_[5]
MonitorElement * h_gamgamMass_[3][3]
std::vector< Photon > PhotonCollection
collectin of Photon objects
MonitorElement * p_PoverPtrueVsEta_[3]
edm::EDGetTokenT< reco::GenParticleCollection > genpartToken_
MonitorElement * h_r9Bkg_[3]
MonitorElement * h_phoERes_[3][3]
MonitorElement * h_isoTrkSolidConeDR04Bkg_[3]
MonitorElement * h2_r9VsEtaBkg_
MonitorElement * h_convVtxYvsX_zoom_[2]
MonitorElement * h_convAlgo_
MonitorElement * h_nCluOutsideMustache_[3]
edm::EDGetTokenT< reco::GenJetCollection > genjets_Token_
MonitorElement * h_hcalTowerSumEtConeDR04_[3][3]
int nTrkSolidConeDR04() const
MonitorElement * h2_nTrkSolidConeDR04VsEt_[3]
MonitorElement * h2_hcalTowerSumEtConeDR04VsEtBkg_[3]
MonitorElement * h2_r1VsEtBkg_
MonitorElement * h_DCotTracksBkg_[3]
MonitorElement * h_phoIso_[3]
MonitorElement * p_ecalRecHitSumEtConeDR04VsEta_[3]
MonitorElement * p_r1VsEtaBkg_
MonitorElement * h_PoverETracks_[2][3]
float etaTransformation(float a, float b)
MonitorElement * h2_ecalRecHitSumEtConeDR04VsEt_[3]
MonitorElement * h_phoPixSeedSize_[2]
et
define resolution functions of each parameter
MonitorElement * h_vtxChi2_[3]
MonitorElement * p_nTrkSolidConeDR04VsEtBkg_[3]
MonitorElement * p_hcalTowerBcSumEtConeDR04VsEt_[3]
MonitorElement * h_pfMva_[3]
edm::EDGetTokenT< reco::PhotonCollection > photonCollectionToken_
MonitorElement * p_ecalRecHitSumEtConeDR04VsEtBkg_[3]
MonitorElement * h_hcalTowerSumEtConeDR04Bkg_[3]
MonitorElement * p_convVtxdZVsZ_
MonitorElement * p_hcalTowerSumEtConeDR04VsEta_[3]
MonitorElement * h_r1_miniAOD_[3][3]
MonitorElement * p_r1VsEtBkg_
MonitorElement * h_phoBkgEt_[3]
MonitorElement * h2_isoTrkSolidConeDR04VsEta_[3]
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
MonitorElement * h_SimPhoMotherEta_[2]
MonitorElement * h_EoverPTracksBkg_[3]
MonitorElement * h_convVtxdR_barrel_
void push_back(const RefToBase< T > &)
MonitorElement * h_VisSimConv_[6]
MonitorElement * h_SimConvTwoMTracks_[5]
MonitorElement * h2_nTrkSolidConeDR04VsEtBkg_[3]
MonitorElement * h2_hcalTowerSumEtConeDR04VsEtaBkg_
MonitorElement * p_eResVsEt_[3][3]
void push_back(value_type const &ref)
Add a Ref<C, T> to the RefVector.
size_type size() const
Size of the RefVector.
MonitorElement * h_convVtxYvsX_
MonitorElement * h_phoBkgE_[3]
MonitorElement * p_hOverEVsEtaBkg_
MonitorElement * h_r2_miniAOD_[3][3]
MonitorElement * h_phoSigmaEoE_[3][3]
MonitorElement * h_RecoConvTwoTracks_[5]
MonitorElement * p_r9VsEta_[3]
MonitorElement * h_DCotTracks_[2][3]
MonitorElement * h_phoERes_miniAOD_[3][3]
MonitorElement * h2_DPhiTracksAtEcalVsR_
MonitorElement * p_eResVsEta_[3]
edm::RefVector< TrackingParticleCollection > theConvTP_
MonitorElement * h_newhOverE_miniAOD_[3][3]
MonitorElement * h_dRPhoPFcand_ChHad_unCleaned_[3]
MonitorElement * h_AllSimConv_[5]
MonitorElement * h_vtxChi2Prob_[3]
MonitorElement * h_scBkgEta_
MonitorElement * p_nHitsVsR_[2]
MonitorElement * h_hcalTowerBcSumEtConeDR04_miniAOD_[3][3]
MonitorElement * h_r9_miniAOD_[3][3]
MonitorElement * h2_convVtxdRVsR_
MonitorElement * h_gamgamMassRegr2_[3][3]
MonitorElement * p_newhOverEVsEt_[3]
double phi() const final
momentum azimuthal angle
MonitorElement * h2_r2VsEt_[3]
MonitorElement * h_convVtxdR_
MonitorElement * h_convVtxdZ_barrel_
MonitorElement * h_full5x5_sigmaIetaIeta_miniAOD_[3][3]
MonitorElement * h_convEta_[3]
MonitorElement * p_hcalTowerSumEtConeDR04VsEtaBkg_
MonitorElement * p_ecalRecHitSumEtConeDR04VsEt_[3]
double mcPhi_
global variable for the MC photon
Power< A, B >::type pow(const A &a, const B &b)
MonitorElement * h_SimConvTwoTracks_[5]
MonitorElement * h2_sigmaIetaIetaVsEt_[3]
MonitorElement * h2_ecalRecHitSumEtConeDR04VsEtaBkg_
MonitorElement * h_scBkgEt_[3]
MonitorElement * h2_DPhiTracksAtEcalVsEta_
edm::EDGetTokenT< edm::View< reco::Track > > conversionOITrackPr_Token_
MonitorElement * h_sigmaIetaIeta_miniAOD_[3][3]
MonitorElement * h2_ecalRecHitSumEtConeDR04VsEta_[3]
MonitorElement * h_SimConvEtaPix_[2]
MonitorElement * h2_eResVsEta_[3]
const_iterator begin() const
MonitorElement * p_DPhiTracksAtVtxVsEta_
MonitorElement * p_DPhiTracksAtEcalVsEta_
MonitorElement * h_phoDPhi_[2]
MonitorElement * h_convPhiBkg_
edm::EDGetTokenT< edm::SimTrackContainer > famos_simTk_Token_
MonitorElement * h_phoBkgEta_
MonitorElement * h2_r9VsEt_[3]
MonitorElement * h_tkChi2_[2]
MonitorElement * p_dzPVVsEta_
double scalar(const CLHEP::HepGenMatrix &m)
Return the matrix as a scalar. Raise an assertion if the matris is not .
MonitorElement * h_SimConvOneMTracks_[5]
MonitorElement * h_isoTrkSolidConeDR04_miniAOD_[3][3]