![]() |
![]() |
00001 #include "RecoTauTag/RecoTau/interface/PFRecoTauDiscriminationByIsolationUsingLeadingPion.h" 00002 00003 void PFRecoTauDiscriminationByIsolationUsingLeadingPion::produce(Event& iEvent,const EventSetup& iEventSetup){ 00004 Handle<PFTauCollection> thePFTauCollection; 00005 iEvent.getByLabel(PFTauProducer_,thePFTauCollection); 00006 00007 // fill the AssociationVector object 00008 auto_ptr<PFTauDiscriminator> thePFTauDiscriminatorByIsolationUsingLeadingPion(new PFTauDiscriminator(PFTauRefProd(thePFTauCollection))); 00009 00010 for(size_t iPFTau=0;iPFTau<thePFTauCollection->size();++iPFTau) { 00011 PFTauRef thePFTauRef(thePFTauCollection,iPFTau); 00012 PFTau thePFTau=*thePFTauRef; 00013 math::XYZVector thePFTau_XYZVector=thePFTau.momentum(); 00014 PFTauElementsOperators thePFTauElementsOperators(thePFTau); 00015 00016 if (ApplyDiscriminationByTrackerIsolation_){ 00017 // optional selection by a tracker isolation : ask for 0 charged hadron PFCand / reco::Track in an isolation annulus around a leading PFCand / reco::Track axis 00018 double theTrackerIsolationDiscriminator = 0.; 00019 if (ManipulateTracks_insteadofChargedHadrCands_){ 00020 theTrackerIsolationDiscriminator=thePFTauElementsOperators.discriminatorByIsolTracksN(TrackerIsolAnnulus_Tracksmaxn_); 00021 } else theTrackerIsolationDiscriminator=thePFTauElementsOperators.discriminatorByIsolPFChargedHadrCandsN(TrackerIsolAnnulus_Candsmaxn_); 00022 if (theTrackerIsolationDiscriminator==0.){ 00023 thePFTauDiscriminatorByIsolationUsingLeadingPion->setValue(iPFTau,0.); 00024 continue; 00025 } 00026 } 00027 00028 if (ApplyDiscriminationByECALIsolation_){ 00029 // optional selection by an ECAL isolation : ask for 0 gamma PFCand in an isolation annulus around a leading PFCand 00030 double theECALIsolationDiscriminator =0.; 00031 theECALIsolationDiscriminator=thePFTauElementsOperators.discriminatorByIsolPFGammaCandsN(ECALIsolAnnulus_Candsmaxn_); 00032 if (theECALIsolationDiscriminator==0.){ 00033 thePFTauDiscriminatorByIsolationUsingLeadingPion->setValue(iPFTau,0); 00034 continue; 00035 } 00036 } 00037 00038 // not optional selection : ask for a leading (Pt>minPt) PFCand / reco::Track in a matching cone around the PFJet axis 00039 double theleadElementDiscriminator=1.; 00040 if (ManipulateTracks_insteadofChargedHadrCands_){ 00041 if (!thePFTau.leadTrack()) theleadElementDiscriminator=0.; 00042 }else{ 00043 if (!thePFTau.leadPFCand()) { 00044 theleadElementDiscriminator=0.; 00045 } 00046 } 00047 if (theleadElementDiscriminator < 0.5)thePFTauDiscriminatorByIsolationUsingLeadingPion->setValue(iPFTau,0); 00048 else thePFTauDiscriminatorByIsolationUsingLeadingPion->setValue(iPFTau,1); 00049 } 00050 00051 iEvent.put(thePFTauDiscriminatorByIsolationUsingLeadingPion); 00052 00053 } 00054 00055