test
CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
RPCMonitorDigi.cc
Go to the documentation of this file.
1 #include <set>
2 #include <sstream>
10 //Tracking Tools
12 //FW Core
14 //Reco Muon
16 
17 const std::string RPCMonitorDigi::regionNames_[3] = {"Endcap-", "Barrel", "Endcap+"};
18 
20  : counter(0),
21  dcs_(false),
22  numberOfDisks_(0),
23  numberOfInnerRings_(0){
24 
25  saveRootFile = pset.getUntrackedParameter<bool>("SaveRootFile", false);
26  RootFileName = pset.getUntrackedParameter<std::string>("RootFileName", "RPCMonitorDigiDQM.root");
27 
28  useMuonDigis_= pset.getUntrackedParameter<bool>("UseMuon", true);
29  useRollInfo_= pset.getUntrackedParameter<bool>("UseRollInfo", false);
30 
31  muPtCut_ = pset.getUntrackedParameter<double>("MuonPtCut", 3.0);
32  muEtaCut_ = pset.getUntrackedParameter<double>("MuonEtaCut", 1.9);
33 
34  subsystemFolder_ = pset.getUntrackedParameter<std::string>("RPCFolder", "RPC");
35  globalFolder_ = pset.getUntrackedParameter<std::string>("GlobalFolder", "SummaryHistograms");
36 
37  //Parametersets for tokens
38  muonLabel_ = consumes<reco::CandidateView>(pset.getParameter<edm::InputTag>("MuonLabel"));
39  rpcRecHitLabel_ = consumes<RPCRecHitCollection>(pset.getParameter<edm::InputTag>("RecHitLabel"));
40  scalersRawToDigiLabel_ = consumes<DcsStatusCollection>(pset.getParameter<edm::InputTag>("ScalersRawToDigiLabel"));
41 
42  noiseFolder_ = pset.getUntrackedParameter<std::string>("NoiseFolder", "AllHits");
43  muonFolder_ = pset.getUntrackedParameter<std::string>("MuonFolder", "Muon");
44 
45 }
46 
48 
49 
51 
52  edm::LogInfo ("rpcmonitordigi") <<"[RPCMonitorDigi]: Begin Run " ;
53 
54  std::set<int> disk_set, ring_set;
56  iSetup.get<MuonGeometryRecord>().get(rpcGeo);
57 
58  //loop on geometry to book all MEs
59  edm::LogInfo ("rpcmonitordigi") <<"[RPCMonitorDigi]: Booking histograms per roll. " ;
60  for (TrackingGeometry::DetContainer::const_iterator it=rpcGeo->dets().begin();it<rpcGeo->dets().end();it++){
61  if(dynamic_cast< const RPCChamber* >( *it ) != 0 ){
62  const RPCChamber* ch = dynamic_cast< const RPCChamber* >( *it );
63  std::vector< const RPCRoll*> roles = (ch->rolls());
64  if(useRollInfo_){
65  for(std::vector<const RPCRoll*>::const_iterator r = roles.begin();r != roles.end(); ++r){
66  RPCDetId rpcId = (*r)->id();
67 
68  //get station and inner ring
69  if(rpcId.region()!=0){
70  disk_set.insert(rpcId.station());
71  ring_set.insert(rpcId.ring());
72  }
73 
74  //booking all histograms
75  RPCGeomServ rpcsrv(rpcId);
76  std::string nameID = rpcsrv.name();
77  if(useMuonDigis_) bookRollME(ibooker,rpcId ,iSetup, muonFolder_, meMuonCollection[nameID]);
78  bookRollME(ibooker, rpcId, iSetup, noiseFolder_, meNoiseCollection[nameID]);
79  }
80  }else{
81  RPCDetId rpcId = roles[0]->id(); //any roll would do - here I just take the first one
82  RPCGeomServ rpcsrv(rpcId);
83  std::string nameID = rpcsrv.chambername();
84  if(useMuonDigis_) bookRollME(ibooker, rpcId,iSetup, muonFolder_, meMuonCollection[nameID]);
85  bookRollME(ibooker, rpcId, iSetup, noiseFolder_, meNoiseCollection[nameID]);
86  if(rpcId.region()!=0){
87  disk_set.insert(rpcId.station());
88  ring_set.insert(rpcId.ring());
89  }
90  }
91  }
92  }//end loop on geometry to book all MEs
93 
94  numberOfDisks_ = disk_set.size();
95  numberOfInnerRings_ = (*ring_set.begin());
96 
97  //Book
101 
102  std::string currentFolder = subsystemFolder_ +"/"+noiseFolder_;
103  ibooker.setCurrentFolder(currentFolder);
104 
105  noiseRPCEvents_ = ibooker.book1D("RPCEvents","RPCEvents", 1, 0.5, 1.5);
106 
107  if(useMuonDigis_ ){
111 
112  currentFolder = subsystemFolder_ +"/"+muonFolder_;
113  ibooker.setCurrentFolder(currentFolder);
114 
115  muonRPCEvents_ = ibooker.book1D("RPCEvents", "RPCEvents", 1, 0.5, 1.5);
116  NumberOfMuon_ = ibooker.book1D("NumberOfMuons", "Number of Muons", 11, -0.5, 10.5);
117  NumberOfRecHitMuon_ = ibooker.book1D("NumberOfRecHitMuons", "Number of RPC RecHits per Muon", 8, -0.5, 7.5);
118  }
119 
120  //Clear flags;
121  dcs_ = true;
122 }
123 
125  dcs_ = true;
126  //Check HV status
127  this->makeDcsInfo(event);
128  if( !dcs_){
129  edm::LogWarning ("rpcmonitordigi") <<"[RPCMonitorDigi]: DCS bit OFF" ;
130  return;//if RPC not ON there's no need to continue
131  }
132 
133  counter++;
134  edm::LogInfo ("rpcmonitordigi") <<"[RPCMonitorDigi]: Beginning analyzing event " << counter;
135 
136  //Muons
138  event.getByToken(muonLabel_, muonCands);
139 
140 
141  std::map<RPCDetId , std::vector<RPCRecHit> > rechitMuon;
142 
143  int numMuons = 0;
144  int numRPCRecHit = 0 ;
145 
146  if(muonCands.isValid()){
147 
148  int nStaMuons = muonCands->size();
149 
150  for( int i = 0; i < nStaMuons; i++ ) {
151 
152  const reco::Candidate & goodMuon = (*muonCands)[i];
153  const reco::Muon * muCand = dynamic_cast<const reco::Muon*>(&goodMuon);
154 
155  if(!muCand->isGlobalMuon())continue;
156  if(muCand->pt() < muPtCut_ || fabs(muCand->eta())>muEtaCut_) continue;
157  numMuons++;
158  reco::Track muTrack = (*(muCand->outerTrack()));
159  std::vector<TrackingRecHitRef > rpcTrackRecHits;
160  //loop on mu rechits
161  for ( trackingRecHit_iterator it= muTrack.recHitsBegin(); it != muTrack.recHitsEnd() ; it++) {
162  if (!(*it)->isValid ())continue;
163  int muSubDetId = (*it)->geographicalId().subdetId();
164  if(muSubDetId == MuonSubdetId::RPC) {
165  numRPCRecHit ++;
166  TrackingRecHit * tkRecHit = (*it)->clone();
167  RPCRecHit* rpcRecHit = dynamic_cast<RPCRecHit*>(tkRecHit);
168  int detId = (int)rpcRecHit->rpcId();
169  if(rechitMuon.find(detId) == rechitMuon.end() || rechitMuon[detId].size() == 0){
170  std::vector<RPCRecHit> myVect(1,*rpcRecHit );
171  rechitMuon[detId]= myVect;
172  }else {
173  rechitMuon[detId].push_back(*rpcRecHit);
174  }
175  }
176  }// end loop on mu rechits
177 
178  }
179 
180  if( NumberOfMuon_) NumberOfMuon_->Fill(numMuons);
181  if( NumberOfRecHitMuon_) NumberOfRecHitMuon_->Fill( numRPCRecHit);
182 
183  }else{
184  edm::LogError ("rpcmonitordigi") <<"[RPCMonitorDigi]: Muons - Product not valid for event" << counter;
185  }
186 
187  //RecHits
189  event.getByToken( rpcRecHitLabel_ , rpcHits);
190  std::map<RPCDetId , std::vector<RPCRecHit> > rechitNoise;
191 
192 
193  if(rpcHits.isValid()){
194 
195  // RPC rec hits NOT associated to a muon
197  std::vector<RPCRecHit>::const_iterator muonRecHitIter;
198 
199  for (rpcRecHitIter = rpcHits->begin(); rpcRecHitIter != rpcHits->end() ; rpcRecHitIter++) {
200  RPCRecHit rpcRecHit = (*rpcRecHitIter);
201  int detId = (int)rpcRecHit.rpcId();
202  if(rechitNoise.find(detId) == rechitNoise.end() || rechitNoise[detId].size() == 0){
203  std::vector<RPCRecHit> myVect(1,rpcRecHit );
204  rechitNoise[detId]= myVect;
205  }else {
206  rechitNoise[detId].push_back(rpcRecHit);
207  }
208  }
209  }else{
210  edm::LogError ("rpcmonitordigi") <<"[RPCMonitorDigi]: RPCRecHits - Product not valid for event" << counter;
211  }
212 
213 
215  if( noiseRPCEvents_ != 0) noiseRPCEvents_->Fill(1);
216 
217  if(useMuonDigis_ ) this->performSourceOperation(rechitMuon, muonFolder_);
218  this->performSourceOperation(rechitNoise, noiseFolder_);
219 }
220 
221 
222 void RPCMonitorDigi::performSourceOperation( std::map<RPCDetId , std::vector<RPCRecHit> > & recHitMap, std::string recHittype){
223 
224  edm::LogInfo ("rpcmonitordigi") <<"[RPCMonitorDigi]: Performing DQM source operations for ";
225 
226  if(recHitMap.size()==0) return;
227 
228  std::map<std::string, std::map<std::string, MonitorElement*> > meRollCollection ;
229  std::map<std::string, MonitorElement*> meWheelDisk ;
230  std::map<std::string, MonitorElement*> meRegion ;
231  std::map<std::string, MonitorElement*> meSectorRing;
232 
233  if(recHittype == muonFolder_ ) {
234  meRollCollection = meMuonCollection;
235  meWheelDisk = wheelDiskMuonCollection;
236  meRegion = regionMuonCollection;
237  meSectorRing = sectorRingMuonCollection;
238  }else if(recHittype == noiseFolder_ ){
239  meRollCollection = meNoiseCollection;
240  meWheelDisk = wheelDiskNoiseCollection;
241  meRegion = regionNoiseCollection;
242  meSectorRing = sectorRingNoiseCollection;
243  }else{
244  edm::LogWarning("rpcmonitordigi")<<"[RPCMonitorDigi]: RecHit type not valid.";
245  return;
246  }
247 
248 
249  int totalNumberOfRecHits[3] ={ 0, 0, 0};
250  std::stringstream os;
251 
252  //Loop on Rolls
253  for ( std::map<RPCDetId , std::vector<RPCRecHit> >::const_iterator detIdIter = recHitMap.begin(); detIdIter != recHitMap.end() ; detIdIter++){
254 
255  RPCDetId detId = (*detIdIter).first;
256  // int id=detId();
257 
258  //get roll number
259  rpcdqm::utils rpcUtils;
260  int nr = rpcUtils.detId2RollNr(detId);
261 
262 
263  RPCGeomServ geoServ(detId);
264  std::string nameRoll = "";
265 
266 
267  if(useRollInfo_) nameRoll = geoServ.name();
268  else nameRoll = geoServ.chambername();
269 
270  int region=(int)detId.region();
271  int wheelOrDiskNumber;
272  std::string wheelOrDiskType;
273  int ring = 0 ;
274  int sector = detId.sector();
275  int layer = 0;
276  int totalRolls = 3;
277  int roll = detId.roll();
278  if(region == 0) {
279  wheelOrDiskType = "Wheel";
280  wheelOrDiskNumber = (int)detId.ring();
281  int station = detId.station();
282 
283  if(station == 1){
284  if(detId.layer() == 1){
285  layer = 1; //RB1in
286  totalRolls = 2;
287  }else{
288  layer = 2; //RB1out
289  totalRolls = 2;
290  }
291  if(roll == 3) roll =2; // roll=3 is Forward
292  }else if(station == 2){
293  if(detId.layer() == 1){
294  layer = 3; //RB2in
295  if( abs(wheelOrDiskNumber) ==2 && roll == 3) {
296  roll = 2; //W -2, +2 RB2in has only 2 rolls
297  totalRolls = 2;
298  }
299  }else{
300  layer = 4; //RB2out
301  if( abs(wheelOrDiskNumber) !=2 && roll == 3){
302  roll = 2;//W -1, 0, +1 RB2out has only 2 rolls
303  totalRolls = 2;
304  }
305  }
306  }else if (station == 3){
307  layer = 5; //RB3
308  totalRolls = 2;
309  if(roll == 3) roll =2;
310  }else{
311  layer = 6; //RB4
312  totalRolls = 2;
313  if(roll == 3) roll =2;
314  }
315 
316  }else {
317  wheelOrDiskType = "Disk";
318  wheelOrDiskNumber = region*(int)detId.station();
319  ring = detId.ring();
320  }
321 
322  std::vector<RPCRecHit> recHits = (*detIdIter).second;
323  int numberOfRecHits = recHits.size();
324  totalNumberOfRecHits[region + 1 ] += numberOfRecHits;
325 
326  std::set<int> bxSet ;
327  int numDigi = 0;
328 
329  std::map<std::string, MonitorElement*> meMap = meRollCollection[nameRoll];
330 
331  //Loop on recHits
332  for(std::vector<RPCRecHit>::const_iterator recHitIter = recHits.begin(); recHitIter != recHits.end(); recHitIter++){
333  RPCRecHit recHit = (*recHitIter);
334 
335  int bx = recHit.BunchX();
336  bxSet.insert(bx);
337  int clusterSize = (int)recHit.clusterSize();
338  numDigi += clusterSize ;
339  int firstStrip = recHit.firstClusterStrip();
340  int lastStrip = clusterSize + firstStrip - 1;
341 
342  // ###################### Roll Level #################################
343 
344  os.str("");
345  os<<"Occupancy_"<<nameRoll;
346  if(meMap[os.str()]) {
347  for(int s=firstStrip; s<= lastStrip; s++){
348  if(useRollInfo_) { meMap[os.str()]->Fill(s);}
349  else{
350  int nstrips = meMap[os.str()]->getNbinsX()/totalRolls;
351  meMap[os.str()]->Fill(s + nstrips*(roll-1)); }
352  }
353  }
354 
355  os.str("");
356  os<<"BXDistribution_"<<nameRoll;
357  if(meMap[os.str()]) meMap[os.str()]->Fill(bx);
358 
359 
360  os.str("");
361  os<<"ClusterSize_"<<nameRoll;
362  if(meMap[os.str()]) meMap[os.str()]->Fill(clusterSize);
363 
364 
365 
366  // ###################### Sector- Ring Level #################################
367 
368 
369  os.str("");
370  os<<"Occupancy_"<<wheelOrDiskType<<"_"<<wheelOrDiskNumber<<"_Sector_"<<sector;
371  if( meSectorRing[os.str()]){
372  for(int s=firstStrip; s<= lastStrip; s++){//Loop on digis
373  meSectorRing[os.str()]->Fill(s, nr);
374  }
375  }
376 
377  // os.str("");
378 // os<<"BxDistribution_"<<wheelOrDiskType<<"_"<<wheelOrDiskNumber<<"_Sector_"<<sector;
379 // if( meSectorRing[os.str()]) meSectorRing[os.str()]->Fill(bx);
380 
381  os.str("");
382  if(geoServ.segment() > 0 && geoServ.segment() < 19 ){
383  os<<"Occupancy_"<<wheelOrDiskType<<"_"<<wheelOrDiskNumber<<"_Ring_"<<ring<<"_CH01-CH18";
384  }else if (geoServ.segment() > 18 ){
385  os<<"Occupancy_"<<wheelOrDiskType<<"_"<<wheelOrDiskNumber<<"_Ring_"<<ring<<"_CH19-CH36";
386  }
387 
388  if( meSectorRing[os.str()]){
389  for(int s=firstStrip; s<= lastStrip; s++){//Loop on digis
390  meSectorRing[os.str()]->Fill(s + 32*(detId.roll()-1), geoServ.segment());
391  }
392  }
393 
394  // os.str("");
395 // os<<"BxDistribution_"<<wheelOrDiskType<<"_"<<wheelOrDiskNumber<<"_Ring_"<<ring;
396 // if( meSectorRing[os.str()]) meSectorRing[os.str()]->Fill(bx);
397 
398 
399  // ###################### Wheel/Disk Level #########################ààà
400  if(region ==0){
401  os.str("");
402  os<<"1DOccupancy_Wheel_"<<wheelOrDiskNumber;
403  if( meWheelDisk[os.str()]) meWheelDisk[os.str()]->Fill(sector, clusterSize);
404 
405  os.str("");
406  os<<"Occupancy_Roll_vs_Sector_"<<wheelOrDiskType<<"_"<<wheelOrDiskNumber;
407  if (meWheelDisk[os.str()]) meWheelDisk[os.str()]->Fill(sector, nr, clusterSize);
408 
409  }else{
410  os.str("");
411  os<<"1DOccupancy_Ring_"<<ring;
412  if ((meWheelDisk[os.str()])){
413  if (wheelOrDiskNumber > 0 ) meWheelDisk[os.str()]->Fill(wheelOrDiskNumber +3, clusterSize);
414  else meWheelDisk[os.str()]->Fill(wheelOrDiskNumber + 4, clusterSize);
415  }
416 
417  os.str("");
418  os<<"Occupancy_Ring_vs_Segment_"<<wheelOrDiskType<<"_"<<wheelOrDiskNumber;
419  if (meWheelDisk[os.str()]) meWheelDisk[os.str()]->Fill( geoServ.segment(), (ring-1)*3-detId.roll()+1,clusterSize );
420  }
421 
422  os.str("");
423  os<<"BxDistribution_"<<wheelOrDiskType<<"_"<<wheelOrDiskNumber;
424  if(meWheelDisk[os.str()]) meWheelDisk[os.str()]->Fill(bx);
425 
426 
427  os.str("");
428  os<<"ClusterSize_"<<wheelOrDiskType<<"_"<<wheelOrDiskNumber<<"_Layer"<<layer;
429  if(meWheelDisk[os.str()]) meWheelDisk[os.str()] -> Fill(clusterSize);
430 
431 
432  os.str("");
433  os<<"ClusterSize_"<<wheelOrDiskType<<"_"<<wheelOrDiskNumber<<"_Ring"<<ring;
434  if(meWheelDisk[os.str()]) meWheelDisk[os.str()] -> Fill(clusterSize);
435 
436 
437  // ###################### Global ##################################
438 
439 
440  os.str("");
441  os<<"ClusterSize_"<<RPCMonitorDigi::regionNames_[region +1];
442  if(meRegion[os.str()]) meRegion[os.str()] -> Fill(clusterSize);
443 
444  os.str("");
445  os<<"ClusterSize_";
446  if(region == 0){
447  os<<"Layer"<<layer;
448  }else{
449  os<<"Ring"<<ring;
450  }
451  if(meRegion[os.str()]) meRegion[os.str()] -> Fill(clusterSize);
452 
453 
454  }//end loop on recHits
455 
456  os.str("");
457  os<<"BXWithData_"<<nameRoll;
458  if(meMap[os.str()]) meMap[os.str()]->Fill(bxSet.size());
459 
460  os.str("");
461  os<<"NumberOfClusters_"<<nameRoll;
462  if(meMap[os.str()]) meMap[os.str()]->Fill( numberOfRecHits);
463 
464  os.str("");
465  os<<"Multiplicity_"<<RPCMonitorDigi::regionNames_[region +1];
466  if(meRegion[os.str()]) meRegion[os.str()]->Fill(numDigi);
467 
468  os.str("");
469  if(region==0) {
470  os<<"Occupancy_for_Barrel";
471  if(meRegion[os.str()]) meRegion[os.str()]->Fill(sector, wheelOrDiskNumber, numDigi);
472  }else {
473  os<<"Occupancy_for_Endcap";
474  int xbin = wheelOrDiskNumber+3;
475  if (region==-1) xbin = wheelOrDiskNumber+4;
476  if(meRegion[os.str()]) meRegion[os.str()]->Fill(xbin,ring,numDigi);
477  }
478 
479  os.str("");
480  os<<"Multiplicity_"<<nameRoll;
481  if(meMap[os.str()]) meMap[os.str()]->Fill(numDigi);
482 
483  }//end loop on rolls
484 
485  for(int i = 0; i< 3; i++ ){
486  os.str("");
487  os<<"NumberOfClusters_"<<RPCMonitorDigi::regionNames_[i];
488  if(meRegion[os.str()]) meRegion[os.str()]->Fill( totalNumberOfRecHits[i]);
489  }
490 
491 }
492 
493 
495 
497 
498  if ( ! e.getByToken(scalersRawToDigiLabel_, dcsStatus) ){
499  dcs_ = true;
500  return;
501  }
502 
503  if ( ! dcsStatus.isValid() )
504  {
505  edm::LogWarning("RPCDcsInfo") << "scalersRawToDigi not found" ;
506  dcs_ = true; // info not available: set to true
507  return;
508  }
509 
510  for (DcsStatusCollection::const_iterator dcsStatusItr = dcsStatus->begin();
511  dcsStatusItr != dcsStatus->end(); ++dcsStatusItr){
512 
513  if (!dcsStatusItr->ready(DcsStatus::RPC)) dcs_=false;
514  }
515 
516  return ;
517 }
518 
519 
virtual std::string chambername()
Definition: RPCGeomServ.cc:120
T getParameter(std::string const &) const
std::map< std::string, MonitorElement * > regionMuonCollection
std::map< std::string, MonitorElement * > sectorRingNoiseCollection
int firstClusterStrip() const
Definition: RPCRecHit.h:105
T getUntrackedParameter(std::string const &, T const &) const
int i
Definition: DBlmapReader.cc:9
std::string globalFolder_
std::string muonFolder_
virtual float pt() const
transverse momentum
std::string RootFileName
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:434
std::map< std::string, MonitorElement * > wheelDiskMuonCollection
std::map< std::string, MonitorElement * > regionNoiseCollection
bool isGlobalMuon() const
Definition: Muon.h:218
std::map< std::string, std::map< std::string, MonitorElement * > > meNoiseCollection
MonitorElement * muonRPCEvents_
void bookSectorRingME(DQMStore::IBooker &, const std::string &, std::map< std::string, MonitorElement * > &)
Booking of MonitoringElement at Sector/Ring level.
RPCMonitorDigi(const edm::ParameterSet &)
void makeDcsInfo(const edm::Event &)
std::string noiseFolder_
return((rh^lh)&mask)
void Fill(long long x)
std::map< std::string, MonitorElement * > wheelDiskNoiseCollection
tuple numMuons
Definition: patZpeak.py:40
int clusterSize() const
Definition: RPCRecHit.h:109
static const std::string regionNames_[3]
Geometry.
RPCDetId rpcId() const
Return the rpcId.
Definition: RPCRecHit.h:97
virtual std::string name()
Definition: RPCGeomServ.cc:20
int roll() const
Definition: RPCDetId.h:120
virtual void analyze(const edm::Event &, const edm::EventSetup &)
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
int ring() const
Definition: RPCDetId.h:72
virtual float eta() const
momentum pseudorapidity
void bookRollME(DQMStore::IBooker &, RPCDetId &, const edm::EventSetup &, const std::string &, std::map< std::string, MonitorElement * > &)
Booking of MonitoringElement for one RPCDetId (= roll)
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:113
const std::vector< const RPCRoll * > & rolls() const
Return the Rolls.
Definition: RPCChamber.cc:68
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
trackingRecHit_iterator recHitsBegin() const
Iterator to first hit on the track.
Definition: Track.h:63
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
bool isValid() const
Definition: HandleBase.h:76
virtual TrackRef outerTrack() const
reference to Track reconstructed in the muon detector only
Definition: Muon.h:51
MonitorElement * NumberOfRecHitMuon_
virtual TrackingRecHit * clone() const =0
int layer() const
Definition: RPCDetId.h:108
virtual int segment()
Definition: RPCGeomServ.cc:467
int detId2RollNr(const RPCDetId &_id)
Definition: utils.h:18
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:274
const T & get() const
Definition: EventSetup.h:55
edm::EDGetTokenT< RPCRecHitCollection > rpcRecHitLabel_
edm::EDGetTokenT< DcsStatusCollection > scalersRawToDigiLabel_
int sector() const
Sector id: the group of chambers at same phi (and increasing r)
Definition: RPCDetId.h:102
void performSourceOperation(std::map< RPCDetId, std::vector< RPCRecHit > > &, std::string)
static const int RPC
Definition: MuonSubdetId.h:14
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
static std::atomic< unsigned int > counter
void bookWheelDiskME(DQMStore::IBooker &, const std::string &, std::map< std::string, MonitorElement * > &)
Booking of MonitoringElemnt at Wheel/Disk level.
int BunchX() const
Definition: RPCRecHit.h:101
MonitorElement * noiseRPCEvents_
std::map< std::string, MonitorElement * > sectorRingMuonCollection
volatile std::atomic< bool > shutdown_flag false
std::map< std::string, std::map< std::string, MonitorElement * > > meMuonCollection
void bookRegionME(DQMStore::IBooker &, const std::string &, std::map< std::string, MonitorElement * > &)
Booking of MonitoringElemnt at region (Barrel/Endcap) level.
MonitorElement * NumberOfMuon_
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
std::string subsystemFolder_
Definition: Run.h:41
edm::EDGetTokenT< reco::CandidateView > muonLabel_
trackingRecHit_iterator recHitsEnd() const
Iterator to last hit on the track.
Definition: Track.h:65
int region() const
Region id: 0 for Barrel, +/-1 For +/- Endcap.
Definition: RPCDetId.h:63
int station() const
Definition: RPCDetId.h:96