CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
RPCRecHitFilter.cc
Go to the documentation of this file.
1 // Orso Iorio, INFN Napoli
2 //
3 //This module is a filter based on the number of RPC Hits
4 //
5 
7 //#include "../interface/RecHitFilter.h"
8 
10 //#include "DataFormats/RPCDigi/interface/RPCDigi.h"
11 //#include "DataFormats/RPCDigi/interface/RPCDigiCollection.h"
13 
18 
29 
30 
33 
35 
39 
43 
44 
45 /*#include "DataFormats/L1Trigger/interface/L1MuonParticleFwd.h"
46 #include "DataFormats/L1GlobalMuonTrigger/interface/L1MuRegionalCand.h"
47 
48 #include "DataFormats/L1GlobalMuonTrigger/interface/L1MuGMTReadoutCollection.h"
49 
50 #include "DataFormats/L1GlobalMuonTrigger/interface/L1MuGMTCand.h"
51 */
52 
53 using namespace reco;
54 
55 typedef std::vector<L1MuRegionalCand> L1MuRegionalCandCollection;
56 
57 #include <sys/time.h>
58 #include <algorithm>
59 #include <memory>
60 #include <cmath>
61 #include <cmath>
62 #include "TFile.h"
63 #include "TMath.h"
64 #include "TTree.h"
65 
66 #include "TDirectory.h"
67 #include "TFile.h"
68 #include "TTree.h"
69 #include <cstdlib>
70 #include <stdio.h>
71 #include <cstdlib>
72 #include <string>
73 #include <memory>
74 #include<cmath>
75 
76 using namespace edm;
77 using namespace reco;
78 using namespace std;
79 
81 {
82  LogTrace("RPCEffTrackExtrapolation") <<"Dentro Costruttore"<<std::endl;
83 
84  RPCDataLabel = iConfig.getUntrackedParameter<std::string>("rpcRecHitLabel");
85 
86  // RPCRecHits = iConfig.getParameter< edm::InputTag >("RPCRecHits");
87 
88 
89  centralBX_ = iConfig.getUntrackedParameter<int>("CentralBunchCrossing",0);
90  BXWindow_ = iConfig.getUntrackedParameter<int>("BunchCrossingWindow",9999);
91 
92  minHits_ = iConfig.getUntrackedParameter<int>("minimumNumberOfHits",0);
93  hitsInStations_ = iConfig.getUntrackedParameter<int>("HitsInStation",0);
94 
95 
96  Debug_ = iConfig.getUntrackedParameter<bool>("Debug",false);
97  Verbose_ = iConfig.getUntrackedParameter<bool>("Verbose",false);
98 
99 
100  Barrel_ = iConfig.getUntrackedParameter<bool>("UseBarrel",true);
101  EndcapPositive_ = iConfig.getUntrackedParameter<bool>("UseEndcapPositive",true);
102  EndcapNegative_ = iConfig.getUntrackedParameter<bool>("UseEndcapNegative",true);
103 
104  cosmicsVeto_ = iConfig.getUntrackedParameter<bool>("CosmicsVeto",false);
105 }
106 
107 
109 {
110 
112  iSetup.get<MuonGeometryRecord>().get(rpcGeo);
113 
115  iEvent.getByLabel(RPCDataLabel,rpcHits);
116 
117 
118  ESHandle<GlobalTrackingGeometry> theTrackingGeometry;
119  iSetup.get<GlobalTrackingGeometryRecord>().get(theTrackingGeometry);
120 
121 
122  std::map <int , int > numberOfRecHitsBarrel;
123  std::map <int , int > numberOfDigisBarrel;
124  std::map <int , int > numberOfRecHitsEndcap;
125  std::map <int , int > numberOfDigisEndcap;
126 
127  std::map <pair < int , int > , std::vector<RPCDetId> > numberOfRecHitsSameWheelSameSector;
128  std::map <pair < int , int > , std::vector<RPCDetId> > numberOfDigisSameWheelSameSector;
129  std::map <pair < int , int > , std::vector<RPCDetId> > numberOfHitsSameDiskSectorPositive;
130  std::map <pair < int , int > , std::vector<RPCDetId> > numberOfHitsSameDiskSectorNegative;
131 
132 
133  const std::vector< const RPCRoll * > rls = rpcGeo->rolls();
134 
135  bool condition = true;
136 
137 
138  int nRecHits = 0;
139  int nBarrel = 0;
140  int nEndcap = 0;
141 
142 
144  for (int i = 0; i < (int) rls.size() ; ++i){
145 
146  RPCDetId did = rls[i]->id();
147 
148 
150  RPCRecHitCollection::range rpcRecHitRange = rpcHits->get(did);
152 
153 
154  for(RecHitsIt = rpcRecHitRange.first; RecHitsIt!=rpcRecHitRange.second; ++RecHitsIt){
155 
156  //std::cout<< " roll is "<< did << " bx recHit is " << RecHitsIt->BunchX()<< " event number " <<eventNumber <<std::endl;
157 
158  if(did.region()==0){
159 
160  if (cosmicsVeto_ ){
161 
162  for(int u = -1;u<=1;++u){
163  for(int t = -1;t<=1;++t){
164  numberOfRecHitsSameWheelSameSector[pair< int, int >( did.ring()+u,did.sector()+t)].push_back(did);
165  }
166  }
167  }
168 
169  else{
170  if( did.station()==1) {
171  for(int u = -1;u<=1;++u){
172  for(int t = -1;t<=1;++t){
173  numberOfRecHitsSameWheelSameSector[pair< int, int >(did.ring()+u,did.sector()+t)].push_back(did);
174  }
175  }
176  }
177  }
178 
179  ++numberOfRecHitsBarrel[did.ring()];
180  ++nBarrel;
181 
182  }
183 
184  else {
185  if(did.region()== -1) {
186  for(int t = -1;t<=1;++t){
187  numberOfHitsSameDiskSectorNegative[pair<int,int>(did.ring(),did.sector()+t)].push_back(did);
188  }
189  }
190 
191  if(did.region()== 1){
192  for(int t = -1;t<=1;++t){
193  numberOfHitsSameDiskSectorPositive[pair<int,int>(did.ring(),did.sector()+t)].push_back(did);
194  }
195  }
196  ++numberOfRecHitsEndcap[did.station()];
197 
198  ++nEndcap;
199  }
200 
201  ++nRecHits;
202 
203  break;
204  }
205 
206 
207  }
209 
210 
213  bool cond1 = false;
214  bool cond2 = false;
215  bool cond3 = false;
216 
217  std::map < int, bool >vectorBarrelCands;
218  std::map < int, bool >vectorEndcapCandsPositive;
219  std::map < int, bool >vectorEndcapCandsNegative;
220 
221  // barrel
222  for ( std::map <pair < int , int > , std::vector < RPCDetId> >::const_iterator iter = numberOfRecHitsSameWheelSameSector.begin();iter != numberOfRecHitsSameWheelSameSector.end();++iter){
223 
224  vectorBarrelCands[1] = false;
225  vectorBarrelCands[2] = false;
226 
227  if(iter->second.size()>1){
228  for(size_t i = 0; i < iter->second.size(); ++i){
229  if(iter->second[i].layer()==1 && iter->second[i].station() == 1)vectorBarrelCands[0] = true;
230  if(iter->second[i].layer()==2 && iter->second[i].station() == 1)vectorBarrelCands[1] = true;
231  if(cosmicsVeto_)if(iter->second[i].station() > 2){
232  vectorBarrelCands[1] = false;vectorBarrelCands[2] = false ;
233  break;
234  }
235  }
236  }
237 
238  if(( vectorBarrelCands[0] && vectorBarrelCands[1])) {
239  cond1 = true;
240  break;
241  }
242  }
243 
244 
245  // endcap positive
246  for ( std::map <pair < int ,int >, std::vector < RPCDetId> >::const_iterator iter = numberOfHitsSameDiskSectorPositive.begin(); iter != numberOfHitsSameDiskSectorPositive.end(); ++iter){
247 
248  vectorEndcapCandsPositive[1] = false;
249  vectorEndcapCandsPositive[2] = false;
250  vectorEndcapCandsPositive[3] = false;
251 
252 
253  if(iter->second.size()>1){
254  for(size_t i = 0; i < iter->second.size(); ++i){
255  if(iter->second[i].station()==1)vectorEndcapCandsPositive[1] = true;
256  if(iter->second[i].station()==2)vectorEndcapCandsPositive[2] = true;
257  if(iter->second[i].station()==3)vectorEndcapCandsPositive[3] = true;
258  }
259  }
260 
261  if(( (vectorEndcapCandsPositive[1] && vectorEndcapCandsPositive[2]) ||
262  (vectorEndcapCandsPositive[1] && vectorEndcapCandsPositive[3]) ||
263  (vectorEndcapCandsPositive[2] && vectorEndcapCandsPositive[3]) )) {
264  cond2 = true;
265  break;
266  }
267 
268  }
269 
270  // endcap negative
271  for ( std::map <pair < int ,int >, std::vector < RPCDetId> >::const_iterator iter = numberOfHitsSameDiskSectorNegative.begin(); iter != numberOfHitsSameDiskSectorNegative.end(); ++iter){
272 
273  vectorEndcapCandsNegative[1] = false;
274  vectorEndcapCandsNegative[2] = false;
275  vectorEndcapCandsNegative[3] = false;
276 
277 
278  if(iter->second.size()>1){
279  for(size_t i = 0; i < iter->second.size(); ++i){
280  if(iter->second[i].station()==1)vectorEndcapCandsNegative[1] = true;
281  if(iter->second[i].station()==2)vectorEndcapCandsNegative[2] = true;
282  if(iter->second[i].station()==3)vectorEndcapCandsNegative[3] = true;
283  }
284  }
285 
286  if(( (vectorEndcapCandsNegative[1] && vectorEndcapCandsNegative[2]) ||
287  (vectorEndcapCandsNegative[1] && vectorEndcapCandsNegative[3]) ||
288  (vectorEndcapCandsNegative[2] && vectorEndcapCandsNegative[3]) )) {
289  cond3 = true;
290  break;
291  }
292 
293  }
294 
295 
296  condition = condition && ( nBarrel + nEndcap >= minHits_ );
297 
298 
299  cond1 = Barrel_ && cond1;
300  cond2 = EndcapPositive_ && cond2;
301  cond3 = EndcapNegative_ && cond3;
302 
303  bool condition2 = (cond1 || cond2 || cond3);
304  if(Barrel_ || EndcapPositive_ || EndcapNegative_)condition = condition && condition2;
305 
306 
307 
308  return condition;
309 
310 }
311 
313 
T getUntrackedParameter(std::string const &, T const &) const
int i
Definition: DBlmapReader.cc:9
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
virtual bool filter(edm::Event &, const edm::EventSetup &) override
int iEvent
Definition: GenABIO.cc:230
int ring() const
Definition: RPCDetId.h:72
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:420
std::vector< L1MuRegionalCand > L1MuRegionalCandCollection
#define LogTrace(id)
RPCRecHitFilter(const edm::ParameterSet &)
const T & get() const
Definition: EventSetup.h:56
int sector() const
Sector id: the group of chambers at same phi (and increasing r)
Definition: RPCDetId.h:102
volatile std::atomic< bool > shutdown_flag false
int region() const
Region id: 0 for Barrel, +/-1 For +/- Endcap.
Definition: RPCDetId.h:63
int station() const
Definition: RPCDetId.h:96