434 LogInfo(
"PhotonAnalyzer") <<
"PhotonAnalyzer Analyzing event number: " << e.
id() <<
" Global Counter " <<
nEvt_ <<
"\n";
437 bool validTriggerEvent=
true;
441 if(!triggerEventHandle.isValid()) {
443 validTriggerEvent=
false;
445 if(validTriggerEvent) triggerEvent = *(triggerEventHandle.product());
448 bool validPhotons=
true;
452 if ( !photonHandle.isValid()) {
456 if(validPhotons) photonCollection = *(photonHandle.product());
459 bool validloosePhotonID=
true;
462 e.
getByLabel(
"PhotonIDProd",
"PhotonCutBasedIDLoose", loosePhotonFlag);
463 if ( !loosePhotonFlag.isValid()) {
464 edm::LogInfo(
"PhotonAnalyzer") <<
"Error! Can't get the product "<<
"PhotonCutBasedIDLoose" << endl;
465 validloosePhotonID=
false;
467 if (validloosePhotonID) loosePhotonID = *(loosePhotonFlag.product());
469 bool validtightPhotonID=
true;
472 e.
getByLabel(
"PhotonIDProd",
"PhotonCutBasedIDTight", tightPhotonFlag);
473 if ( !tightPhotonFlag.isValid()) {
474 edm::LogInfo(
"PhotonAnalyzer") <<
"Error! Can't get the product "<<
"PhotonCutBasedIDTight" << endl;
475 validtightPhotonID=
false;
477 if (validtightPhotonID) tightPhotonID = *(tightPhotonFlag.product());
492 int nConv[100][3][3];
508 for(uint filterIndex=0;filterIndex<triggerEvent.sizeFilters();++filterIndex){
510 string label = triggerEvent.filterTag(filterIndex).label();
512 if(label.find(
"Photon" ) != string::npos ) {
514 for(uint filterKeyIndex=0;filterKeyIndex<triggerEvent.filterKeys(filterIndex).size();++filterKeyIndex){
515 Keys.push_back(triggerEvent.filterKeys(filterIndex)[filterKeyIndex]);
525 for ( uint
i=0 ;
i<
Keys.size() ; )
527 if (
i!=(
Keys.size()-1))
537 int photonCounter = 0;
541 for( reco::PhotonCollection::const_iterator iPho = photonCollection.begin(); iPho != photonCollection.end(); iPho++) {
551 double deltaRMin=1000.;
555 for (vector<int>::const_iterator objectKey=
Keys.begin();objectKey!=
Keys.end();objectKey++){
557 deltaR =
reco::deltaR(triggerEvent.getObjects()[(*objectKey)].eta(),triggerEvent.getObjects()[(*objectKey)].phi(),(*iPho).superCluster()->eta(),(*iPho).superCluster()->phi());
558 if(deltaR < deltaRMin) deltaRMin =
deltaR;
562 if(deltaRMin > deltaRMax) {
566 if(deltaRMin <= deltaRMax) {
578 bool isLoosePhoton(
false), isTightPhoton(
false);
580 isLoosePhoton = (loosePhotonID)[photonref];
581 isTightPhoton = (tightPhotonID)[photonref];
587 bool phoIsInBarrel=
false;
588 bool phoIsInEndcap=
false;
589 float etaPho = (*iPho).superCluster()->eta();
590 if ( fabs(etaPho) < 1.479 )
597 if ( phoIsInBarrel ) part = 1;
598 if ( phoIsInEndcap ) part = 2;
601 bool isIsolated=
false;
606 if ( isIsolated ) type=1;
607 if ( !isIsolated ) type=2;
611 bool validEcalRecHits=
true;
614 if ( phoIsInBarrel ) {
617 if (!ecalRecHitHandle.
isValid()) {
619 validEcalRecHits=
false;
622 else if ( phoIsInEndcap ) {
625 if (!ecalRecHitHandle.
isValid()) {
627 validEcalRecHits=
false;
630 if (validEcalRecHits) ecalRecHitCollection = *(ecalRecHitHandle.
product());
649 double Et = (*iPho).et();
650 bool passesCuts =
false;
779 bool atLeastOneDeadChannel=
false;
780 for(
reco::CaloCluster_iterator bcIt = (*iPho).superCluster()->clustersBegin();bcIt != (*iPho).superCluster()->clustersEnd(); ++bcIt) {
781 for(vector< pair<DetId, float> >::const_iterator rhIt = (*bcIt)->hitsAndFractions().begin();rhIt != (*bcIt)->hitsAndFractions().end(); ++rhIt) {
784 if (rhIt->first == (*it).id() ) {
785 if ( (*it).recoFlag() == 9 ) {
786 atLeastOneDeadChannel=
true;
793 if ( atLeastOneDeadChannel ) {
801 if((*iPho).hasConversionTracks()){
811 for (
unsigned int iConv=0; iConv<conversions.
size(); iConv++) {
815 if ( aConv->nTracks() <2 )
continue;
820 if ( !(aConv->conversionVertex().isValid()) )
continue;
822 float chi2Prob =
ChiSquaredProbability( aConv->conversionVertex().chi2(), aConv->conversionVertex().ndof() );
824 if(chi2Prob<0.0005)
continue;
834 if (
cut==0 && isLoosePhoton){
838 if (
cut==0 && isTightPhoton){
852 double convR=
sqrt(aConv->conversionVertex().position().perp2());
853 double scalar = aConv->conversionVertex().position().x()*aConv->refittedPairMomentum().x() + aConv->conversionVertex().position().y()*aConv->refittedPairMomentum().y();
854 if ( scalar < 0 ) convR= -convR;
859 if(fabs(aConv->caloCluster()[0]->eta()) > 1.5){
862 else if(fabs(aConv->caloCluster()[0]->eta()) < 1){
867 const std::vector<edm::RefToBase<reco::Track> >
tracks = aConv->tracks();
870 for (
unsigned int i=0;
i<tracks.size();
i++) {
879 float DPhiTracksAtVtx = -99;
880 float dPhiTracksAtEcal= -99;
881 float dEtaTracksAtEcal= -99;
883 float phiTk1= aConv->tracksPin()[0].phi();
884 float phiTk2= aConv->tracksPin()[1].phi();
885 DPhiTracksAtVtx = phiTk1-phiTk2;
888 if (aConv->bcMatchingWithTracks()[0].
isNonnull() && aConv->bcMatchingWithTracks()[1].
isNonnull() ) {
889 float recoPhi1 = aConv->ecalImpactPosition()[0].phi();
890 float recoPhi2 = aConv->ecalImpactPosition()[1].phi();
891 float recoEta1 = aConv->ecalImpactPosition()[0].eta();
892 float recoEta2 = aConv->ecalImpactPosition()[1].eta();
897 dPhiTracksAtEcal = recoPhi1 -recoPhi2;
899 dEtaTracksAtEcal = recoEta1 -recoEta2;
925 for (reco::PhotonCollection::const_iterator iPho2=iPho+1; iPho2!=photonCollection.end(); iPho2++){
930 bool isTightPhoton2(
false), isLoosePhoton2(
false);
933 isTightPhoton2 = (tightPhotonID)[photonref2];
934 isLoosePhoton2 = (loosePhotonID)[photonref2];
937 bool isIsolated2=
false;
947 float gamgamMass2 = p12.Dot(p12);
952 if(conversions.
size()!=0 && conversions[0]->nTracks() >= 2){
std::vector< std::vector< MonitorElement * > > h_sigmaIetaIetaVsEta_
MonitorElement * h_invMassOneWithTracks_
std::vector< std::vector< std::vector< MonitorElement * > > > h_dEtaTracksAtEcal_
std::vector< std::vector< std::vector< MonitorElement * > > > h_phoEt_
MonitorElement * h_phoEt_preHLT_
std::vector< std::vector< MonitorElement * > > h_phoEta_BadChannels_
std::vector< std::vector< MonitorElement * > > p_maxEXtalOver3x3VsEta_
std::vector< std::vector< MonitorElement * > > p_trackPtSumSolidVsEta_
std::vector< std::vector< MonitorElement * > > h_nTrackIsolSolid_
std::vector< std::vector< MonitorElement * > > p_hOverEVsEta_
The single EDProduct to be saved for each event (AOD case)
std::vector< std::vector< MonitorElement * > > p_nTrackIsolSolidVsEt_
std::vector< std::vector< MonitorElement * > > p_r9VsEta_
std::vector< std::vector< MonitorElement * > > p_sigmaIetaIetaVsEta_
std::vector< std::vector< MonitorElement * > > h_e1x5VsEt_
std::vector< std::vector< std::vector< MonitorElement * > > > h_phoE_
MonitorElement * h_phoEta_Vertex_
std::vector< std::vector< MonitorElement * > > p_e2x5VsEta_
std::vector< std::vector< MonitorElement * > > p_e1x5VsEta_
std::vector< std::vector< MonitorElement * > > h_convVtxRvsZ_
std::vector< std::vector< MonitorElement * > > p_r2x5VsEt_
std::vector< std::string > parts_
MonitorElement * h_convEta_Loose_
std::vector< std::vector< MonitorElement * > > h_phoEta_
std::vector< T >::const_iterator const_iterator
std::vector< std::vector< std::vector< MonitorElement * > > > h_phoConvPhiForEfficiency_
std::vector< std::vector< MonitorElement * > > p_r1x5VsEt_
std::vector< std::vector< MonitorElement * > > h_nTrackIsolHollow_
MonitorElement * h_phoEta_preHLT_
std::vector< std::vector< MonitorElement * > > h_convVtxZ_
std::vector< std::vector< MonitorElement * > > h_ecalSumVsEta_
std::vector< std::vector< std::vector< MonitorElement * > > > h_dCotTracks_
std::vector< std::vector< std::vector< MonitorElement * > > > h_hOverE_
edm::InputTag triggerEvent_
MonitorElement * h_convEt_Loose_
std::vector< std::vector< MonitorElement * > > h_trackPtSumSolidVsEta_
std::vector< std::vector< std::vector< MonitorElement * > > > h_pOverETracks_
void fill3DHistoVector(std::vector< std::vector< std::vector< MonitorElement * > > > &histoVector, double x, int cut, int type, int part)
std::vector< std::vector< std::vector< MonitorElement * > > > h_phoConvR9_
std::vector< std::vector< MonitorElement * > > h_r9VsEta_
std::vector< std::vector< MonitorElement * > > h_vertexChi2Prob_
MonitorElement * h_phoEt_postHLT_
std::string barrelRecHitProducer_
std::string photonCollection_
std::vector< std::vector< MonitorElement * > > h_convVtxZEndcap_
std::vector< std::vector< MonitorElement * > > h_nTrackIsolHollowVsEta_
MonitorElement * h_convEta_Tight_
std::vector< std::vector< MonitorElement * > > h_e2x5VsEta_
double deltaR(double eta1, double phi1, double eta2, double phi2)
std::vector< std::vector< MonitorElement * > > h_ecalSum_
std::vector< std::vector< MonitorElement * > > p_dCotTracksVsEta_
std::vector< std::vector< std::vector< MonitorElement * > > > p_hcalSumVsEt_
std::vector< std::vector< MonitorElement * > > h_scEta_
std::vector< std::vector< MonitorElement * > > h_r1x5VsEt_
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
MonitorElement * h_invMassZeroWithTracks_
bool isNonnull() const
Checks for non-null.
std::vector< std::vector< std::vector< MonitorElement * > > > h_phoConvE_
void fill2DHistoVector(std::vector< std::vector< MonitorElement * > > &histoVector, double x, int cut, int type)
std::vector< std::vector< MonitorElement * > > h_convVtxR_
std::vector< std::vector< MonitorElement * > > h_hcalSumVsEta_
std::vector< std::vector< MonitorElement * > > h_maxEXtalOver3x3VsEta_
std::vector< std::vector< MonitorElement * > > h_phoConvEta_
std::vector< std::vector< std::vector< MonitorElement * > > > h_eOverPTracks_
std::vector< std::vector< MonitorElement * > > h_maxEXtalOver3x3VsEt_
MonitorElement * h_phoEt_Tight_
std::vector< std::vector< MonitorElement * > > h_hcalSum_
std::vector< std::vector< MonitorElement * > > p_hcalSumVsEta_
std::vector< std::vector< MonitorElement * > > h_r1x5VsEta_
std::vector< std::vector< std::vector< MonitorElement * > > > h_phoConvEt_
std::vector< std::vector< MonitorElement * > > p_nHitsVsEta_
unsigned int prescaleFactor_
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
std::vector< std::string > types_
std::vector< std::vector< std::vector< MonitorElement * > > > h_h1OverE_
std::string endcapRecHitProducer_
std::vector< std::vector< MonitorElement * > > p_r1x5VsEta_
std::vector< std::vector< MonitorElement * > > p_hOverEVsEt_
std::vector< std::vector< std::vector< MonitorElement * > > > h_dPhiTracksAtVtx_
std::vector< std::vector< MonitorElement * > > p_e2x5VsEt_
std::vector< std::vector< MonitorElement * > > p_maxEXtalOver3x3VsEt_
MonitorElement * h_invMassTwoWithTracks_
std::vector< std::vector< MonitorElement * > > h_nTrackIsolHollowVsEt_
float ChiSquaredProbability(double chiSquared, double nrDOF)
std::vector< std::vector< std::vector< MonitorElement * > > > h_phoSigmaIetaIeta_
std::vector< std::vector< MonitorElement * > > h_e2x5VsEt_
std::vector< std::vector< MonitorElement * > > h_phoPhi_BadChannels_
std::vector< std::vector< MonitorElement * > > p_nTrackIsolSolidVsEta_
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
float phiNormalization(float &a)
MonitorElement * h_phoEta_Tight_
std::vector< std::vector< MonitorElement * > > h_nTrackIsolSolidVsEt_
MonitorElement * h_phoEt_Loose_
const_iterator end() const
double deltaR(double eta1, double eta2, double phi1, double phi2)
std::vector< std::vector< std::vector< MonitorElement * > > > p_ecalSumVsEt_
std::vector< std::vector< std::vector< MonitorElement * > > > h_r9_
MonitorElement * h_invMassAllPhotons_
std::vector< std::vector< MonitorElement * > > p_nTrackIsolHollowVsEt_
std::vector< std::vector< MonitorElement * > > h_trackPtSumHollowVsEt_
std::vector< std::vector< MonitorElement * > > h_nTrackIsolSolidVsEta_
std::vector< std::vector< std::vector< MonitorElement * > > > h_scPhi_
std::vector< std::vector< MonitorElement * > > p_e1x5VsEt_
std::vector< size_type > Keys
std::vector< std::vector< MonitorElement * > > p_nTrackIsolHollowVsEta_
std::vector< Photon > PhotonCollection
collectin of Photon objects
std::vector< std::vector< MonitorElement * > > h_trackPtSumSolidVsEt_
T const * product() const
std::vector< std::vector< std::vector< MonitorElement * > > > h_h2OverE_
std::vector< std::vector< MonitorElement * > > p_r2x5VsEta_
std::vector< std::vector< MonitorElement * > > p_r9VsEt_
std::vector< std::vector< MonitorElement * > > p_trackPtSumHollowVsEta_
std::vector< std::vector< MonitorElement * > > p_trackPtSumSolidVsEt_
std::vector< std::vector< MonitorElement * > > p_ecalSumVsEta_
std::string barrelRecHitCollection_
std::vector< std::vector< MonitorElement * > > h_tkChi2_
bool useTriggerFiltering_
std::string photonProducer_
std::vector< std::vector< MonitorElement * > > h_trackPtSumHollowVsEta_
std::vector< std::vector< MonitorElement * > > h_phoConvEtaForEfficiency_
MonitorElement * h_convEt_Tight_
std::vector< std::vector< MonitorElement * > > h_hcalSumVsEt_
std::vector< std::vector< MonitorElement * > > p_trackPtSumHollowVsEt_
MonitorElement * h_phoEta_postHLT_
size_type size() const
Size of the RefVector.
std::vector< std::vector< MonitorElement * > > h_e1x5VsEta_
MonitorElement * h_phoEta_Loose_
std::vector< std::vector< std::vector< MonitorElement * > > > h_dPhiTracksAtEcal_
std::vector< std::vector< MonitorElement * > > h_trackPtSumSolid_
std::vector< std::vector< std::vector< MonitorElement * > > > h_nConv_
std::vector< std::vector< MonitorElement * > > h_r2x5VsEt_
std::string endcapRecHitCollection_
std::vector< std::vector< MonitorElement * > > h_phoEt_BadChannels_
std::vector< std::vector< MonitorElement * > > h_r2x5VsEta_
std::vector< std::vector< std::vector< MonitorElement * > > > h_phoPhi_
std::vector< std::vector< MonitorElement * > > h_convVtxYvsX_
std::vector< std::vector< MonitorElement * > > h_trackPtSumHollow_
std::vector< std::vector< std::vector< MonitorElement * > > > h_nPho_
std::vector< std::vector< MonitorElement * > > h_r9VsEt_
std::vector< std::vector< std::vector< MonitorElement * > > > h_phoConvPhi_
std::vector< std::vector< MonitorElement * > > h_ecalSumVsEt_
const_iterator begin() const
std::vector< std::vector< MonitorElement * > > p_tkChi2VsEta_