CMS 3D CMS Logo

PFRecoTauDiscriminationAgainstMuon.cc

Go to the documentation of this file.
00001 #include "RecoTauTag/RecoTau/interface/PFRecoTauDiscriminationAgainstMuon.h"
00002 
00003 void PFRecoTauDiscriminationAgainstMuon::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> thePFTauDiscriminatorAgainstMuon(new PFTauDiscriminator(PFTauRefProd(thePFTauCollection)));
00009 
00010   for(size_t iPFTau=0;iPFTau<thePFTauCollection->size();++iPFTau) {
00011     PFTauRef thePFTauRef(thePFTauCollection,iPFTau);
00012     bool decision = true;
00013 
00014     if((*thePFTauRef).hasMuonReference() ){
00015 
00016       MuonRef muonref = (*thePFTauRef).leadPFChargedHadrCand()->muonRef();
00017       if (discriminatorOption_ == "noSegMatch") {
00018         if ( muonref ->numberOfMatches() > 0 ) {
00019           decision = false;
00020         }
00021       }
00022       else if (discriminatorOption_ == "twoDCut") {
00023         double seg = muon::segmentCompatibility(*muonref);
00024         double calo= muonref->caloCompatibility(); 
00025         double border = calo * a + seg * b +c;
00026         if ( border > 0 ) {
00027           decision = false; 
00028         } 
00029       }
00030       else if (discriminatorOption_ == "merePresence") decision = false;
00031       else if (discriminatorOption_ == "combined") { // testing purpose only
00032         unsigned int muType = 0;
00033         if(muonref->isGlobalMuon()) muType = 1;
00034         else if(muonref->isCaloMuon()) muType = 2;
00035         else if(muonref->isTrackerMuon()) muType = 3;
00036         double muonEnergyFraction = (*thePFTauRef).pfTauTagInfoRef()->pfjetRef()->chargedMuEnergyFraction();
00037         bool eta_veto = false;
00038         bool phi_veto = false;
00039         if(fabs(muonref->eta()) > 2.3 || (fabs(muonref->eta()) > 1.4 && fabs(muonref->eta()) < 1.6)) eta_veto = true;
00040         if(muonref->phi() < 0.1 && muonref->phi() > -0.1) phi_veto = true;
00041         if( muType != 1 || muonref ->numberOfMatches() > 0 || eta_veto || phi_veto || muonEnergyFraction > 0.9 ) decision = false; // as place holder
00042       }
00043       else{
00044         //cout << discriminatorOption_ << endl;
00045         throw edm::Exception(edm::errors::UnimplementedFeature) << " Invalid Discriminator Option! Please check cfi file \n";
00046       }
00047     } // valid muon ref
00048     
00049     if (decision) {
00050       thePFTauDiscriminatorAgainstMuon->setValue(iPFTau,1);
00051     } else {
00052       thePFTauDiscriminatorAgainstMuon->setValue(iPFTau,0);
00053     }
00054     
00055   } // pf tau loop
00056   iEvent.put(thePFTauDiscriminatorAgainstMuon);
00057 } // class itself
00058 

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