1337 using namespace edm;
1341 const float BARL = 1.4442;
1343 const float END_HI = 2.5;
1349 LogInfo(
"PhotonValidator") <<
"PhotonValidator Analyzing event number: " << e.
id() <<
" Global Counter " <<
nEvt_ <<
"\n";
1366 if (!photonHandle.isValid()) {
1367 edm::LogError(
"PhotonProducer") <<
"Error! Can't get the Photon collection "<< std::endl;
1389 for (
trackingRecHit_iterator itHits=iTk->extra()->recHitsBegin(); itHits!=iTk->extra()->recHitsEnd(); ++itHits ) {
1390 if ( (*itHits)->isValid() ) {
1410 for (
trackingRecHit_iterator itHits=iTk->extra()->recHitsBegin(); itHits!=iTk->extra()->recHitsEnd(); ++itHits ) {
1411 if ( (*itHits)->isValid() ) {
1428 std::vector<SimTrack> theSimTracks;
1429 std::vector<SimVertex> theSimVertices;
1444 theSimTracks.insert(theSimTracks.end(),SimTk->begin(),SimTk->end());
1445 theSimVertices.insert(theSimVertices.end(),SimVtx->begin(),SimVtx->end());
1450 const HepMC::GenEvent *myGenEvent = hepMC->GetEvent();
1455 e.
getByLabel(
"iterativeCone5GenJets",
"",GenJetsHandle);
1473 std::vector<reco::PhotonCollection::const_iterator> StoRMatchedConvertedPhotons;
1491 vector<reco::SimToRecoCollection*> StoRCollPtrs;
1492 StoRCollPtrs.push_back(&OISimToReco);
1493 StoRCollPtrs.push_back(&IOSimToReco);
1494 vector<reco::RecoToSimCollection*> RtoSCollPtrs;
1495 RtoSCollPtrs.push_back(&OIRecoToSim);
1496 RtoSCollPtrs.push_back(&IORecoToSim);
1498 for (
int i=0;
i<2;
i++)
1500 for (
int i=0;
i<2;
i++)
1504 std::vector<reco::Photon> myPhotons;
1505 for( reco::PhotonCollection::const_iterator iPho = photonCollection.begin(); iPho != photonCollection.end(); iPho++) {
1506 if ( fabs(iPho->eta()) > 2.5 )
continue;
1507 myPhotons.push_back(*iPho);
1510 std::sort(myPhotons.begin(), myPhotons.end(), sortPhotons());
1511 if ( myPhotons.size() >=2 ) {
1512 if ( myPhotons[0].et() > 40 && myPhotons[1].et() > 25 ) {
1515 float gamgamMass2 = p12.Dot(p12);
1516 if ( gamgamMass2 > 0 ) {
1520 if ( myPhotons[0].isEB() && myPhotons[1].isEB() )
1522 if ( ( myPhotons[0].isEE() && myPhotons[1].isEE() ) ||
1523 ( myPhotons[0].isEE() && myPhotons[1].isEB() ) ||
1524 ( myPhotons[0].isEB() && myPhotons[1].isEE() ) )
1529 if ( myPhotons[0].r9() > 0.93 && myPhotons[1].r9() > 0.93 ) {
1531 if ( myPhotons[0].isEB() && myPhotons[1].isEB() )
1533 if ( ( myPhotons[0].isEE() && myPhotons[1].isEE() ) ||
1534 ( myPhotons[0].isEE() && myPhotons[1].isEB() ) ||
1535 ( myPhotons[0].isEB() && myPhotons[1].isEE() ) )
1545 if ( chi2Prob1 > 0.0005 && chi2Prob2 > 0.0005 ) {
1547 if ( myPhotons[0].isEB() && myPhotons[1].isEB() ) {
1550 if ( ( myPhotons[0].isEE() && myPhotons[1].isEE() ) ||
1551 ( myPhotons[0].isEE() && myPhotons[1].isEB() ) ||
1552 ( myPhotons[0].isEB() && myPhotons[1].isEE() ) )
1560 if ( myPhotons[0].
conversions()[0]->nTracks() ==2 ) {
1562 if ( chi2Prob1 > 0.0005 ) {
1564 if ( myPhotons[0].isEB() && myPhotons[1].isEB() ) {
1567 if ( myPhotons[0].isEE() || myPhotons[1].isEE() ) {
1575 if ( myPhotons[1].
conversions()[0]->nTracks() ==2 ) {
1577 if ( chi2Prob1 > 0.0005 ) {
1579 if ( myPhotons[0].isEB() && myPhotons[1].isEB() ) {
1582 if ( myPhotons[0].isEE() || myPhotons[1].isEE() ) {
1596 for ( std::vector<PhotonMCTruth>::const_iterator mcPho=mcPhotons.begin(); mcPho !=mcPhotons.end(); mcPho++) {
1597 if ( (*mcPho).fourMomentum().et() <
minPhoEtCut_ )
continue;
1599 for ( HepMC::GenEvent::particle_const_iterator mcIter=myGenEvent->particles_begin(); mcIter != myGenEvent->particles_end(); mcIter++ ) {
1600 if ( (*mcIter)->pdg_id() != 22 )
continue;
1601 bool isTheSame=
false;
1603 if ( (*mcIter)->production_vertex() ) {
1604 if ( (*mcIter)->production_vertex()->particles_begin(
HepMC::parents) !=
1606 mother = *((*mcIter)->production_vertex()->particles_begin(
HepMC::parents));
1612 float mcPhi= (*mcPho).fourMomentum().phi();
1614 mcEta_= (*mcPho).fourMomentum().pseudoRapidity();
1616 mcConvR_= (*mcPho).vertex().perp();
1623 if ( fabs(
mcEta_) > END_HI )
continue;
1628 || (mother != 0 && mother->pdg_id() == 22)
1629 || (mother != 0 && mother->pdg_id() == 25)
1630 || (mother != 0 && mother->pdg_id() == 35) )
1634 double dPt = fabs((*mcIter)->momentum().perp() - (*mcPho).fourMomentum().et());
1635 float phiMother=(*mcIter)->momentum().phi();
1637 double dEta = fabs( (*mcIter)->momentum().eta() - (*mcPho).fourMomentum().pseudoRapidity() );
1642 if ( dEta <=0.0001 && dPhi <=0.0001 && dPt <=0.0001)
1646 if ( ! isTheSame )
continue;
1669 bool goodSimConversion=
false;
1670 bool visibleConversion=
false;
1671 bool visibleConversionsWithTwoSimTracks=
false;
1672 if ( (*mcPho).isAConversion() == 1 ) {
1682 if ( ( fabs(
mcEta_) <= BARL && mcConvR_ <85 ) ||
1683 ( fabs(
mcEta_) > BARL && fabs(
mcEta_) <=END_HI && fabs( (*mcPho).vertex().z() ) < 210 ) ) visibleConversion=
true;
1695 if ( fabs( tp->vx() - (*mcPho).vertex().x() ) < 0.001 &&
1696 fabs( tp->vy() - (*mcPho).vertex().y() ) < 0.001 &&
1697 fabs( tp->vz() - (*mcPho).vertex().z() ) < 0.001) {
1707 if (
theConvTP_.
size() == 2 ) visibleConversionsWithTwoSimTracks=
true;
1708 goodSimConversion=
false;
1710 if ( visibleConversion && visibleConversionsWithTwoSimTracks ) goodSimConversion=
true;
1711 if ( goodSimConversion ) {
1731 float minDelta=10000.;
1732 std::vector<reco::Photon> thePhotons;
1738 for( reco::PhotonCollection::const_iterator iPho = photonCollection.begin(); iPho != photonCollection.end(); iPho++) {
1740 thePhotons.push_back(aPho);
1741 float phiPho=aPho.
phi();
1742 float etaPho=aPho.
eta();
1744 float deltaEta = etaPho-
mcEta_;
1745 if ( deltaPhi >
pi ) deltaPhi -= twopi;
1746 if ( deltaPhi < -
pi) deltaPhi += twopi;
1747 deltaPhi=
pow(deltaPhi,2);
1748 deltaEta=
pow(deltaEta,2);
1750 if ( delta<0.1 && delta < minDelta ) {
1757 if ( iMatch>-1 ) matched=
true;
1775 if ( ! matched)
continue;
1777 bool phoIsInBarrel=
false;
1778 bool phoIsInEndcap=
false;
1779 bool phoIsInEndcapP=
false;
1780 bool phoIsInEndcapM=
false;
1784 if ( fabs(matchingPho.
superCluster()->position().eta() ) < 1.479 ) {
1788 if ( matchingPho.
superCluster()->position().eta() > 0) phoIsInEndcapP=
true;
1789 if ( matchingPho.
superCluster()->position().eta() < 0) phoIsInEndcapM=
true;
1793 if ( phoIsInBarrel ) {
1796 if (!ecalRecHitHandle.
isValid()) {
1801 }
else if ( phoIsInEndcap ) {
1805 if (!ecalRecHitHandle.
isValid()) {
1816 float photonE = matchingPho.
energy();
1817 float photonEt= matchingPho.
energy()/cosh( matchingPho.
eta()) ;
1818 float r9 = matchingPho.
r9();
1819 float r1 = matchingPho.
r1x5();
1820 float r2 = matchingPho.
r2x5();
1827 std::vector< std::pair<DetId, float> >::const_iterator rhIt;
1829 bool atLeastOneDeadChannel=
false;
1831 for(rhIt = (*bcIt)->hitsAndFractions().begin();rhIt != (*bcIt)->hitsAndFractions().end(); ++rhIt) {
1834 if (rhIt->first == (*it).id() ) {
1835 if ( (*it).recoFlag() == 9 ) {
1836 atLeastOneDeadChannel=
true;
1844 if ( atLeastOneDeadChannel ) {
1914 p_eResVsEt_[0][0]->
Fill ((*mcPho).fourMomentum().et(), photonE/(*mcPho).fourMomentum().e() ) ;
1921 if ( (*mcPho).isAConversion() == 0 ) {
1958 if ( photonE/(*mcPho).fourMomentum().e() < 0.3 && photonE/(*mcPho).fourMomentum().e() > 0.1 ) {
1967 p_eResVsEt_[0][1]->
Fill ((*mcPho).fourMomentum().et(), photonE/(*mcPho).fourMomentum().e() ) ;
1970 }
else if ( r9 <= 0.93 ) {
1973 p_eResVsEt_[0][2]->
Fill ((*mcPho).fourMomentum().et(), photonE/(*mcPho).fourMomentum().e() ) ;
1979 if ( phoIsInBarrel ) {
2009 p_eResVsEt_[1][0]->
Fill ((*mcPho).fourMomentum().et(), photonE/(*mcPho).fourMomentum().e() ) ;
2015 p_eResVsEt_[1][1]->
Fill ((*mcPho).fourMomentum().et(), photonE/(*mcPho).fourMomentum().e() ) ;
2020 p_eResVsEt_[1][2]->
Fill ((*mcPho).fourMomentum().et(), photonE/(*mcPho).fourMomentum().e() ) ;
2023 if ( phoIsInEndcap ) {
2049 p_eResVsEt_[2][0]->
Fill ((*mcPho).fourMomentum().et(), photonE/(*mcPho).fourMomentum().e() ) ;
2055 p_eResVsEt_[2][1]->
Fill ((*mcPho).fourMomentum().et(), photonE/(*mcPho).fourMomentum().e() ) ;
2060 p_eResVsEt_[2][2]->
Fill ((*mcPho).fourMomentum().et(), photonE/(*mcPho).fourMomentum().e() ) ;
2067 if ( ! (visibleConversion && visibleConversionsWithTwoSimTracks ) )
continue;
2069 if ( phoIsInBarrel )
h_r9_[1][1]->
Fill( r9 );
2070 if ( phoIsInEndcap )
h_r9_[1][2]->
Fill( r9 );
2074 if ( fabs(mcEta_) <=1.) {
2088 for (
unsigned int iConv=0; iConv<conversions.
size(); iConv++) {
2090 double like = aConv->MVAout();
2098 const std::vector<edm::RefToBase<reco::Track> >
tracks = aConv->tracks();
2099 if (tracks.size() < 1 )
continue;
2104 if ( tracks.size()==2 ) {
2112 if ( (fabs(mcEta_) > 1.1 && fabs (mcEta_) < 1.4 ) &&
2114 if ( fabs( aConv->pairCotThetaSeparation() ) >
dCotCutValue_ )
continue;
2121 std::map<const reco::Track*,TrackingParticleRef> myAss;
2122 std::map<const reco::Track*,TrackingParticleRef>::const_iterator itAss;
2123 std::map<reco::TrackRef,TrackingParticleRef>::const_iterator itAssMin;
2124 std::map<reco::TrackRef,TrackingParticleRef>::const_iterator itAssMax;
2128 for (
unsigned int i=0;
i<tracks.size();
i++) {
2144 std::vector<std::pair<RefToBase<reco::Track>,
double> > trackV;
2148 trackV = (std::vector<std::pair<RefToBase<reco::Track>,
double> >) q[
theConvTP_[0]];
2150 trackV = (std::vector<std::pair<RefToBase<reco::Track>,
double> >) q[
theConvTP_[1]];
2154 if ( !trackV.size() )
continue;
2190 float refP =-99999.;
2191 float refPt =-99999.;
2192 if ( aConv->conversionVertex().isValid() ) {
2193 refP=
sqrt(aConv->refittedPairMomentum().Mag2());
2194 refPt=
sqrt(aConv->refittedPairMomentum().perp2());
2196 float invM = aConv->pairInvariantMass();
2204 if ( tracks.size() ==1 ) {
2212 }
else if ( tracks.size() ==2 ) {
2222 float trkProvenance=3;
2223 if ( tracks[0]->algoName() ==
"outInEcalSeededConv" && tracks[1]->algoName() ==
"outInEcalSeededConv" ) trkProvenance=0;
2224 if ( tracks[0]->algoName() ==
"inOutEcalSeededConv" && tracks[1]->algoName() ==
"inOutEcalSeededConv" ) trkProvenance=1;
2225 if ( ( tracks[0]->algoName() ==
"outInEcalSeededConv" && tracks[1]->algoName() ==
"inOutEcalSeededConv") ||
2226 ( tracks[1]->algoName() ==
"outInEcalSeededConv" && tracks[0]->algoName() ==
"inOutEcalSeededConv") ) trkProvenance=2;
2227 if ( trkProvenance==3 ) {
2241 if ( phoIsInBarrel )
h_r9_[2][1]->
Fill( r9 );
2242 if ( phoIsInEndcap )
h_r9_[2][2]->
Fill( r9 );
2255 if ( aConv->conversionVertex().isValid() ) {
2256 if ( trkProvenance==3 )
std::cout <<
" PhotonValidator provenance of tracks is mixed and vertex is valid " << std::endl;
2257 float chi2Prob =
ChiSquaredProbability( aConv->conversionVertex().chi2(), aConv->conversionVertex().ndof() );
2258 if ( chi2Prob > 0) {
2265 if ( chi2Prob > 0.0005) {
2274 if ( chi2Prob > 0.0005 ) {
2277 h_convERes_[0][0]->
Fill( aConv->caloCluster()[0]->energy() / (*mcPho).fourMomentum().e() );
2280 if ( phoIsInBarrel ) {
2281 h_convERes_[0][1]->
Fill(aConv->caloCluster()[0]->energy() / (*mcPho).fourMomentum().e() );
2285 if ( phoIsInEndcap ) {
2286 h_convERes_[0][2]->
Fill(aConv->caloCluster()[0]->energy() / (*mcPho).fourMomentum().e() );
2306 float eoverp= -99999.;
2308 if ( aConv->conversionVertex().isValid() ) {
2309 eoverp= aConv->EoverPrefittedTracks();
2319 p_eResVsR_ ->
Fill ( mcConvR_, photonE / (*mcPho).fourMomentum().e() );
2352 float dPhiTracksAtVtx = aConv->dPhiTracksAtVtx();
2366 if ( phoIsInBarrel ) {
2368 if ( aConv->conversionVertex().isValid() ) {
2385 if ( phoIsInEndcap ) {
2387 if ( aConv->conversionVertex().isValid() ) {
2400 if ( aConv->conversionVertex().isValid() ) {
2426 float signX= aConv->refittedPairMomentum().x()/fabs(aConv->refittedPairMomentum().x());
2427 float signY= aConv->refittedPairMomentum().y()/fabs(aConv->refittedPairMomentum().y());
2428 float signZ= aConv->refittedPairMomentum().z()/fabs(aConv->refittedPairMomentum().z());
2439 float thetaConv=aConv->refittedPairMomentum().Theta();
2440 float thetaSC=matchingPho.
superCluster()->position().theta();
2444 float zPV =
sqrt(rSC*rSC+zSC*zSC)*
sin( thetaConv - thetaSC)/
sin(thetaConv);
2450 if ( phoIsInBarrel ) {
2453 }
else if ( phoIsInEndcap) {
2456 }
else if ( phoIsInEndcapP) {
2459 }
else if ( phoIsInEndcapM) {
2464 p_dzPVVsR_ ->
Fill(mcConvR_, zPV - (*mcPho).primaryVertex().z() );
2470 float dPhiTracksAtEcal=-99;
2471 float dEtaTracksAtEcal=-99;
2472 if (aConv->bcMatchingWithTracks()[0].
isNonnull() && aConv->bcMatchingWithTracks()[1].
isNonnull() ) {
2474 float recoPhi1 = aConv->ecalImpactPosition()[0].phi();
2475 float recoPhi2 = aConv->ecalImpactPosition()[1].phi();
2476 float recoEta1 = aConv->ecalImpactPosition()[0].eta();
2477 float recoEta2 = aConv->ecalImpactPosition()[1].eta();
2478 float bcPhi1 = aConv->bcMatchingWithTracks()[0]->phi();
2479 float bcPhi2 = aConv->bcMatchingWithTracks()[1]->phi();
2486 dPhiTracksAtEcal = recoPhi1 -recoPhi2;
2488 dEtaTracksAtEcal = recoEta1 -recoEta2;
2499 if ( phoIsInBarrel ) {
2503 if ( phoIsInEndcap ) {
2514 for (
unsigned int i=0;
i<tracks.size();
i++) {
2516 itAss= myAss.find( tfrb.
get() );
2517 if ( itAss == myAss.end() )
continue;
2519 float trkProvenance=3;
2520 if ( tracks[0]->algoName() ==
"outInEcalSeededConv" && tracks[1]->algoName() ==
"outInEcalSeededConv" ) trkProvenance=0;
2521 if ( tracks[0]->algoName() ==
"inOutEcalSeededConv" && tracks[1]->algoName() ==
"inOutEcalSeededConv" ) trkProvenance=1;
2522 if ( ( tracks[0]->algoName() ==
"outInEcalSeededConv" && tracks[1]->algoName() ==
"inOutEcalSeededConv") ||
2523 ( tracks[1]->algoName() ==
"outInEcalSeededConv" && tracks[0]->algoName() ==
"inOutEcalSeededConv") ) trkProvenance=2;
2538 float simPt =
sqrt( ((*itAss).second)->momentum().perp2() );
2543 if ( aConv->conversionVertex().isValid() ) {
2544 reco::Track refTrack= aConv->conversionVertex().refittedTracks()[
i];
2547 refPt=
sqrt (px*px + py*py );
2549 float ptres= refPt - simPt ;
2551 float pterror = aConv->conversionVertex().refittedTracks()[
i].ptError();
2565 if ( phoIsInBarrel ) {
2572 if ( phoIsInEndcap ) {
2601 for( reco::PhotonCollection::const_iterator iPho = photonCollection.begin(); iPho != photonCollection.end(); iPho++) {
2605 for (
unsigned int iConv=0; iConv<conversions.
size(); iConv++) {
2607 double like = aConv->MVAout();
2610 const std::vector<edm::RefToBase<reco::Track> > tracks = aConv->tracks();
2611 if (tracks.size() < 2 )
continue;
2619 bool phoIsInBarrel=
false;
2620 bool phoIsInEndcap=
false;
2621 if ( fabs(aConv->caloCluster()[0]->eta() ) < 1.479 ) {
2629 if ( ( fabs(mcEta_) > 1.1 && fabs (mcEta_) < 1.4 ) &&
2631 if ( fabs( aConv->pairCotThetaSeparation() ) >
dCotCutValue_ )
continue;
2637 if ( aConv->conversionVertex().isValid() )
h_RecoConvTwoTracks_[2]->
Fill( aConv->conversionVertex().position().perp2() );
2644 for ( std::vector<PhotonMCTruth>::const_iterator mcPho=mcPhotons.begin(); mcPho !=mcPhotons.end(); mcPho++) {
2646 float mcPhi= (*mcPho).fourMomentum().phi();
2649 mcEta_= (*mcPho).fourMomentum().pseudoRapidity();
2657 if ( fabs(mcEta_) > END_HI )
continue;
2663 if ( (*mcPho).isAConversion() != 1 )
continue;
2664 if (!( ( fabs(mcEta_) <= BARL && mcConvR_ <85 ) ||
2665 ( fabs(mcEta_) > BARL && fabs(mcEta_) <=END_HI && fabs( (*mcPho).vertex().z() ) < 210 ) ) )
2672 if ( fabs( tp->vx() - (*mcPho).vertex().x() ) < 0.0001 &&
2673 fabs( tp->vy() - (*mcPho).vertex().y() ) < 0.0001 &&
2674 fabs( tp->vz() - (*mcPho).vertex().z() ) < 0.0001) {
2684 std::vector<std::pair<RefToBase<reco::Track>,
double> > trackV1, trackV2;
2686 std::vector<std::pair<TrackingParticleRef, double> > tp1 = p1[tk1];
2687 std::vector<std::pair<TrackingParticleRef, double> > tp2 = p2[tk2];
2689 if (tp1.size()&&tp2.size()) {
2693 if (
abs(tpr1->pdgId())==11&&
abs(tpr2->pdgId())==11) {
2694 if ( (tpr1->parentVertex()->sourceTracks_end()-tpr1->parentVertex()->sourceTracks_begin()==1) &&
2695 (tpr2->parentVertex()->sourceTracks_end()-tpr2->parentVertex()->sourceTracks_begin()==1)) {
2696 if (tpr1->parentVertex().
key()==tpr2->parentVertex().
key() && ((*tpr1->parentVertex()->sourceTracks_begin())->
pdgId()==22)) {
2748 if ( aConv->conversionVertex().isValid() )
h_RecoConvTwoMTracks_[2]->
Fill( aConv->conversionVertex().position().perp2() );
2756 if ( aConv->conversionVertex().isValid() ) {
2757 float chi2Prob =
ChiSquaredProbability( aConv->conversionVertex().chi2(), aConv->conversionVertex().ndof() );
2759 double convR=
sqrt(aConv->conversionVertex().position().perp2());
2760 double scalar = aConv->conversionVertex().position().x()*aConv->pairMomentum().x() +
2761 aConv->conversionVertex().position().y()*aConv->pairMomentum().y();
2762 if ( scalar < 0 ) convR= -
sqrt(aConv->conversionVertex().position().perp2());
2765 h_convVtxRvsZ_[0] ->
Fill ( fabs (aConv->conversionVertex().position().z() ),
sqrt(aConv->conversionVertex().position().perp2()) ) ;
2766 if ( fabs(aConv->caloCluster()[0]->eta() ) <= 1.) {
2768 h_convVtxYvsX_ ->
Fill ( aConv->conversionVertex().position().y() , aConv->conversionVertex().position().x() ) ;
2769 h_convVtxRvsZ_[1] ->
Fill ( fabs (aConv->conversionVertex().position().z() ), convR ) ;
2772 h_convVtxYvsX_zoom_[0] ->
Fill ( aConv->conversionVertex().position().y() , aConv->conversionVertex().position().x() ) ;
2773 h_convVtxYvsX_zoom_[1] ->
Fill ( aConv->conversionVertex().position().y() , aConv->conversionVertex().position().x() ) ;
2779 if ( fabs(aConv->caloCluster()[0]->eta() ) > 1.)
h_convVtxRvsZ_[2] ->
Fill ( fabs (aConv->conversionVertex().position().z() ), convR ) ;
2785 h_vtxChi2_[0]->
Fill( aConv->conversionVertex().normalizedChi2() );
2786 if ( phoIsInBarrel ) {
2788 h_vtxChi2_[1]->
Fill( aConv->conversionVertex().normalizedChi2() );
2790 if ( phoIsInEndcap ) {
2792 h_vtxChi2_[2]->
Fill( aConv->conversionVertex().normalizedChi2() );
2804 for (reco::GenJetCollection::const_iterator genJetIter = genJetCollection.begin();
2805 genJetIter != genJetCollection.end(); ++genJetIter) {
2808 if ( fabs(genJetIter->eta()) > 2.5 )
continue;
2810 float mcJetPhi= genJetIter->phi();
2813 float mcJetPt = genJetIter->pt() ;
2819 std::vector<reco::Photon> thePhotons;
2823 for( reco::PhotonCollection::const_iterator iPho = photonCollection.begin(); iPho != photonCollection.end(); iPho++) {
2825 float phiPho=aPho.
phi();
2826 float etaPho=aPho.
eta();
2829 if ( deltaPhi >
pi ) deltaPhi -= twopi;
2830 if ( deltaPhi < -
pi) deltaPhi += twopi;
2831 deltaPhi=
pow(deltaPhi,2);
2832 deltaEta=
pow(deltaEta,2);
2833 float delta =
sqrt( deltaPhi+deltaEta);
2835 matchingPho = * iPho;
2840 if (! matched )
continue;
2848 bool phoIsInBarrel=
false;
2849 bool phoIsInEndcap=
false;
2850 if ( fabs(matchingPho.
superCluster()->position().eta() ) < 1.479 ) {
2856 if ( phoIsInBarrel ) {
2859 if (!ecalRecHitHandle.
isValid()) {
2864 }
else if ( phoIsInEndcap ) {
2868 if (!ecalRecHitHandle.
isValid()) {
2878 float photonE = matchingPho.
energy();
2879 float photonEt= matchingPho.
et();
2880 float r9 = matchingPho.
r9();
2881 float r1 = matchingPho.
r1x5();
2882 float r2 = matchingPho.
r2x5();
2889 std::vector< std::pair<DetId, float> >::const_iterator rhIt;
2891 bool atLeastOneDeadChannel=
false;
2893 for(rhIt = (*bcIt)->hitsAndFractions().begin();rhIt != (*bcIt)->hitsAndFractions().end(); ++rhIt) {
2896 if (rhIt->first == (*it).id() ) {
2897 if ( (*it).recoFlag() == 9 ) {
2898 atLeastOneDeadChannel=
true;
2906 if ( atLeastOneDeadChannel ) {
2988 if ( phoIsInBarrel ) {
3018 }
else if ( phoIsInEndcap ) {
3052 for (
unsigned int iConv=0; iConv<conversions.
size(); iConv++) {
3055 const std::vector<edm::RefToBase<reco::Track> > tracks = aConv->tracks();
3056 double like = aConv->MVAout();
3058 if ( tracks.size() < 2 )
continue;
3062 float eoverp= aConv->EoverP();
3066 float dPhiTracksAtVtx = aConv->dPhiTracksAtVtx();
3069 if ( phoIsInBarrel ) {
3075 }
else if ( phoIsInEndcap ) {
3083 if ( aConv->conversionVertex().isValid() ) {
3085 double convR=
sqrt(aConv->conversionVertex().position().perp2());
3086 double scalar = aConv->conversionVertex().position().x()*aConv->pairMomentum().x() +
3087 aConv->conversionVertex().position().y()*aConv->pairMomentum().y();
3088 if ( scalar < 0 ) convR= -
sqrt(aConv->conversionVertex().position().perp2());
3091 h_convVtxRvsZBkg_[0] ->
Fill ( fabs (aConv->conversionVertex().position().z() ),
sqrt(aConv->conversionVertex().position().perp2()) ) ;
3092 if ( fabs(aConv->caloCluster()[0]->eta() ) <= 1.) {
3093 h_convVtxYvsXBkg_ ->
Fill ( aConv->conversionVertex().position().y() , aConv->conversionVertex().position().x() ) ;
MonitorElement * p_DCotTracksVsR_
MonitorElement * h_convVtxdX_endcap_
T getParameter(std::string const &) const
MonitorElement * h_zPVFromTracks_[5]
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_
PhotonMCTruthFinder * thePhotonMCTruthFinder_
MonitorElement * h2_Chi2VsR_[3]
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
MonitorElement * h_sigmaIetaIeta_[3][3]
MonitorElement * p_sceResVsR9_[3]
MonitorElement * h_DPhiTracksAtEcal_[2][3]
MonitorElement * h2_hcalTowerSumEtConeDR04VsEta_[3]
MonitorElement * h_IOinnermostHitR_
MonitorElement * h_phoBkgDPhi_
const Vector & momentum() const
track momentum vector
MonitorElement * h_DPhiTracksAtVtx_[2][3]
MonitorElement * p_EoverEtrueVsEta_[3]
MonitorElement * p_EoverPVsEta_[3]
MonitorElement * h_convVtxdZ_
MonitorElement * h_phoBkgPhi_
MonitorElement * h_phoPhi_[2]
reco::SuperClusterRef superCluster() const
Ref to SuperCluster.
MonitorElement * h2_PoverPtrueVsEoverP_[3]
virtual double et() const
transverse energy
MonitorElement * h_mvaOut_[3]
MonitorElement * h_scE_[2][3]
const_iterator end() const
last iterator over the map (read only)
std::string photonCollectionProducer_
MonitorElement * h_convVtxRvsZ_zoom_[2]
std::string photonCollection_
MonitorElement * h2_hOverEVsEt_[3]
MonitorElement * p_hcalTowerSumEtConeDR04VsEt_[3]
MonitorElement * p_isoTrkSolidConeDR04VsEtBkg_[3]
MonitorElement * h_DPhiTracksAtVtxBkg_[3]
double deltaPhi(float phi1, float phi2)
MonitorElement * h2_EoverPVsR_[3]
MonitorElement * h_phoEt_[2][3]
MonitorElement * h_DEtaTracksAtEcal_[2][3]
MonitorElement * p_convVtxdYVsY_
MonitorElement * h_phoDEta_[2]
MonitorElement * h_SimJet_[3]
virtual reco::SimToRecoCollection associateSimToReco(edm::Handle< edm::View< reco::Track > > &tCH, edm::Handle< TrackingParticleCollection > &tPCH, const edm::Event *event=0, const edm::EventSetup *setup=0) const
compare reco to sim the handle of reco::Track and TrackingParticle collections
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< T >::const_iterator const_iterator
MonitorElement * h_scEt_[2][3]
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]
TrackAssociatorBase * theTrackAssociator_
MonitorElement * p_r2VsEtBkg_
float ecalRecHitSumEtConeDR04() const
MonitorElement * h2_isoTrkSolidConeDR04VsEtaBkg_
MonitorElement * h_SimConvTwoMTracksAndVtxPGT0005_[5]
MonitorElement * h2_r1VsEtaBkg_
MonitorElement * h2_isoTrkSolidConeDR04VsEtBkg_[3]
MonitorElement * h_TkD0_[3]
MonitorElement * h_convVtxdY_endcap_
MonitorElement * p_eResVsR9_[3]
MonitorElement * h2_DPhiTracksAtVtxVsEta_
MonitorElement * p_DPhiTracksAtVtxVsR_
MonitorElement * h_convVtxdR_endcap_
const_iterator end() const
Termination of iteration.
MonitorElement * h2_convVtxRrecVsTrue_
MonitorElement * h2_DCotTracksVsR_
MonitorElement * h2_PtRecVsPtSimMixProv_
virtual double eta() const
momentum pseudorapidity
MonitorElement * h_convEtaBkg_
const_iterator begin() const
Initialize an iterator over the RefVector.
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_convPhi_[2]
MonitorElement * h_nConv_[2][3]
info per conversion
MonitorElement * h2_isoTrkSolidConeDR04VsEt_[3]
MonitorElement * h_r9_[3][3]
MonitorElement * h2_sigmaIetaIetaVsEta_[3]
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
MonitorElement * p_EoverPVsR_[3]
bool isNonnull() const
Checks for non-null.
MonitorElement * h2_sceResVsR9_[3]
MonitorElement * h_phoEta_[2]
virtual double energy() const
energy
MonitorElement * h2_Chi2VsEta_[3]
MonitorElement * h_simTkPt_
MonitorElement * h_mvaOutBkg_[3]
MonitorElement * h2_dzPVVsR_
MonitorElement * h_scEta_[2]
MonitorElement * h_convVtxdX_barrel_
MonitorElement * h2_hOverEVsEta_[3]
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_
double dPhi(double phi1, double phi2)
MonitorElement * p_convVtxdRVsEta_
MonitorElement * h_r1_[3][3]
MonitorElement * h_EoverPTracks_[2][3]
MonitorElement * h_scPhiWidth_[2]
MonitorElement * h2_etaVsRreco_[3]
MonitorElement * h2_r9VsEta_[3]
reco::ConversionRefVector conversions() const
vector of references to Conversion's
MonitorElement * h2_r1VsEta_[3]
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
MonitorElement * p_ecalRecHitSumEtConeDR04VsEtaBkg_
float phiNormalization(float &a)
MonitorElement * h2_r2VsEta_[3]
MonitorElement * h_isoTrkSolidConeDR04_[3][3]
MonitorElement * p_hOverEVsEt_[3]
std::string conversionIOTrackProducer_
MonitorElement * h2_eResVsEt_[3][3]
MonitorElement * h_r9VsNofTracks_[2][3]
MonitorElement * h_ecalRecHitSumEtConeDR04_[3][3]
float sigmaIetaIeta() const
MonitorElement * h2_r9VsEtBkg_
MonitorElement * p_hOverEVsEta_[3]
MonitorElement * h2_TkPtPull_[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_simTkEta_
MonitorElement * nHitsVsEta_[2]
std::string conversionOITrackProducer_
MonitorElement * p_nTrkSolidConeDR04VsEtaBkg_
MonitorElement * h2_sigmaIetaIetaVsEtaBkg_
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]
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
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
MonitorElement * h_hOverEBkg_[3]
virtual reco::RecoToSimCollection associateRecoToSim(edm::Handle< edm::View< reco::Track > > &tCH, edm::Handle< TrackingParticleCollection > &tPCH, const edm::Event *event=0, const edm::EventSetup *setup=0) const
compare reco to sim the handle of reco::Track and TrackingParticle collections
MonitorElement * h_SimPhoMotherEt_[2]
MonitorElement * h2_eResVsR9_[3]
MonitorElement * nHitsVsR_[2]
MonitorElement * h_r1Bkg_[3]
const_iterator end() const
MonitorElement * h_convVtxdX_
MonitorElement * p_isoTrkSolidConeDR04VsEtaBkg_
MonitorElement * h2_DPhiTracksAtVtxVsR_
MonitorElement * h_convVtxYvsXBkg_
MonitorElement * h_TkPtPull_[3]
edm::InputTag endcapEcalHits_
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 * h2_hOverEVsEtBkg_
MonitorElement * h2_ecalRecHitSumEtConeDR04VsEtBkg_[3]
void clear()
Clear the vector.
MonitorElement * h_nSimConv_[2]
std::vector< PhotonMCTruth > find(std::vector< SimTrack > simTracks, std::vector< SimVertex > simVertices)
MonitorElement * h_nTrkSolidConeDR04_[3][3]
MonitorElement * h_sigmaIetaIetaBkg_[3]
MonitorElement * h2_EoverEtrueVsR_[3]
MonitorElement * h_SimConvTwoMTracksAndVtxPGT0_[5]
MonitorElement * h_gamgamMass_[3][3]
MonitorElement * p_PoverPtrueVsEta_[3]
MonitorElement * h_r9Bkg_[3]
MonitorElement * h_phoERes_[3][3]
MonitorElement * h_isoTrkSolidConeDR04Bkg_[3]
MonitorElement * h2_r9VsEtaBkg_
key_type key() const
Accessor for product key.
MonitorElement * h_convVtxYvsX_zoom_[2]
MonitorElement * h_hcalTowerSumEtConeDR04_[3][3]
int nTrkSolidConeDR04() const
MonitorElement * h2_nTrkSolidConeDR04VsEt_[3]
MonitorElement * h2_hcalTowerSumEtConeDR04VsEtBkg_[3]
std::vector< Photon > PhotonCollection
collectin of Photon objects
MonitorElement * h2_r1VsEtBkg_
MonitorElement * h_DCotTracksBkg_[3]
T const * product() const
MonitorElement * p_ecalRecHitSumEtConeDR04VsEta_[3]
MonitorElement * p_r1VsEtaBkg_
MonitorElement * h_PoverETracks_[2][3]
float etaTransformation(float a, float b)
MonitorElement * h2_ecalRecHitSumEtConeDR04VsEt_[3]
MonitorElement * h_vtxChi2_[3]
MonitorElement * p_nTrkSolidConeDR04VsEtBkg_[3]
MonitorElement * p_ecalRecHitSumEtConeDR04VsEtBkg_[3]
MonitorElement * h_hcalTowerSumEtConeDR04Bkg_[3]
MonitorElement * p_convVtxdZVsZ_
MonitorElement * p_hcalTowerSumEtConeDR04VsEta_[3]
MonitorElement * p_r1VsEtBkg_
MonitorElement * h_phoBkgEt_[3]
MonitorElement * h2_isoTrkSolidConeDR04VsEta_[3]
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_RecoConvTwoTracks_[5]
MonitorElement * h_DCotTracks_[2][3]
MonitorElement * h2_DPhiTracksAtEcalVsR_
std::vector< TrackingParticle > TrackingParticleCollection
MonitorElement * p_eResVsEta_[3]
edm::RefVector< TrackingParticleCollection > theConvTP_
MonitorElement * h_AllSimConv_[5]
MonitorElement * h_vtxChi2Prob_[3]
MonitorElement * h_scBkgEta_
MonitorElement * p_nHitsVsR_[2]
MonitorElement * h2_convVtxdRVsR_
virtual double phi() const
momentum azimuthal angle
MonitorElement * h2_r2VsEt_[3]
MonitorElement * h_convVtxdR_
MonitorElement * h_convVtxdZ_barrel_
MonitorElement * h_SimConvOneTracks_[5]
MonitorElement * h_convEta_[3]
value_type const * get() const
MonitorElement * p_hcalTowerSumEtConeDR04VsEtaBkg_
MonitorElement * p_ecalRecHitSumEtConeDR04VsEt_[3]
tuple size
Write out results.
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]
edm::InputTag barrelEcalHits_
MonitorElement * h2_ecalRecHitSumEtConeDR04VsEtaBkg_
MonitorElement * h_scBkgEt_[3]
MonitorElement * h2_DPhiTracksAtEcalVsEta_
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_
MonitorElement * h_phoBkgEta_
MonitorElement * h2_r9VsEt_[3]
MonitorElement * h_tkChi2_[2]
MonitorElement * p_dzPVVsEta_