CMS 3D CMS Logo

Skim_HSCPFilter.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: HSCPFilter
4 // Class: HSCPFilter
5 //
13 //
14 // Original Author: Jie Chen
15 // Created: Thu Apr 29 16:32:10 CDT 2010
16 //
17 //
18 
19 
20 // system include files
21 #include <memory>
22 
23 // user include files
26 
29 
31 
35 
39 
42 
45 
46 
47 //
48 // class declaration
49 //
50 
51 class HSCPFilter : public edm::EDFilter {
52  public:
53  explicit HSCPFilter(const edm::ParameterSet&);
54  ~HSCPFilter() override;
55 
56  private:
57  void beginJob() override ;
58  bool filter(edm::Event&, const edm::EventSetup&) override;
59  void endJob() override ;
60  bool filterFlag;
61 #ifdef THIS_IS_AN_EVENT_EXAMPLE
63 #endif
68  int ndedxHits;
70 
71  // ----------member data ---------------------------
72 };
73 
74 //
75 // constants, enums and typedefs
76 //
77 
78 //
79 // static data member definitions
80 //
81 
82 //
83 // constructors and destructor
84 //
86 {
87  filterFlag = iConfig.getParameter< bool >("filter");
88 #ifdef THIS_IS_AN_EVENT_EXAMPLE
89  pInToken = consumes<ExampleData>(iConfig.getParameter< edm::InputTag >("example"));
90 #endif
91  recoVertexToken = consumes<reco::VertexCollection>(edm::InputTag("offlinePrimaryVertices"));
92  input_muon_collectionToken = consumes<reco::MuonCollection>(iConfig.getParameter< edm::InputTag >("inputMuonCollection"));
93  input_track_collectionToken = consumes<reco::TrackCollection>(iConfig.getParameter< edm::InputTag >("inputTrackCollection"));
94  input_dedx_collectionToken = consumes<edm::ValueMap<reco::DeDxData> >(iConfig.getParameter< edm::InputTag >("inputDedxCollection"));
95  dedxMin = iConfig.getParameter< double >("dedxMin");
96  dedxMaxLeft = iConfig.getParameter< double >("dedxMaxLeft");
97  trkPtMin = iConfig.getParameter< double >("trkPtMin");
98  etaMin = iConfig.getParameter< double >("etaMin");
99  etaMax = iConfig.getParameter< double >("etaMax");
100  ndedxHits = iConfig.getParameter< int >("ndedxHits");
101  chi2nMax = iConfig.getParameter< double >("chi2nMax");
102  dxyMax = iConfig.getParameter< double >("dxyMax");
103  dzMax = iConfig.getParameter< double >("dzMax");
104  SAMuPtMin = iConfig.getParameter< double >("SAMuPtMin");
105 }
106 
107 
109 {
110 
111  // do anything here that needs to be done at desctruction time
112  // (e.g. close files, deallocate resources etc.)
113 
114 }
115 
116 
117 //
118 // member functions
119 //
120 
121 // ------------ method called on each new Event ------------
122 bool
124 {
125  using namespace edm;
126 #ifdef THIS_IS_AN_EVENT_EXAMPLE
128  iEvent.getByToken(pInToken,pIn);
129 #endif
130 
131 #ifdef THIS_IS_AN_EVENTSETUP_EXAMPLE
132  ESHandle<SetupData> pSetup;
133  iSetup.get<SetupRecord>().get(pSetup);
134 #endif
135 
136  using namespace reco;
137 
138  edm::Handle<reco::VertexCollection> recoVertexHandle;
139  iEvent.getByToken(recoVertexToken, recoVertexHandle);
140  reco::VertexCollection recoVertex = *recoVertexHandle;
141 
142  if(!filterFlag) return true;
143 
144  if(recoVertex.empty()) return false;
145 
146  using reco::MuonCollection;
147 
148  Handle<MuonCollection> muTracks;
149  iEvent.getByToken(input_muon_collectionToken,muTracks);
150  const reco::MuonCollection muonC = *(muTracks.product());
151  for(unsigned int i=0; i<muonC.size(); i++){
152  reco::MuonRef muon = reco::MuonRef( muTracks, i );
153  if(!muon->standAloneMuon().isNull()) {
154  TrackRef SATrack = muon->standAloneMuon();
155  if(SATrack->pt()>SAMuPtMin) return true;
156  }
157 
158  }
159 
160 
161 
162 
163 
164 
165  using reco::TrackCollection;
166  Handle<TrackCollection> tkTracks;
167  iEvent.getByToken(input_track_collectionToken,tkTracks);
168  const reco::TrackCollection tkTC = *(tkTracks.product());
169 
170  Handle<ValueMap<DeDxData> > dEdxTrackHandle;
171  iEvent.getByToken(input_dedx_collectionToken, dEdxTrackHandle);
172  const ValueMap<DeDxData> dEdxTrack = *dEdxTrackHandle.product();
173 
174  for(size_t i=0; i<tkTracks->size(); i++){
175 
176  reco::TrackRef trkRef = reco::TrackRef(tkTracks, i);
177 
178 
179  if(trkRef->pt()>trkPtMin && trkRef->eta()<etaMax && trkRef->eta()>etaMin && trkRef->normalizedChi2()<chi2nMax){
180 
181  double dz = trkRef->dz (recoVertex[0].position());
182  double dxy = trkRef->dxy(recoVertex[0].position());
183  double distancemin =sqrt(dxy*dxy+dz*dz);
184  int closestvertex=0;
185  for(unsigned int i=1;i<recoVertex.size();i++){
186  dz = trkRef->dz (recoVertex[i].position());
187  dxy = trkRef->dxy(recoVertex[i].position());
188  double distance = sqrt(dxy*dxy+dz*dz);
189  if(distance < distancemin ){
190  distancemin = distance;
191  closestvertex=i;
192  }
193  }
194 
195  dz = trkRef->dz (recoVertex[closestvertex].position());
196  dxy = trkRef->dxy(recoVertex[closestvertex].position());
197 
198  if(fabs(dz)<dzMax && fabs(dxy)<dxyMax ){
199 
200  double dedx = dEdxTrack[trkRef].dEdx();
201  int dedxnhits = dEdxTrack[trkRef].numberOfMeasurements();
202  if((dedx >dedxMin || dedx<dedxMaxLeft) && dedxnhits > ndedxHits) return true;
203  }
204  }
205  }
206  return false;
207 
208 }
209 
210 // ------------ method called once each job just before starting event loop ------------
211 void
213 {
214 }
215 
216 // ------------ method called once each job just after ending the event loop ------------
217 void
219 }
220 
221 //define this as a plug-in
T getParameter(std::string const &) const
edm::EDGetTokenT< reco::TrackCollection > input_track_collectionToken
edm::EDGetTokenT< edm::ValueMap< reco::DeDxData > > input_dedx_collectionToken
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:15
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
std::vector< Muon > MuonCollection
collection of Muon objects
Definition: MuonFwd.h:9
double dedxMaxLeft
int iEvent
Definition: GenABIO.cc:224
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
~HSCPFilter() override
bool filter(edm::Event &, const edm::EventSetup &) override
T sqrt(T t)
Definition: SSEVec.h:18
double SAMuPtMin
edm::Ref< MuonCollection > MuonRef
presistent reference to a Muon
Definition: MuonFwd.h:13
bool isNull() const
Checks for null.
Definition: Ref.h:248
edm::EDGetTokenT< reco::VertexCollection > recoVertexToken
T const * product() const
Definition: Handle.h:74
edm::Ref< TrackCollection > TrackRef
persistent reference to a Track
Definition: TrackFwd.h:21
fixed size matrix
HLT enums.
static int position[264][3]
Definition: ReadPGInfo.cc:509
T get() const
Definition: EventSetup.h:71
HSCPFilter(const edm::ParameterSet &)
void endJob() override
void beginJob() override
edm::EDGetTokenT< reco::MuonCollection > input_muon_collectionToken