![]() |
![]() |
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);