CMS 3D CMS Logo

PFRecoTauDiscriminationByIsolationUsingLeadingPion.cc

Go to the documentation of this file.
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 

Generated on Tue Jun 9 17:45:02 2009 for CMSSW by  doxygen 1.5.4