CMS 3D CMS Logo

L2MuonIsolationProducer.cc

Go to the documentation of this file.
00001 
00006 // Framework
00007 #include "FWCore/Framework/interface/EDProducer.h"
00008 #include "FWCore/Framework/interface/Event.h"
00009 #include "FWCore/Framework/interface/EventSetup.h"
00010 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00011 #include "DataFormats/Common/interface/Handle.h"
00012 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00013 
00014 #include "DataFormats/RecoCandidate/interface/IsoDepositDirection.h"
00015 #include "RecoMuon/L2MuonIsolationProducer/src/L2MuonIsolationProducer.h"
00016 
00017 #include "DataFormats/Common/interface/AssociationMap.h"
00018 #include "DataFormats/TrackReco/interface/Track.h"
00019 #include "DataFormats/TrackReco/interface/TrackFwd.h"
00020 #include "DataFormats/RecoCandidate/interface/IsoDepositFwd.h"
00021 
00022 #include "PhysicsTools/IsolationAlgos/interface/IsoDepositExtractor.h"
00023 #include "PhysicsTools/IsolationAlgos/interface/IsoDepositExtractorFactory.h"
00024 
00025 #include <string>
00026 
00027 using namespace edm;
00028 using namespace std;
00029 using namespace reco;
00030 using namespace muonisolation;
00031 
00033 L2MuonIsolationProducer::L2MuonIsolationProducer(const ParameterSet& par) :
00034   theConfig(par),
00035   theSACollectionLabel(par.getParameter<edm::InputTag>("StandAloneCollectionLabel")), 
00036   theCuts(par.getParameter<std::vector<double> > ("EtaBounds"),
00037           par.getParameter<std::vector<double> > ("ConeSizes"),
00038           par.getParameter<std::vector<double> > ("Thresholds")),
00039   optOutputIsoDeposits(par.getParameter<bool>("OutputMuIsoDeposits")),
00040   theExtractor(0)
00041 {
00042   LogDebug("Muon|RecoMuon|L2MuonIsolationProducer")<<" L2MuonIsolationProducer constructor called";
00043 
00044   if (optOutputIsoDeposits) produces<reco::IsoDepositMap>();
00045   produces<edm::ValueMap<bool> >();
00046 }
00047   
00049 L2MuonIsolationProducer::~L2MuonIsolationProducer(){
00050   LogDebug("Muon|RecoMuon|L2MuonIsolationProducer")<<" L2MuonIsolationProducer destructor called";
00051   if (theExtractor) delete theExtractor;
00052 }
00053 
00055 void L2MuonIsolationProducer::beginJob(const edm::EventSetup& iSetup){
00056   //
00057   // Extractor
00058   //
00059   edm::ParameterSet extractorPSet = theConfig.getParameter<edm::ParameterSet>("ExtractorPSet");
00060   std::string extractorName = extractorPSet.getParameter<std::string>("ComponentName");
00061   theExtractor = IsoDepositExtractorFactory::get()->create( extractorName, extractorPSet);  
00062 }
00063 
00065 void L2MuonIsolationProducer::produce(Event& event, const EventSetup& eventSetup){
00066   std::string metname = "Muon|RecoMuon|L2MuonIsolationProducer";
00067   
00068   LogDebug(metname)<<" L2 Muon Isolation producing...";
00069 
00070   // Take the SA container
00071   LogDebug(metname)<<" Taking the StandAlone muons: "<<theSACollectionLabel;
00072   Handle<TrackCollection> tracks;
00073   event.getByLabel(theSACollectionLabel,tracks);
00074 
00075   // Find deposits and load into event
00076   LogDebug(metname)<<" Get energy around";
00077   std::auto_ptr<reco::IsoDepositMap> depMap( new reco::IsoDepositMap());
00078   std::auto_ptr<edm::ValueMap<bool> > isoMap( new edm::ValueMap<bool> ());
00079 
00080   theExtractor->fillVetos(event,eventSetup,*tracks);
00081 
00082   uint nTracks = tracks->size();
00083   std::vector<IsoDeposit> deps(nTracks);
00084   std::vector<bool> isos(nTracks, false);
00085 
00086   for (unsigned int i=0; i<nTracks; i++) {
00087       TrackRef tk(tracks,i);
00088 
00089       deps[i] = theExtractor->deposit(event, eventSetup, *tk);
00090 
00091       muonisolation::Cuts::CutSpec cuts_here = theCuts(tk->eta());
00092       
00093       double conesize = cuts_here.conesize;
00094       double dephlt = deps[i].depositWithin(conesize);
00095       if (dephlt<cuts_here.threshold) {
00096         isos[i] = true;
00097       } else {
00098         isos[i] = false;
00099       }
00100   }
00101 
00102   
00103 
00104   if (optOutputIsoDeposits){
00106     reco::IsoDepositMap::Filler depFiller(*depMap);
00107     depFiller.insert(tracks, deps.begin(), deps.end());
00108     depFiller.fill();
00109     event.put(depMap);
00110   }
00111 
00112   edm::ValueMap<bool> ::Filler isoFiller(*isoMap);
00113   isoFiller.insert(tracks, isos.begin(), isos.end());
00114   isoFiller.fill();
00115   event.put(isoMap);
00116   
00117   LogDebug(metname) <<" Event loaded"
00118                     <<"================================";
00119 }

Generated on Tue Jun 9 17:44:16 2009 for CMSSW by  doxygen 1.5.4