00001 #include "RecoTauTag/RecoTau/interface/CaloRecoTauDiscriminationByIsolation.h" 00002 00003 void CaloRecoTauDiscriminationByIsolation::produce(Event& iEvent,const EventSetup& iEventSetup){ 00004 Handle<CaloTauCollection> theCaloTauCollection; 00005 iEvent.getByLabel(CaloTauProducer_,theCaloTauCollection); 00006 00007 // fill the AssociationVector object 00008 auto_ptr<CaloTauDiscriminator> theCaloTauDiscriminatorByIsolation(new CaloTauDiscriminator(CaloTauRefProd(theCaloTauCollection))); 00009 00010 for(size_t iCaloTau=0;iCaloTau<theCaloTauCollection->size();++iCaloTau) { 00011 CaloTauRef theCaloTauRef(theCaloTauCollection,iCaloTau); 00012 CaloTau theCaloTau=*theCaloTauRef; 00013 math::XYZVector theCaloTau_XYZVector=theCaloTau.momentum(); 00014 CaloTauElementsOperators theCaloTauElementsOperators(theCaloTau); 00015 00016 if (ApplyDiscriminationByTrackerIsolation_){ 00017 // optional selection by a tracker isolation : ask for 0 reco::Track in an isolation annulus around a leading reco::Track axis 00018 double theTrackerIsolationDiscriminator; 00019 theTrackerIsolationDiscriminator=theCaloTauElementsOperators.discriminatorByIsolTracksN(TrackerIsolAnnulus_Tracksmaxn_); 00020 if (theTrackerIsolationDiscriminator==0){ 00021 theCaloTauDiscriminatorByIsolation->setValue(iCaloTau,0); 00022 continue; 00023 } 00024 } 00025 00026 // not optional selection : ask for a leading (Pt>minPt) reco::Track in a matching cone around the CaloJet axis 00027 double theleadTkDiscriminator=NAN; 00028 if (!theCaloTau.leadTrack()) theleadTkDiscriminator=0; 00029 if (theleadTkDiscriminator==0) theCaloTauDiscriminatorByIsolation->setValue(iCaloTau,0); 00030 else theCaloTauDiscriminatorByIsolation->setValue(iCaloTau,1); 00031 } 00032 00033 iEvent.put(theCaloTauDiscriminatorByIsolation); 00034 }