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>
13 //Tracking Tools
15 //FW Core
17 //Reco Muon
19 
20 const std::string RPCMonitorDigi::regionNames_[3] = {"Endcap-", "Barrel", "Endcap+"};
21 
23 
24  saveRootFile = pset.getUntrackedParameter<bool>("SaveRootFile", false);
25  RootFileName = pset.getUntrackedParameter<std::string>("RootFileName", "RPCMonitorDigiDQM.root");
26 
27  useMuonDigis_= pset.getUntrackedParameter<bool>("UseMuon", true);
28  useRollInfo_= pset.getUntrackedParameter<bool>("UseRollInfo", false);
29  muonLabel_ = pset.getParameter<edm::InputTag>("MuonLabel");
30  muPtCut_ = pset.getUntrackedParameter<double>("MuonPtCut", 3.0);
31  muEtaCut_ = pset.getUntrackedParameter<double>("MuonEtaCut", 1.9);
32 
33  subsystemFolder_ = pset.getUntrackedParameter<std::string>("RPCFolder", "RPC");
34  globalFolder_ = pset.getUntrackedParameter<std::string>("GlobalFolder", "SummaryHistograms");
35 
36  rpcRecHitLabel_ = pset.getParameter<edm::InputTag>("RecHitLabel");
37 
38  numberOfDisks_ = pset.getUntrackedParameter<int>("NumberOfEndcapDisks", 3);
39  numberOfInnerRings_ = pset.getUntrackedParameter<int>("NumberOfInnermostEndcapRings", 2);
40 
41  noiseFolder_ = pset.getUntrackedParameter<std::string>("NoiseFolder", "AllHits");
42  muonFolder_ = pset.getUntrackedParameter<std::string>("MuonFolder", "Muon");
43 
44 }
45 
48 
49 void RPCMonitorDigi::beginRun(const edm::Run& r, const edm::EventSetup& iSetup){
50 
51  edm::LogInfo ("rpcmonitordigi") <<"[RPCMonitorDigi]: Begin Run " ;
52 
55 
56  //Book
60 
61 
62 
63  std::string currentFolder = subsystemFolder_ +"/"+noiseFolder_;
64  dbe->setCurrentFolder(currentFolder);
65 
66  noiseRPCEvents_= dbe->get(currentFolder +"/RPCEvents");
68  noiseRPCEvents_ = dbe->book1D("RPCEvents","RPCEvents", 1, 0.5, 1.5);
69 
70 
71  if(useMuonDigis_ ){
75 
76  currentFolder = subsystemFolder_ +"/"+muonFolder_;
77  dbe->setCurrentFolder(currentFolder);
78 
79  muonRPCEvents_= dbe->get(currentFolder +"/RPCEvents");
81  muonRPCEvents_ = dbe->book1D("RPCEvents", "RPCEvents", 1, 0.5, 1.5);
82 
83  NumberOfMuon_ = dbe->get(currentFolder+"/NumberOfMuons");
85  NumberOfMuon_ = dbe->book1D("NumberOfMuons", "Number of Muons", 11, -0.5, 10.5);
86 
87 
88  NumberOfRecHitMuon_ = dbe->get(currentFolder+"/NumberOfRPCRecHitsMuons");
90  NumberOfRecHitMuon_ = dbe->book1D("NumberOfRecHitMuons", "Number of RPC RecHits per Muon", 8, -0.5, 7.5);
91  }
92 
93 
95  iSetup.get<MuonGeometryRecord>().get(rpcGeo);
96  //loop on geometry to book all MEs
97  edm::LogInfo ("rpcmonitordigi") <<"[RPCMonitorDigi]: Booking histograms per roll. " ;
98  for (TrackingGeometry::DetContainer::const_iterator it=rpcGeo->dets().begin();it<rpcGeo->dets().end();it++){
99  if(dynamic_cast< RPCChamber* >( *it ) != 0 ){
100  RPCChamber* ch = dynamic_cast< RPCChamber* >( *it );
101  std::vector< const RPCRoll*> roles = (ch->rolls());
102  if(useRollInfo_){
103  for(std::vector<const RPCRoll*>::const_iterator r = roles.begin();r != roles.end(); ++r){
104  RPCDetId rpcId = (*r)->id();
105  //booking all histograms
106  RPCGeomServ rpcsrv(rpcId);
107  std::string nameID = rpcsrv.name();
108  if(useMuonDigis_) bookRollME(rpcId ,iSetup, muonFolder_, meMuonCollection[nameID]);
109  bookRollME(rpcId, iSetup, noiseFolder_, meNoiseCollection[nameID]);
110  }
111  }else{
112  RPCDetId rpcId = roles[0]->id(); //any roll would do - here I just take the first one
113  RPCGeomServ rpcsrv(rpcId);
114  std::string nameID = rpcsrv.chambername();
115  if(useMuonDigis_) bookRollME(rpcId,iSetup, muonFolder_, meMuonCollection[nameID]);
116  bookRollME(rpcId, iSetup, noiseFolder_, meNoiseCollection[nameID]);
117 
118  }
119  }
120  }//end loop on geometry to book all MEs
121 
122 
123  //Clear flags;
124  dcs_ = true;
125 }
126 
129  dbe = 0;
130 }
131 
133 
134 
136  dcs_ = true;
137  //Check HV status
138  this->makeDcsInfo(event);
139  if( !dcs_){
140  edm::LogWarning ("rpcmonitordigi") <<"[RPCMonitorDigi]: DCS bit OFF" ;
141  return;//if RPC not ON there's no need to continue
142  }
143 
144  counter++;
145  edm::LogInfo ("rpcmonitordigi") <<"[RPCMonitorDigi]: Beginning analyzing event " << counter;
146 
147  //Muons
149  event.getByLabel(muonLabel_, muonCands);
150  std::map<RPCDetId , std::vector<RPCRecHit> > rechitMuon;
151 
152  int numMuons = 0;
153  int numRPCRecHit = 0 ;
154 
155  if(muonCands.isValid()){
156 
157  int nStaMuons = muonCands->size();
158 
159  for( int i = 0; i < nStaMuons; i++ ) {
160 
161  const reco::Candidate & goodMuon = (*muonCands)[i];
162  const reco::Muon * muCand = dynamic_cast<const reco::Muon*>(&goodMuon);
163 
164  if(!muCand->isGlobalMuon())continue;
165  if(muCand->pt() < muPtCut_ || fabs(muCand->eta())>muEtaCut_) continue;
166  numMuons++;
167  reco::Track muTrack = (*(muCand->outerTrack()));
168  std::vector<TrackingRecHitRef > rpcTrackRecHits;
169  //loop on mu rechits
170  for ( trackingRecHit_iterator it= muTrack.recHitsBegin(); it != muTrack.recHitsEnd() ; it++) {
171  if (!(*it)->isValid ())continue;
172  int muSubDetId = (*it)->geographicalId().subdetId();
173  if(muSubDetId == MuonSubdetId::RPC) {
174  numRPCRecHit ++;
175  TrackingRecHit * tkRecHit = (*it)->clone();
176  RPCRecHit* rpcRecHit = dynamic_cast<RPCRecHit*>(tkRecHit);
177  int detId = (int)rpcRecHit->rpcId();
178  if(rechitMuon.find(detId) == rechitMuon.end() || rechitMuon[detId].size() == 0){
179  std::vector<RPCRecHit> myVect(1,*rpcRecHit );
180  rechitMuon[detId]= myVect;
181  }else {
182  rechitMuon[detId].push_back(*rpcRecHit);
183  }
184  }
185  }// end loop on mu rechits
186 
187  }
188 
189  if( NumberOfMuon_) NumberOfMuon_->Fill(numMuons);
190  if( NumberOfRecHitMuon_) NumberOfRecHitMuon_->Fill( numRPCRecHit);
191 
192  }else{
193  edm::LogError ("rpcmonitordigi") <<"[RPCMonitorDigi]: Muons - Product not valid for event" << counter;
194  }
195 
196  //RecHits
198  event.getByLabel( rpcRecHitLabel_ , rpcHits);
199  std::map<RPCDetId , std::vector<RPCRecHit> > rechitNoise;
200 
201 
202  if(rpcHits.isValid()){
203 
204  // RPC rec hits NOT associated to a muon
206  std::vector<RPCRecHit>::const_iterator muonRecHitIter;
207 
208  for (rpcRecHitIter = rpcHits->begin(); rpcRecHitIter != rpcHits->end() ; rpcRecHitIter++) {
209  RPCRecHit rpcRecHit = (*rpcRecHitIter);
210  int detId = (int)rpcRecHit.rpcId();
211  if(rechitNoise.find(detId) == rechitNoise.end() || rechitNoise[detId].size() == 0){
212  std::vector<RPCRecHit> myVect(1,rpcRecHit );
213  rechitNoise[detId]= myVect;
214  }else {
215  rechitNoise[detId].push_back(rpcRecHit);
216  }
217  }
218  }else{
219  edm::LogError ("rpcmonitordigi") <<"[RPCMonitorDigi]: RPCRecHits - Product not valid for event" << counter;
220  }
221 
222 
224  if( noiseRPCEvents_ != 0) noiseRPCEvents_->Fill(1);
225 
226  if(useMuonDigis_ ) this->performSourceOperation(rechitMuon, muonFolder_);
227  this->performSourceOperation(rechitNoise, noiseFolder_);
228 }
229 
230 
231 void RPCMonitorDigi::performSourceOperation( std::map<RPCDetId , std::vector<RPCRecHit> > & recHitMap, std::string recHittype){
232 
233  edm::LogInfo ("rpcmonitordigi") <<"[RPCMonitorDigi]: Performing DQM source operations for ";
234 
235  if(recHitMap.size()==0) return;
236 
237  std::map<std::string, std::map<std::string, MonitorElement*> > meRollCollection ;
238  std::map<std::string, MonitorElement*> meWheelDisk ;
239  std::map<std::string, MonitorElement*> meRegion ;
240  std::map<std::string, MonitorElement*> meSectorRing;
241 
242  if(recHittype == muonFolder_ ) {
243  meRollCollection = meMuonCollection;
244  meWheelDisk = wheelDiskMuonCollection;
245  meRegion = regionMuonCollection;
246  meSectorRing = sectorRingMuonCollection;
247  }else if(recHittype == noiseFolder_ ){
248  meRollCollection = meNoiseCollection;
249  meWheelDisk = wheelDiskNoiseCollection;
250  meRegion = regionNoiseCollection;
251  meSectorRing = sectorRingNoiseCollection;
252  }else{
253  edm::LogWarning("rpcmonitordigi")<<"[RPCMonitorDigi]: RecHit type not valid.";
254  return;
255  }
256 
257 
258  int totalNumberOfRecHits[3] ={ 0, 0, 0};
259  std::stringstream os;
260 
261  //Loop on Rolls
262  for ( std::map<RPCDetId , std::vector<RPCRecHit> >::const_iterator detIdIter = recHitMap.begin(); detIdIter != recHitMap.end() ; detIdIter++){
263 
264  RPCDetId detId = (*detIdIter).first;
265  // int id=detId();
266 
267  //get roll number
268  rpcdqm::utils rpcUtils;
269  int nr = rpcUtils.detId2RollNr(detId);
270 
271 
272  RPCGeomServ geoServ(detId);
273  std::string nameRoll = "";
274 
275 
276  if(useRollInfo_) nameRoll = geoServ.name();
277  else nameRoll = geoServ.chambername();
278 
279  int region=(int)detId.region();
280  int wheelOrDiskNumber;
281  std::string wheelOrDiskType;
282  int ring = 0 ;
283  int sector = detId.sector();
284  int layer = 0;
285  int totalRolls = 3;
286  int roll = detId.roll();
287  if(region == 0) {
288  wheelOrDiskType = "Wheel";
289  wheelOrDiskNumber = (int)detId.ring();
290  int station = detId.station();
291 
292  if(station == 1){
293  if(detId.layer() == 1){
294  layer = 1; //RB1in
295  totalRolls = 2;
296  }else{
297  layer = 2; //RB1out
298  totalRolls = 2;
299  }
300  if(roll == 3) roll =2; // roll=3 is Forward
301  }else if(station == 2){
302  if(detId.layer() == 1){
303  layer = 3; //RB2in
304  if( abs(wheelOrDiskNumber) ==2 && roll == 3) {
305  roll = 2; //W -2, +2 RB2in has only 2 rolls
306  totalRolls = 2;
307  }
308  }else{
309  layer = 4; //RB2out
310  if( abs(wheelOrDiskNumber) !=2 && roll == 3){
311  roll = 2;//W -1, 0, +1 RB2out has only 2 rolls
312  totalRolls = 2;
313  }
314  }
315  }else if (station == 3){
316  layer = 5; //RB3
317  totalRolls = 2;
318  if(roll == 3) roll =2;
319  }else{
320  layer = 6; //RB4
321  totalRolls = 2;
322  if(roll == 3) roll =2;
323  }
324 
325  }else {
326  wheelOrDiskType = "Disk";
327  wheelOrDiskNumber = region*(int)detId.station();
328  ring = detId.ring();
329  }
330 
331  std::vector<RPCRecHit> recHits = (*detIdIter).second;
332  int numberOfRecHits = recHits.size();
333  totalNumberOfRecHits[region + 1 ] += numberOfRecHits;
334 
335  std::set<int> bxSet ;
336  int numDigi = 0;
337 
338  std::map<std::string, MonitorElement*> meMap = meRollCollection[nameRoll];
339 
340  //Loop on recHits
341  for(std::vector<RPCRecHit>::const_iterator recHitIter = recHits.begin(); recHitIter != recHits.end(); recHitIter++){
342  RPCRecHit recHit = (*recHitIter);
343 
344  int bx = recHit.BunchX();
345  bxSet.insert(bx);
346  int clusterSize = (int)recHit.clusterSize();
347  numDigi += clusterSize ;
348  int firstStrip = recHit.firstClusterStrip();
349  int lastStrip = clusterSize + firstStrip - 1;
350 
351  // ###################### Roll Level #################################
352 
353  os.str("");
354  os<<"Occupancy_"<<nameRoll;
355  if(meMap[os.str()]) {
356  for(int s=firstStrip; s<= lastStrip; s++){
357  if(useRollInfo_) { meMap[os.str()]->Fill(s);}
358  else{
359  int nstrips = meMap[os.str()]->getNbinsX()/totalRolls;
360  meMap[os.str()]->Fill(s + nstrips*(roll-1)); }
361  }
362  }
363 
364  os.str("");
365  os<<"BXDistribution_"<<nameRoll;
366  if(meMap[os.str()]) meMap[os.str()]->Fill(bx);
367 
368 
369  os.str("");
370  os<<"ClusterSize_"<<nameRoll;
371  if(meMap[os.str()]) meMap[os.str()]->Fill(clusterSize);
372 
373 
374 
375  // ###################### Sector- Ring Level #################################
376 
377 
378  os.str("");
379  os<<"Occupancy_"<<wheelOrDiskType<<"_"<<wheelOrDiskNumber<<"_Sector_"<<sector;
380  if( meSectorRing[os.str()]){
381  for(int s=firstStrip; s<= lastStrip; s++){//Loop on digis
382  meSectorRing[os.str()]->Fill(s, nr);
383  }
384  }
385 
386  // os.str("");
387 // os<<"BxDistribution_"<<wheelOrDiskType<<"_"<<wheelOrDiskNumber<<"_Sector_"<<sector;
388 // if( meSectorRing[os.str()]) meSectorRing[os.str()]->Fill(bx);
389 
390  os.str("");
391  if(geoServ.segment() > 0 && geoServ.segment() < 19 ){
392  os<<"Occupancy_"<<wheelOrDiskType<<"_"<<wheelOrDiskNumber<<"_Ring_"<<ring<<"_CH01-CH18";
393  }else if (geoServ.segment() > 18 ){
394  os<<"Occupancy_"<<wheelOrDiskType<<"_"<<wheelOrDiskNumber<<"_Ring_"<<ring<<"_CH19-CH36";
395  }
396 
397  if( meSectorRing[os.str()]){
398  for(int s=firstStrip; s<= lastStrip; s++){//Loop on digis
399  meSectorRing[os.str()]->Fill(s + 32*(detId.roll()-1), geoServ.segment());
400  }
401  }
402 
403  // os.str("");
404 // os<<"BxDistribution_"<<wheelOrDiskType<<"_"<<wheelOrDiskNumber<<"_Ring_"<<ring;
405 // if( meSectorRing[os.str()]) meSectorRing[os.str()]->Fill(bx);
406 
407 
408  // ###################### Wheel/Disk Level #########################ààà
409  if(region ==0){
410  os.str("");
411  os<<"1DOccupancy_Wheel_"<<wheelOrDiskNumber;
412  if( meWheelDisk[os.str()]) meWheelDisk[os.str()]->Fill(sector, clusterSize);
413 
414  os.str("");
415  os<<"Occupancy_Roll_vs_Sector_"<<wheelOrDiskType<<"_"<<wheelOrDiskNumber;
416  if (meWheelDisk[os.str()]) meWheelDisk[os.str()]->Fill(sector, nr, clusterSize);
417 
418  }else{
419  os.str("");
420  os<<"1DOccupancy_Ring_"<<ring;
421  if ((meWheelDisk[os.str()])){
422  if (wheelOrDiskNumber > 0 ) meWheelDisk[os.str()]->Fill(wheelOrDiskNumber +3, clusterSize);
423  else meWheelDisk[os.str()]->Fill(wheelOrDiskNumber + 4, clusterSize);
424  }
425 
426  os.str("");
427  os<<"Occupancy_Ring_vs_Segment_"<<wheelOrDiskType<<"_"<<wheelOrDiskNumber;
428  if (meWheelDisk[os.str()]) meWheelDisk[os.str()]->Fill( geoServ.segment(), (ring-1)*3-detId.roll()+1,clusterSize );
429  }
430 
431  os.str("");
432  os<<"BxDistribution_"<<wheelOrDiskType<<"_"<<wheelOrDiskNumber;
433  if(meWheelDisk[os.str()]) meWheelDisk[os.str()]->Fill(bx);
434 
435 
436  os.str("");
437  os<<"ClusterSize_"<<wheelOrDiskType<<"_"<<wheelOrDiskNumber<<"_Layer"<<layer;
438  if(meWheelDisk[os.str()]) meWheelDisk[os.str()] -> Fill(clusterSize);
439 
440 
441  os.str("");
442  os<<"ClusterSize_"<<wheelOrDiskType<<"_"<<wheelOrDiskNumber<<"_Ring"<<ring;
443  if(meWheelDisk[os.str()]) meWheelDisk[os.str()] -> Fill(clusterSize);
444 
445 
446  // ###################### Global ##################################
447 
448 
449  os.str("");
450  os<<"ClusterSize_"<<RPCMonitorDigi::regionNames_[region +1];
451  if(meRegion[os.str()]) meRegion[os.str()] -> Fill(clusterSize);
452 
453  os.str("");
454  os<<"ClusterSize_";
455  if(region == 0){
456  os<<"Layer"<<layer;
457  }else{
458  os<<"Ring"<<ring;
459  }
460  if(meRegion[os.str()]) meRegion[os.str()] -> Fill(clusterSize);
461 
462 
463  }//end loop on recHits
464 
465  os.str("");
466  os<<"BXWithData_"<<nameRoll;
467  if(meMap[os.str()]) meMap[os.str()]->Fill(bxSet.size());
468 
469  os.str("");
470  os<<"NumberOfClusters_"<<nameRoll;
471  if(meMap[os.str()]) meMap[os.str()]->Fill( numberOfRecHits);
472 
473  os.str("");
474  os<<"Multiplicity_"<<RPCMonitorDigi::regionNames_[region +1];
475  if(meRegion[os.str()]) meRegion[os.str()]->Fill(numDigi);
476 
477  os.str("");
478  if(region==0) {
479  os<<"Occupancy_for_Barrel";
480  if(meRegion[os.str()]) meRegion[os.str()]->Fill(sector, wheelOrDiskNumber, numDigi);
481  }else {
482  os<<"Occupancy_for_Endcap";
483  int xbin = wheelOrDiskNumber+3;
484  if (region==-1) xbin = wheelOrDiskNumber+4;
485  if(meRegion[os.str()]) meRegion[os.str()]->Fill(xbin,ring,numDigi);
486  }
487 
488  os.str("");
489  os<<"Multiplicity_"<<nameRoll;
490  if(meMap[os.str()]) meMap[os.str()]->Fill(numDigi);
491 
492  }//end loop on rolls
493 
494  for(int i = 0; i< 3; i++ ){
495  os.str("");
496  os<<"NumberOfClusters_"<<RPCMonitorDigi::regionNames_[i];
497  if(meRegion[os.str()]) meRegion[os.str()]->Fill( totalNumberOfRecHits[i]);
498  }
499 
500 }
501 
502 
504 
506 
507  if ( ! e.getByLabel("scalersRawToDigi", dcsStatus) ){
508  dcs_ = true;
509  return;
510  }
511 
512  if ( ! dcsStatus.isValid() )
513  {
514  edm::LogWarning("RPCDcsInfo") << "scalersRawToDigi not found" ;
515  dcs_ = true; // info not available: set to true
516  return;
517  }
518 
519  for (DcsStatusCollection::const_iterator dcsStatusItr = dcsStatus->begin();
520  dcsStatusItr != dcsStatus->end(); ++dcsStatusItr){
521 
522  if (!dcsStatusItr->ready(DcsStatus::RPC)) dcs_=false;
523  }
524 
525  return ;
526 }
527 
528 
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:107
T getUntrackedParameter(std::string const &, T const &) const
const std::string & getName(void) const
get name of ME
int i
Definition: DBlmapReader.cc:9
std::string globalFolder_
std::string muonFolder_
std::string RootFileName
MonitorElement * book1D(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1D histogram.
Definition: DQMStore.cc:717
virtual void endJob(void)
std::map< std::string, MonitorElement * > wheelDiskMuonCollection
void save(const std::string &filename, const std::string &path="", const std::string &pattern="", const std::string &rewrite="", SaveReferenceTag ref=SaveWithReference, int minStatus=dqm::qstatus::STATUS_OK, const std::string &fileupdate="RECREATE")
Definition: DQMStore.cc:2113
std::map< std::string, MonitorElement * > regionNoiseCollection
edm::InputTag muonLabel_
#define abs(x)
Definition: mlp_lapack.h:159
bool isGlobalMuon() const
Definition: Muon.h:211
std::map< std::string, std::map< std::string, MonitorElement * > > meNoiseCollection
MonitorElement * muonRPCEvents_
RPCMonitorDigi(const edm::ParameterSet &)
DQMStore * dbe
DQM store.
void makeDcsInfo(const edm::Event &)
virtual double eta() const
momentum pseudorapidity
void bookRollME(RPCDetId &, const edm::EventSetup &, const std::string &, std::map< std::string, MonitorElement * > &)
Booking of MonitoringElement for one RPCDetId (= roll)
std::string noiseFolder_
dictionary map
Definition: Association.py:196
void Fill(long long x)
std::map< std::string, MonitorElement * > wheelDiskNoiseCollection
tuple numMuons
Definition: patZpeak.py:40
int clusterSize() const
Definition: RPCRecHit.h:111
C::const_iterator const_iterator
constant access iterator type
Definition: RangeMap.h:45
static const std::string regionNames_[3]
Data Format.
RPCDetId rpcId() const
Return the rpcId.
Definition: RPCRecHit.h:99
virtual std::string name()
Definition: RPCGeomServ.cc:20
void beginRun(const edm::Run &r, const edm::EventSetup &c)
int roll() const
Definition: RPCDetId.h:124
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:76
void removeElement(const std::string &name)
Definition: DQMStore.cc:2572
const std::vector< const RPCRoll * > & rolls() const
Return the Rolls.
Definition: RPCChamber.cc:70
trackingRecHit_iterator recHitsBegin() const
Iterator to first hit on the track.
Definition: Track.h:63
MonitorElement * get(const std::string &path) const
get ME from full pathname (e.g. &quot;my/long/dir/my_histo&quot;)
Definition: DQMStore.cc:1468
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
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:356
void endLuminosityBlock(edm::LuminosityBlock const &, edm::EventSetup const &)
virtual TrackRef outerTrack() const
reference to Track reconstructed in the muon detector only
Definition: Muon.h:52
MonitorElement * NumberOfRecHitMuon_
virtual TrackingRecHit * clone() const =0
void bookWheelDiskME(const std::string &, std::map< std::string, MonitorElement * > &)
Booking of MonitoringElemnt at Wheel/Disk level.
int layer() const
Definition: RPCDetId.h:112
virtual int segment()
Definition: RPCGeomServ.cc:467
int detId2RollNr(const RPCDetId &_id)
Definition: utils.h:18
virtual double pt() const
transverse momentum
const T & get() const
Definition: EventSetup.h:55
int sector() const
Sector id: the group of chambers at same phi (and increasing r)
Definition: RPCDetId.h:106
edm::InputTag rpcRecHitLabel_
void performSourceOperation(std::map< RPCDetId, std::vector< RPCRecHit > > &, std::string)
static const int RPC
Definition: MuonSubdetId.h:16
virtual void beginJob()
int BunchX() const
Definition: RPCRecHit.h:103
MonitorElement * noiseRPCEvents_
std::map< std::string, MonitorElement * > sectorRingMuonCollection
std::map< std::string, std::map< std::string, MonitorElement * > > meMuonCollection
void bookSectorRingME(const std::string &, std::map< std::string, MonitorElement * > &)
Booking of MonitoringElement at Sector/Ring level.
void bookRegionME(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_
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:429
Definition: Run.h:33
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:67
int station() const
Definition: RPCDetId.h:100