CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/DPGAnalysis/Skims/src/EcalTangentFilter.cc

Go to the documentation of this file.
00001 #include "DPGAnalysis/Skims/interface/EcalTangentFilter.h"
00002 
00003 using namespace std;
00004 
00005 EcalTangentFilter::EcalTangentFilter(const edm::ParameterSet& iConfig){
00006         fMuLabel  = iConfig.getParameter<std::string>("MuLabel");
00007         fMuonD0Min  = iConfig.getParameter<double>("MuD0Min");
00008         fMuonD0Max  = iConfig.getParameter<double>("MuD0Max");
00009         fVerbose  = iConfig.getParameter<bool>("Verbose");
00010         cout << "----------------------------------------------------------------------" << std::endl;
00011         cout << "--- EcalTangentFilter constructor" << std::endl;
00012         cout << "---  MuLabel:       " << fMuLabel << std::endl;
00013         cout << "---  MuonD0Min:     " << fMuonD0Min << std::endl;
00014         cout << "---  MuonD0Max:     " << fMuonD0Max << std::endl;
00015         cout << "---  Verbose:     " << fVerbose << std::endl;
00016         cout << "----------------------------------------------------------------------" << std::endl;
00017         fNgood = 0;
00018         fNtot  = 0;
00019 }
00020 
00021 
00022 EcalTangentFilter::~EcalTangentFilter(){
00023   std::cout << "==> EcalTangentFilter> Number of accepted/total events = " << fNgood << "/" << fNtot << std::endl;
00024 }
00025 
00026 
00027 // ------------ method called on each new Event  ------------
00028 bool EcalTangentFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup){
00029         ++fNtot;
00030         bool goodEvent(false);
00031         using namespace edm;
00032         using namespace reco;
00033         edm::Handle<reco::MuonCollection> Muons;
00034         iEvent.getByLabel(fMuLabel, Muons);
00035         for (MuonCollection::const_iterator muon=Muons->begin(); muon!=Muons->end(); ++muon){
00036                 reco::TrackRef ref;
00037                 if(muon->outerTrack().isNonnull()){
00038                         ref = muon->outerTrack();
00039                         // Cut on impact parameter
00040                         double d0 = ref->d0();
00041                         if(fabs(d0) > fMuonD0Min && fabs(d0) < fMuonD0Max) goodEvent = true;
00042                 }
00043         }
00044         if(goodEvent){
00045                 ++fNgood;
00046                 if(fVerbose) std::cout << "==> EcalTangentFilter> new event r" << iEvent.id().run() << "/ev" << iEvent.id().event() << " accepted, so far: " << fNgood << std::endl;
00047         }
00048         return goodEvent;
00049 }
00050 
00051 // ------------ method called once each job just before starting event loop  ------------
00052 void EcalTangentFilter::beginJob(){
00053 }
00054 
00055 // ------------ method called once each job just after ending the event loop  ------------
00056 void EcalTangentFilter::endJob(){
00057 }
00058 
00059 //define this as a plug-in
00060 DEFINE_FWK_MODULE(EcalTangentFilter);