CMS 3D CMS Logo

SimMuFilter.cc
Go to the documentation of this file.
5 
7 public:
8  explicit SimMuFilter(const edm::ParameterSet &);
9  ~SimMuFilter() override;
10 
11 private:
12  virtual void beginJob();
13  virtual void endJob();
14  bool filter(edm::Event &, const edm::EventSetup &) override;
15 
16 private:
21 
26 
27  int nMuSel_;
28 };
29 
31  simTracksToken_ = consumes<std::vector<SimTrack>>(iConfig.getParameter<edm::InputTag>("simTracksInput"));
32  simHitsMuonRPCToken_ = consumes<edm::PSimHitContainer>(iConfig.getParameter<edm::InputTag>("simHitsMuonRPCInput"));
33  simHitsMuonCSCToken_ = consumes<edm::PSimHitContainer>(iConfig.getParameter<edm::InputTag>("simHitsMuonCSCInput"));
34  simHitsMuonDTToken_ = consumes<edm::PSimHitContainer>(iConfig.getParameter<edm::InputTag>("simHitsMuonDTInput"));
35  nMuSel_ = iConfig.getParameter<int>("nMuSel");
36 }
37 
39 
41  using namespace edm;
42 
47 
48  const std::vector<SimTrack> &simTracks = *simTracksHandle.product();
49 
50  int nTracks = simTracks.size();
51 
52  int nPass = 0;
53 
54  for (int it = 0; it < nTracks; it++) {
55  SimTrack simTrk = simTracks[it];
56 
57  int pdgId = simTrk.type();
58  float pt = simTrk.momentum().pt();
59 
60  if (abs(pdgId) != 13)
61  continue;
62  if (pt < 3.)
63  continue;
64 
65  int nSimHitRPC = 0;
66  int nSimHitCSC = 0;
67  int nSimHitDT = 0;
68 
69  for (PSimHitContainer::const_iterator simHitIt = simHitsMuonRPCHandle->begin();
70  simHitIt != simHitsMuonRPCHandle->end();
71  simHitIt++) {
72  if (simHitIt->trackId() != simTrk.trackId())
73  continue;
74 
75  nSimHitRPC++;
76  }
77 
78  for (PSimHitContainer::const_iterator simHitIt = simHitsMuonCSCHandle->begin();
79  simHitIt != simHitsMuonCSCHandle->end();
80  simHitIt++) {
81  if (simHitIt->trackId() != simTrk.trackId())
82  continue;
83 
84  nSimHitCSC++;
85  }
86 
87  for (PSimHitContainer::const_iterator simHitIt = simHitsMuonDTHandle->begin();
88  simHitIt != simHitsMuonDTHandle->end();
89  simHitIt++) {
90  if (simHitIt->trackId() != simTrk.trackId())
91  continue;
92 
93  nSimHitDT++;
94  }
95 
96  if (nSimHitRPC + nSimHitCSC + nSimHitDT > 0)
97  nPass++;
98  }
99 
100  return (nPass >= nMuSel_);
101 }
102 
104 
106 
107 // define this as a plug-in
edm::EDGetTokenT< edm::PSimHitContainer > simHitsMuonRPCToken_
Definition: SimMuFilter.cc:18
T getParameter(std::string const &) const
const unsigned int nTracks(const reco::Vertex &sv)
edm::EDGetTokenT< edm::PSimHitContainer > simHitsMuonCSCToken_
Definition: SimMuFilter.cc:19
bool filter(edm::Event &, const edm::EventSetup &) override
Definition: SimMuFilter.cc:40
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
edm::Handle< edm::PSimHitContainer > simHitsMuonDTHandle
Definition: SimMuFilter.cc:25
edm::Handle< edm::PSimHitContainer > simHitsMuonRPCHandle
Definition: SimMuFilter.cc:23
virtual void endJob()
Definition: SimMuFilter.cc:105
SimMuFilter(const edm::ParameterSet &)
Definition: SimMuFilter.cc:30
int iEvent
Definition: GenABIO.cc:224
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
unsigned int trackId() const
Definition: CoreSimTrack.h:31
T const * product() const
Definition: Handle.h:74
edm::Handle< std::vector< SimTrack > > simTracksHandle
Definition: SimMuFilter.cc:22
edm::Handle< edm::PSimHitContainer > simHitsMuonCSCHandle
Definition: SimMuFilter.cc:24
int type() const
particle type (HEP PDT convension)
Definition: CoreSimTrack.h:22
HLT enums.
virtual void beginJob()
Definition: SimMuFilter.cc:103
edm::EDGetTokenT< std::vector< SimTrack > > simTracksToken_
Definition: SimMuFilter.cc:17
const math::XYZTLorentzVectorD & momentum() const
Definition: CoreSimTrack.h:19
edm::EDGetTokenT< edm::PSimHitContainer > simHitsMuonDTToken_
Definition: SimMuFilter.cc:20
~SimMuFilter() override
Definition: SimMuFilter.cc:38