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  /***********************************************
2  * implementation of RPCMonitorDigi class *
3  ***********************************************/
4 #include <TRandom.h>
5 #include <string>
6 #include <sstream>
23 
25 
26  nameInLog = pset.getUntrackedParameter<std::string>("moduleLogName", "rpcmonitordigi");
27 
28  saveRootFile = pset.getUntrackedParameter<bool>("DigiDQMSaveRootFile", false);
29  mergeRuns_ = pset.getUntrackedParameter<bool>("MergeDifferentRuns", false);
30  // saveRootFileEventsInterval = pset.getUntrackedParameter<int>("DigiEventsInterval", 10000);
31  RootFileName = pset.getUntrackedParameter<std::string>("RootFileNameDigi", "RPCMonitor.root");
32 
33  globalFolder_ = pset.getUntrackedParameter<std::string>("RPCGlobalFolder", "RPC/RecHits/SummaryHistograms");
34  muonNoise_ = pset.getUntrackedParameter<std::string>("DataType", "Noise");
35 
36  dqmshifter = pset.getUntrackedParameter<bool>("dqmshifter", false);
37  dqmexpert = pset.getUntrackedParameter<bool>("dqmexpert", false);
38  dqmsuperexpert = pset.getUntrackedParameter<bool>("dqmsuperexpert", false);
39 
40  RPCRecHitLabel_ = pset.getParameter<edm::InputTag>("RecHitLabel");
41  RPCDigiLabel_ =pset.getParameter<edm::InputTag>("DigiLabel");
42 }
43 
45 
46 
48  edm::LogInfo (nameInLog) <<"[RPCMonitorDigi]: Begin job" ;
49 
52 
54 
55  ClusterSize_for_Barrel = dbe->book1D("ClusterSize_for_Barrel", "ClusterSize for Barrel", 20, 0.5, 20.5);
56  ClusterSize_for_EndcapPositive = dbe->book1D("ClusterSize_for_EndcapPositive", "ClusterSize for PositiveEndcap", 20, 0.5, 20.5);
57  ClusterSize_for_EndcapNegative = dbe->book1D("ClusterSize_for_EndcapNegative", "ClusterSize for NegativeEndcap", 20, 0.5, 20.5);
58 
59  ClusterSize_for_BarrelandEndcaps = dbe->book1D("ClusterSize_for_BarrelandEndcap", "ClusterSize for Barrel&Endcaps", 20, 0.5, 20.5);
60 
61  NumberOfClusters_for_Barrel = dbe -> book1D("NumberOfClusters_for_Barrel", "NumberOfClusters for Barrel", 20, 0.5, 20.5);
62  NumberOfClusters_for_EndcapPositive = dbe -> book1D("NumberOfClusters_for_EndcapPositive", "NumberOfClusters for Endcap Positive", 20, 0.5, 20.5);
63  NumberOfClusters_for_EndcapNegative = dbe -> book1D("NumberOfClusters_for_EndcapNegative", "NumberOfClusters for Endcap Negative", 20, 0.5, 20.5);
64 
65  NumberOfDigis_for_Barrel = dbe -> book1D("NumberOfDigi_for_Barrel", "Number Of Digis in Barrel", 50, 0.5, 50.5);
66  NumberOfDigis_for_EndcapPositive = dbe -> book1D("NumberOfDigi_for_EndcapPositive", "Number Of Digis in EndCapPositive", 50, 0.5, 50.5);
67  NumberOfDigis_for_EndcapNegative= dbe -> book1D("NumberOfDigi_for_EndcapNegative", "Number Of Digis in EndCapNegative", 50, 0.5, 50.5);
68 
69  SameBxDigisMeBarrel_ = dbe->book1D("SameBXDigis_Barrel", "Digis with same bx", 20, 0.5, 20.5);
70  SameBxDigisMeEndcapPositive_ = dbe->book1D("SameBXDigis_EndcapPositive", "Digis with same bx", 20, 0.5, 20.5);
71  SameBxDigisMeEndcapNegative_ = dbe->book1D("SameBXDigis_EndcapNegative", "Digis with same bx", 20, 0.5, 20.5);
72 
73  BarrelOccupancy = dbe -> book2D("Occupancy_for_Barrel", "Barrel Occupancy Wheel vs Sector", 12, 0.5, 12.5, 5, -2.5, 2.5);
74  EndcapPositiveOccupancy = dbe -> book2D("Occupancy_for_EndcapPositive", "Endcap Positive Occupancy Disk vs Sector", 6, 0.5, 6.5, 4, 0.5, 4.5);
75  EndcapNegativeOccupancy = dbe -> book2D("Occupancy_for_EndcapNegative", "Endcap Negative Occupancy Disk vs Sector", 6, 0.5, 6.5, 4, 0.5, 4.5);
76 
78  RPCEvents = dbe -> book1D("RPCEvents", "RPC Events Barrel+EndCap", 1, 0.5, 1.5);
79 
80  std::stringstream binLabel;
81  for (int i = 1; i<13; i++){
82  binLabel.str("");
83  binLabel<<"Sec"<<i;
84  BarrelOccupancy -> setBinLabel(i, binLabel.str(), 1);
85  if(i<6){
86  binLabel.str("");
87  binLabel<<"Wheel"<<i-3;
88  BarrelOccupancy -> setBinLabel(i, binLabel.str(), 2);
89  }
90  if(i<7) {
91  binLabel.str("");
92  binLabel<<"Sec"<<i;
93  EndcapPositiveOccupancy -> setBinLabel(i, binLabel.str(), 1);
94  EndcapNegativeOccupancy -> setBinLabel(i, binLabel.str(), 1);
95  }
96  if(i<5){
97  binLabel.str("");
98  binLabel<<"Disk+"<<i ; ;
99  EndcapPositiveOccupancy -> setBinLabel(i, binLabel.str(), 2);
100  binLabel.str("");
101  binLabel<<"Disk-"<<i ;
102  EndcapNegativeOccupancy -> setBinLabel(i, binLabel.str(), 2);
103  }
104  }
105  dcs_ = true;
106 
107 }
108 
110 
111  edm::LogInfo (nameInLog) <<"Begin Run " ;
112 
113  iSetup.get<MuonGeometryRecord>().get(rpcGeo);
114 
115  //loop on geometry to book all MEs
116  for (TrackingGeometry::DetContainer::const_iterator it=rpcGeo->dets().begin();it<rpcGeo->dets().end();it++){
117  if(dynamic_cast< RPCChamber* >( *it ) != 0 ){
118  RPCChamber* ch = dynamic_cast< RPCChamber* >( *it );
119  std::vector< const RPCRoll*> roles = (ch->rolls());
120  for(std::vector<const RPCRoll*>::const_iterator r = roles.begin();r != roles.end(); ++r){
121  RPCDetId rpcId = (*r)->id();
122  int region=rpcId.region();
123 
124  //booking all histograms
125  RPCGeomServ rpcsrv(rpcId);
126  std::string nameRoll = rpcsrv.name();
127  //std::cout<<"Booking for "<<nameRoll<<std::endl;
128  meCollection[(uint32_t)rpcId]=bookDetUnitME(rpcId,iSetup );
129 
130  int ring;
131  if(rpcId.region() == 0)
132  ring = rpcId.ring();
133  else
134  ring = rpcId.region()*rpcId.station();
135 
136  //book wheel/disk histos
137  std::pair<int,int> regionRing(region,ring);
138  std::map<std::pair<int,int>, std::map<std::string,MonitorElement*> >::iterator meRingItr = meWheelDisk.find(regionRing);
139  if (meRingItr == meWheelDisk.end() || (meWheelDisk.size()==0)) meWheelDisk[regionRing]=bookRegionRing(region,ring);
140  }
141  }
142  }//end loop on geometry to book all MEs
143 }
144 
147  dbe = 0;
148 }
149 
150 
151 
153 
154  this->makeDcsInfo(iEvent);
155  if( !dcs_) return;//if RPC not ON there's no need to continue
156 
157  counter++;
158 
159  edm::LogInfo (nameInLog) <<"[RPCMonitorDigi]: Beginning analyzing event " << counter;
160 
163  iEvent.getByLabel(RPCDigiLabel_, rpcdigis);
164 
165  //RecHits
167  iEvent.getByLabel(RPCRecHitLabel_,rpcHits);
168 
169  std::map<int,int> bxMap;
170 
171  if(rpcdigis->begin()!=rpcdigis->end()) RPCEvents -> Fill(1);
172 
173  //Loop on digi collection
174  for( RPCDigiCollection::DigiRangeIterator collectionItr=rpcdigis->begin(); collectionItr!=rpcdigis->end(); ++collectionItr){
175 
176  RPCDetId detId=(*collectionItr).first;
177  uint32_t id=detId();
178 
179  const GeomDet* gdet=rpcGeo->idToDet(detId);
180  const BoundPlane & surface = gdet->surface();
181 
182  //get roll name
183  RPCGeomServ RPCname(detId);
184  std::string nameRoll = RPCname.name();
185  //string YLabel = RPCname.shortname(); // to be removed later!!!
186  std::stringstream os;
187 
188  //get roll number
189  rpcdqm::utils prova;
190  int nr = prova.detId2RollNr(detId);
191 
192  //get MEs corresponding to present detId
193  std::map<std::string, MonitorElement*> meMap=meCollection[id];
194  if(meMap.size()==0) continue;
195 
196  int region=detId.region();
197  int ring;
198  std::string ringType;
199  if(region == 0) {
200  ringType = "Wheel";
201  ring = detId.ring();
202  }else{
203  ringType = "Disk";
204  ring = region*detId.station();
205  }
206 
207  //get wheel/disk MEs
208  std::pair<int,int> regionRing(region,ring);
209  std::map<std::string, MonitorElement*> meRingMap=meWheelDisk[regionRing];
210  if(meRingMap.size()==0) continue;
211 
212  std::vector<std::pair <int,int> > duplicatedDigi;
213  std::vector<int> bxs;
214 
215  //get the RecHits associated to the roll
216  typedef std::pair<RPCRecHitCollection::const_iterator, RPCRecHitCollection::const_iterator> rangeRecHits;
217  rangeRecHits recHitCollection = rpcHits->get(detId);
218 
219  int numberOfDigi= 0;
220 
222  //loop on digis of given roll
223  for (digiItr =(*collectionItr ).second.first;digiItr != (*collectionItr ).second.second; ++digiItr){
224  int strip= (*digiItr).strip();
225  int bx=(*digiItr).bx();
226 
227  //remove duplicated digis
228  std::vector<std::pair <int,int> >::const_iterator itrDuplDigi = find(duplicatedDigi.begin(),duplicatedDigi.end(),std::make_pair(strip, bx));
229  if(itrDuplDigi!=duplicatedDigi.end() && duplicatedDigi.size()!=0) continue;
230 
231  duplicatedDigi.push_back(std::make_pair(strip, bx));
232  ++numberOfDigi;
233 
234  //bunch crossing
235  std::vector<int>::const_iterator existingBX = find(bxs.begin(),bxs.end(),bx);
236  if(existingBX==bxs.end())bxs.push_back(bx);
237 
238  //adding new histo C.Carrillo & A. Cimmino
239  std::map<int,int>::const_iterator bxItr = bxMap.find((*digiItr).bx());
240  if (bxItr == bxMap.end()|| bxMap.size()==0 )bxMap[(*digiItr).bx()]=1;
241  else bxMap[(*digiItr).bx()]++;
242 
243  //sector based histograms for dqm shifter
244  os.str("");
245  os<<"1DOccupancy_"<<ringType<<"_"<<ring;
246  std::string meId = os.str();
247  if( meRingMap[meId]){
248  meRingMap[meId]->Fill(detId.sector());
249  // label
250  }
251 
252  os.str("");
253  os<<"BxDistribution_"<<ringType<<"_"<<ring<<"_Sector_"<<detId.sector();
254  if(meMap[os.str()])
255  meMap[os.str()]->Fill(bx);
256 
257  os.str("");
258  os<<"BxDistribution_"<<ringType<<"_"<<ring;
259  if(meRingMap[os.str()])
260  meRingMap[os.str()]->Fill(bx);
261 
262  if(detId.region()==0)
263  BarrelOccupancy -> Fill(detId.sector(), ring);
264  else if(detId.region()==1)
265  EndcapPositiveOccupancy -> Fill(detId.sector(), ring);
266  else if(detId.region()==-1)
267  EndcapNegativeOccupancy -> Fill(detId.sector(),( -1 * ring) );//for RE- ring is negative
268 
269  os.str("");
270  os<<"Occupancy_"<<ringType<<"_"<<ring<<"_Sector_"<<detId.sector();
271  if(meMap[os.str()]){
272  if(detId.region() ==0) meMap[os.str()]->Fill(strip, nr);
273  else meMap[os.str()]->Fill(strip + 32*(detId.roll()-1), RPCname.segment()+ ((detId.ring() -2)*6));
274  }
275 
276  os.str("");
277  os<<"Occupancy_"<<nameRoll;
278  if(meMap[os.str()]) meMap[os.str()]->Fill(strip);
279 
280  os.str("");
281  os<<"Occupancy_Roll_vs_Sector_"<<ringType<<"_"<<ring;
282  if (meRingMap[os.str()]) {
283  meRingMap[os.str()]->Fill(detId.sector(), nr, 1);
284  }
285 
286  os.str("");
287  os<<"Occupancy_Ring_vs_Segment_"<<ringType<<"_"<<ring;
288  if (meRingMap[os.str()]) {
289  meRingMap[os.str()]->Fill( RPCname.segment(), (detId.ring()-1)*3-detId.roll()+1, 1);
290  }
291 
292  if(dqmexpert){
293  os.str("");
294  os<<"BXN_"<<nameRoll;
295  if(meMap[os.str()]) meMap[os.str()]->Fill(bx);
296  }
297 
298  if (dqmsuperexpert) {
299  os.str("");
300  os<<"BXN_vs_strip_"<<nameRoll;
301  if(meMap[os.str()]) meMap[os.str()]->Fill(strip,bx);
302  }
303  } //end loop of digis of given roll
304 
305  if (dqmexpert){
306  os.str("");
307  os<<"BXWithData_"<<nameRoll;
308  if(meMap[os.str()]) meMap[os.str()]->Fill(bxs.size());
309  }
310 
311  os.str("");
312  os<<"BXWithData_"<<ringType<<"_"<<ring<<"_Sector_"<<detId.sector();
313  if(meMap[os.str()])
314  meMap[os.str()]->Fill(bxs.size());
315 
316  if(numberOfDigi>50) numberOfDigi=50; //overflow
317 
318  os.str("");
319  os<<"Multiplicity_"<<nameRoll;
320  if(meMap[os.str()]) meMap[os.str()]->Fill(numberOfDigi);
321 
322  if(detId.region()==0) NumberOfDigis_for_Barrel -> Fill(numberOfDigi);
323  else if(detId.region()==1) NumberOfDigis_for_EndcapPositive -> Fill(numberOfDigi);
324  else if(detId.region()==-1) NumberOfDigis_for_EndcapNegative -> Fill(numberOfDigi);
325 
326  // Fill RecHit MEs
327  if(recHitCollection.first!=recHitCollection.second ){
328 
330  int numberOfHits=0;
331  int numbOfClusters=0;
332  //loop RPCRecHits for given roll
333  for (it = recHitCollection.first; it != recHitCollection.second ; it++) {
334  numbOfClusters++;
335  RPCDetId detIdRecHits=it->rpcId();
336  LocalError error=it->localPositionError();//plot of errors/roll => should be gaussian
337  LocalPoint point=it->localPosition(); //plot of coordinates/roll =>should be flat
338  GlobalPoint globalHitPoint=surface.toGlobal(point);
339 
340  int mult=it->clusterSize(); //cluster size plot => should be within 1-3
341  int firstStrip=it->firstClusterStrip(); //plot first Strip => should be flat
342 
343  ClusterSize_for_BarrelandEndcaps -> Fill(mult);
344 
345  if(detId.region() == 0) {
346  ClusterSize_for_Barrel -> Fill(mult);
347  } else if (detId.region() == -1) {
348  if(mult<=10) ClusterSize_for_EndcapNegative -> Fill(mult);
349  else ClusterSize_for_EndcapNegative -> Fill(11);
350  } else if (detId.region() == 1) {
351  if(mult<=10) ClusterSize_for_EndcapPositive -> Fill(mult);
352  else ClusterSize_for_EndcapPositive -> Fill(11);
353  }
354 
355  //Cluster Size by Wheels and sector
356  os.str("");
357  os<<"ClusterSize_"<<ringType<<"_"<<ring;
358  if(meRingMap[os.str()])
359  meRingMap[os.str()] -> Fill(mult);
360 
361  if (dqmsuperexpert) {
362  int centralStrip=firstStrip;
363  if(mult%2) {
364  centralStrip+= mult/2;
365  }else{
366  float x = gRandom->Uniform(2);
367  centralStrip+=(x<1)? (mult/2)-1 : (mult/2);
368  }
369 
370  os.str("");
371  os<<"ClusterSize_vs_Strip_"<<nameRoll;
372  if(meMap[os.str()])
373  for(int index=0; index<mult; ++index)
374  meMap[os.str()]->Fill(firstStrip+index,mult);
375  }
376 
377  if(dqmexpert) {
378  os.str("");
379  os<<"ClusterSize_"<<nameRoll;
380  if(meMap[os.str()])
381  meMap[os.str()]->Fill(mult);
382  }
383  numberOfHits++;
384  }
385 
386  if(dqmexpert) {
387  if(numberOfHits>20) numberOfHits=20;
388  os.str("");
389  os<<"NumberOfClusters_"<<nameRoll;
390  if(meMap[os.str()])
391  meMap[os.str()]->Fill(numbOfClusters);
392 
393 
394  os.str("");
395  os<<"RecHitCounter_"<<nameRoll;
396  if(meMap[os.str()])
397  meMap[os.str()]->Fill(numberOfHits);
398  }
399 
400  if(detId.region()==0)
401  NumberOfClusters_for_Barrel -> Fill(numbOfClusters);
402  else if (detId.region()==1)
403  NumberOfClusters_for_EndcapPositive -> Fill(numbOfClusters);
404  else if(detId.region()==-1)
405  NumberOfClusters_for_EndcapNegative -> Fill(numbOfClusters);
406 
407  }
408  }
409 
410  //adding new histo C.Carrillo & A. Cimmino
411  for (std::map<int, int>::const_iterator myItr= bxMap.begin();
412  myItr!=bxMap.end(); myItr++){
413  SameBxDigisMeBarrel_ ->Fill((*myItr).second);
414  }
415 }
416 
417 
419 
421 
422  if ( ! e.getByLabel("scalersRawToDigi", dcsStatus) ){
423  dcs_ = true;
424  return;
425  }
426 
427  if ( ! dcsStatus.isValid() )
428  {
429  edm::LogWarning("RPCDcsInfo") << "scalersRawToDigi not found" ;
430  dcs_ = true; // info not available: set to true
431  return;
432  }
433 
434 
435  for (DcsStatusCollection::const_iterator dcsStatusItr = dcsStatus->begin();
436  dcsStatusItr != dcsStatus->end(); ++dcsStatusItr) {
437 
438  if (!dcsStatusItr->ready(DcsStatus::RPC)) dcs_=false;
439 
440  }
441 
442  return ;
443 }
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:78
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
MonitorElement * NumberOfClusters_for_Barrel
int i
Definition: DBlmapReader.cc:9
void strip(std::string &input, const std::string &blanks=" \n\t")
Definition: stringTools.cc:16
std::string globalFolder_
std::string RootFileName
MonitorElement * book1D(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1D histogram.
Definition: DQMStore.cc:519
virtual void endJob(void)
MonitorElement * NumberOfDigis_for_EndcapNegative
edm::InputTag RPCRecHitLabel_
std::map< std::string, MonitorElement * > bookRegionRing(int region, int ring)
Booking of MonitoringElemnt at Wheel/Disk level.
MonitorElement * ClusterSize_for_EndcapNegative
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:1883
MonitorElement * SameBxDigisMeEndcapPositive_
MonitorElement * ClusterSize_for_BarrelandEndcaps
RPCMonitorDigi(const edm::ParameterSet &)
Data Format.
DQMStore * dbe
DQM store.
std::map< uint32_t, std::map< std::string, MonitorElement * > > meCollection
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:7
void makeDcsInfo(const edm::Event &)
MonitorElement * EndcapNegativeOccupancy
return((rh^lh)&mask)
void Fill(long long x)
MonitorElement * RPCEvents
MonitorElement * NumberOfDigis_for_Barrel
C::const_iterator const_iterator
constant access iterator type
Definition: RangeMap.h:45
edm::InputTag RPCDigiLabel_
int iEvent
Definition: GenABIO.cc:243
virtual std::string name()
Definition: RPCGeomServ.cc:15
void beginRun(const edm::Run &r, const edm::EventSetup &c)
int roll() const
Definition: RPCDetId.h:122
virtual void analyze(const edm::Event &, const edm::EventSetup &)
int ring() const
Definition: RPCDetId.h:74
std::string muonNoise_
const std::vector< const RPCRoll * > & rolls() const
Return the Rolls.
Definition: RPCChamber.cc:70
MonitorElement * ClusterSize_for_EndcapPositive
MonitorElement * ClusterSize_for_Barrel
MonitorElement * NumberOfClusters_for_EndcapNegative
std::map< std::pair< int, int >, std::map< std::string, MonitorElement * > > meWheelDisk
std::map< std::string, MonitorElement * > bookDetUnitME(RPCDetId &, const edm::EventSetup &)
Booking of MonitoringElemnt for one RPCDetId (= roll)
tuple pset
Definition: CrabTask.py:85
edm::ESHandle< RPCGeometry > rpcGeo
MonitorElement * NumberOfDigis_for_EndcapPositive
bool isValid() const
Definition: HandleBase.h:76
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:359
MonitorElement * SameBxDigisMeBarrel_
MonitorElement * SameBxDigisMeEndcapNegative_
MonitorElement * NumberOfClusters_for_EndcapPositive
virtual int segment()
Definition: RPCGeomServ.cc:375
MonitorElement * EndcapPositiveOccupancy
int detId2RollNr(const RPCDetId &_id)
Definition: utils.h:18
const T & get() const
Definition: EventSetup.h:55
std::vector< DigiType >::const_iterator const_iterator
int sector() const
Sector id: the group of chambers at same phi (and increasing r)
Definition: RPCDetId.h:104
virtual void beginJob()
MonitorElement * BarrelOccupancy
std::string nameInLog
virtual const BoundPlane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:237
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point
Definition: invegas.h:5
Definition: Run.h:31
int region() const
Region id: 0 for Barrel, +/-1 For +/- Endcap.
Definition: RPCDetId.h:65
int station() const
Definition: RPCDetId.h:98