CMS 3D CMS Logo

CTPPSPixelDQMSource.cc
Go to the documentation of this file.
1 /******************************************
2 *
3 * This is a part of CTPPSDQM software.
4 * Authors:
5 * F.Ferro INFN Genova
6 * Vladimir Popov (vladimir.popov@cern.ch)
7 *
8 *******************************************/
9 
16 
20 
22 
27 
28 #include <string>
29 
30 //-----------------------------------------------------------------------------
31 
32 class CTPPSPixelDQMSource: public DQMEDAnalyzer
33 {
34  public:
36  ~CTPPSPixelDQMSource() override;
37 
38  protected:
39  void dqmBeginRun(edm::Run const &, edm::EventSetup const &) override;
40  void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override;
41  void analyze(edm::Event const& e, edm::EventSetup const& eSetup) override;
42  void endRun(edm::Run const& run, edm::EventSetup const& eSetup) override;
43 
44  private:
45  unsigned int verbosity;
46  long int nEvents = 0;
49 
50  static constexpr int NArms=2;
51  static constexpr int NStationMAX=3; // in an arm
52  static constexpr int NRPotsMAX=6; // per station
53  static constexpr int NplaneMAX=6; // per RPot
54  static constexpr int NROCsMAX = 6; // per plane
55  static constexpr int RPn_first = 3, RPn_last = 4;
56  const int hitMultMAX = 300; // tuned
57  const int ClusMultMAX = 10; // tuned
58 
60  int pixRowMAX = 160; // defaultDetSizeInX, CMS Y-axis
61  int pixColMAX = 156; // defaultDetSizeInY, CMS X-axis
62  int ROCSizeInX = pixRowMAX/2; // ROC row size in pixels = 80
63  int ROCSizeInY = pixColMAX/3; // ROC col size in pixels = 52
64 
66  static constexpr int NPlaneBins = NplaneMAX*NRPotBinsInStation;
67 
69 
75 
76  static constexpr int RPotsTotalNumber=NArms*NStationMAX*NRPotsMAX;
77 
91  int HitsMultROC[RPotsTotalNumber*NplaneMAX][NROCsMAX];
94 
95 
96  unsigned int rpStatusWord = 0x8000; // 220 fr_hr (stn2rp3)
97  int RPstatus[NStationMAX][NRPotsMAX]; // symmetric in both arms
98  int StationStatus[NStationMAX]; // symmetric in both arms
99  const int IndexNotValid = 0;
100 
101  int getRPindex(int arm, int station, int rp) {
102  if(arm<0 || station<0 || rp<0) return(IndexNotValid);
103  if(arm>1 || station>=NStationMAX || rp>=NRPotsMAX) return(IndexNotValid);
104  int rc = (arm*NStationMAX+station)*NRPotsMAX + rp;
105  return(rc);
106  }
107 
108  int getPlaneIndex(int arm, int station, int rp, int plane) {
109  if(plane<0 || plane>=NplaneMAX) return(IndexNotValid);
110  int rc = getRPindex(arm, station, rp);
111  if(rc == IndexNotValid) return(IndexNotValid);
112  return(rc*NplaneMAX + plane);
113  }
114 
115  int prIndex(int rp, int plane) // plane index in station
116  {return((rp - RPn_first)*NplaneMAX + plane);}
117  int getDet(int id)
118  { return (id>>DetId::kDetOffset)&0xF; }
119  int getPixPlane(int id)
120  { return ((id>>16)&0x7); }
121 // int getSubdet(int id) { return ((id>>kSubdetOffset)&0x7); }
122 
123  int multHitsMax, cluSizeMax; // for tuning
124 
125 };
126 
127 //----------------------------------------------------------------------------------
128 
129 using namespace std;
130 using namespace edm;
131 
132 //-------------------------------------------------------------------------------
133 
135  verbosity(ps.getUntrackedParameter<unsigned int>("verbosity", 0)),
136  rpStatusWord(ps.getUntrackedParameter<unsigned int>("RPStatusWord",0x8000))
137 {
138  tokenDigi = consumes<DetSetVector<CTPPSPixelDigi> >(ps.getParameter<edm::InputTag>("tagRPixDigi"));
139  tokenCluster=consumes<DetSetVector<CTPPSPixelCluster>>(ps.getParameter<edm::InputTag>("tagRPixCluster"));
140 
141 }
142 
143 //----------------------------------------------------------------------------------
144 
146 {
147 }
148 
149 //--------------------------------------------------------------------------
150 
152 {
153  if(verbosity) LogPrint("CTPPSPixelDQMSource") <<"RPstatusWord= "<<rpStatusWord;
154  nEvents = 0;
155 
158  ROCSizeInX = pixRowMAX/2; // ROC row size in pixels = 80
159  ROCSizeInY = pixColMAX/3;
160 
161  unsigned int rpSts = rpStatusWord<<1;
162  for(int stn=0; stn<3; stn++) {
163  int stns = 0;
164  for(int rp=0; rp<NRPotsMAX; rp++) {
165  rpSts = (rpSts >> 1); RPstatus[stn][rp] = rpSts&1;
166  if(RPstatus[stn][rp] > 0) stns = 1;
167  }
168  StationStatus[stn]=stns;
169  }
170 
171  for(int ind=0; ind<2*3*NRPotsMAX; ind++) RPindexValid[ind] = 0;
172 
173  multHitsMax = cluSizeMax = -1;
174 }
175 
176 //-------------------------------------------------------------------------------------
177 
179 edm::EventSetup const &)
180 {
181  ibooker.cd();
182  ibooker.setCurrentFolder("CTPPS/TrackingPixel");
183  char s[50];
184  hBX = ibooker.book1D("events per BX", "ctpps_pixel;Event.BX", 4002, -1.5, 4000. +0.5);
185  hBXshort = ibooker.book1D("events per BX(short)", "ctpps_pixel;Event.BX", 102, -1.5, 100. + 0.5);
186 
187  for(int arm=0; arm<2; arm++) {
189  string sd, armTitle;
190  ID.armName(sd, CTPPSDetId::nPath);
191  ID.armName(armTitle, CTPPSDetId::nFull);
192 
193  ibooker.setCurrentFolder(sd);
194 
195  for(int stn=2; stn<NStationMAX; stn++) {
196  if(StationStatus[stn]==0) continue;
197  ID.setStation(stn);
198  string stnd, stnTitle;
199 
200  CTPPSDetId(ID.getStationId()).stationName(stnd, CTPPSDetId::nPath);
201  CTPPSDetId(ID.getStationId()).stationName(stnTitle, CTPPSDetId::nFull);
202 
203  ibooker.setCurrentFolder(stnd);
204 
205  string st = "planes activity";
206  string st2 = ": " + stnTitle;
207 
208  h2PlaneActive[arm][stn] = ibooker.book2DD(st,st+st2+";Plane #",
210  TH2D *h = h2PlaneActive[arm][stn]->getTH2D();
211  h->SetOption("colz");
212  TAxis *yah = h->GetYaxis();
213 
214  st = "hit average multiplicity in planes";
215  int PlaneMultCut = 20;
216  hp2HitsOcc[arm][stn]= ibooker.bookProfile2D(st,st+st2+";Plane #",
217  NplaneMAX, 0, NplaneMAX, NRPotBinsInStation, RPn_first,RPn_last,-1,PlaneMultCut,"");
218  TProfile2D *h2 = hp2HitsOcc[arm][stn]->getTProfile2D();
219  h2->SetOption("textcolz");
220  TAxis *yah2 = h2->GetYaxis();
221 
222  st = "hit multiplicity in planes";
223  string st3 = ";PlaneIndex(=pixelPot*PlaneMAX + plane)";
224  h2HitsMultipl[arm][stn]= ibooker.book2DD(st,st+st2+st3+";multiplicity",
226  h2HitsMultipl[arm][stn]->getTH2D()->SetOption("colz");
227 
228  st = "cluster multiplicity in planes";
229  h2ClusMultipl[arm][stn] = ibooker.book2DD(st,st+st2+st3+";multiplicity",
231  h2ClusMultipl[arm][stn]->getTH2D()->SetOption("colz");
232 
233  st = "cluster span in planes";
234  const int nyClus = 9; //18;
235  float xCh[NPlaneBins+1];
236  float yClus[nyClus+1];
237  for(int i=0; i<=NPlaneBins; i++) xCh[i]=i;
238  double n0 = 1; //1./CluSizeMAX;
239  double lnA = log(2.);
240  yClus[0] = n0; //yClus[1] = n0;
241  for(int j=0; j<nyClus; j++) yClus[j+1] = n0*exp(j*lnA);
242 
243  h2CluSize[arm][stn] = ibooker.book2D(st,st+st2+st3+";Cluster size",
244  NPlaneBins,xCh,nyClus,yClus);
245  h2CluSize[arm][stn]->getTH2F()->SetOption("colz");
246 
247 //--------- RPots ---
248  int pixBinW = 4;
249  for(int rp=RPn_first; rp<RPn_last; rp++) { // only installed pixel pots
250  ID.setRP(rp);
251  string rpd, rpTitle;
252  CTPPSDetId(ID.getRPId()).rpName(rpTitle, CTPPSDetId::nShort);
253  yah->SetBinLabel(rp - RPn_first +1, rpTitle.c_str()); // h
254  yah2->SetBinLabel(rp - RPn_first +1, rpTitle.c_str()); //h2
255 
256  if(RPstatus[stn][rp]==0) continue;
257  int indexP = getRPindex(arm,stn,rp);
258  RPindexValid[indexP] = 1;
259 
260  CTPPSDetId(ID.getRPId()).rpName(rpTitle, CTPPSDetId::nFull);
261  CTPPSDetId(ID.getRPId()).rpName(rpd, CTPPSDetId::nPath);
262 
263  ibooker.setCurrentFolder(rpd);
264 
265  hRPotActivPlanes[indexP] =
266  ibooker.bookProfile("number of fired planes per event", rpTitle+";nPlanes;Probability",
267  NplaneMAX+1, -0.5, NplaneMAX+0.5, -0.5,NplaneMAX+0.5,"");
268  hRPotActivBX[indexP] =
269  ibooker.book1D("5 fired planes per BX", rpTitle+";Event.BX", 4002, -1.5, 4000.+0.5);
270 
271  h2HitsMultROC[indexP] = ibooker.bookProfile2D("ROCs hits multiplicity per event",
272  rpTitle+";plane # ;ROC #", NplaneMAX,-0.5,NplaneMAX-0.5, NROCsMAX,-0.5,NROCsMAX-0.5,
273  0.,ROCSizeInX*ROCSizeInY,"");
274  h2HitsMultROC[indexP]->getTProfile2D()->SetOption("colztext");
275  h2HitsMultROC[indexP]->getTProfile2D()->SetMinimum(1.e-10);
276 
277 
278  hp2HitsMultROC_LS[indexP]=ibooker.bookProfile2D("ROCs_hits_multiplicity_per_event vs LS",
279  rpTitle+";LumiSection;Plane#___ROC#", 1000,0.,1000.,
280  NplaneMAX*NROCsMAX,0.,double(NplaneMAX*NROCsMAX),0.,ROCSizeInX*ROCSizeInY,"");
281  hp2HitsMultROC_LS[indexP]->getTProfile2D()->SetOption("colz");
282  hp2HitsMultROC_LS[indexP]->getTProfile2D()->SetMinimum(1.0e-10);
283  hp2HitsMultROC_LS[indexP]->getTProfile2D()->SetCanExtend(TProfile2D::kXaxis);
284  TAxis *yahp2 = hp2HitsMultROC_LS[indexP]->getTProfile2D()->GetYaxis();
285  for(int p=0; p<NplaneMAX; p++) {
286  sprintf(s,"plane%d_0",p);
287  yahp2->SetBinLabel(p*NplaneMAX+1,s);
288  for(int r=1; r<NROCsMAX; r++) {
289  sprintf(s," %d_%d",p,r);
290  yahp2->SetBinLabel(p*NplaneMAX+r+1,s);
291  }
292  }
293 
294  hRPotActivROCs[indexP] = ibooker.bookProfile2D("number of fired aligned_ROCs per event",
295  rpTitle+";ROC ID;number of fired aligned ROCs", NROCsMAX,-0.5,NROCsMAX-0.5,
296  7,-0.5,6.5, 0,NROCsMAX,"");
297  hRPotActivROCs[indexP]->getTProfile2D()->SetOption("colz");
298 
299  ibooker.setCurrentFolder(rpd+"/latency");
300 
301  hRPotActivBXroc[indexP] =
302  ibooker.book1D("4 fired ROCs per BX", rpTitle+";Event.BX", 4002, -1.5, 4000.+0.5);
303 
304  hRPotActivBXall[indexP] =
305  ibooker.book1D("hits per BX", rpTitle+";Event.BX", 4002, -1.5, 4000.+0.5);
306 
307  int nbins = pixRowMAX/pixBinW;
308 
309  for(int p=0; p<NplaneMAX; p++) {
310  sprintf(s,"plane_%d",p);
311  string pd = rpd+"/"+string(s);
312  ibooker.setCurrentFolder(pd);
313  string st1 = ": "+rpTitle+"_"+string(s);
314  st = "hits position";
315  h2xyHits[indexP][p]=ibooker.book2DD(st,st1+";pix col;pix row",
316  nbins,0,pixRowMAX,nbins,0,pixRowMAX);
317  h2xyHits[indexP][p]->getTH2D()->SetOption("colz");
318 
319  st = "adc average value";
320  hp2xyADC[indexP][p]=ibooker.bookProfile2D(st,st1+";pix col;pix row",
321  nbins,0,pixRowMAX,nbins,0,pixRowMAX, 0.,512.,"");
322  hp2xyADC[indexP][p]->getTProfile2D()->SetOption("colz");
323 
324  st = "hits multiplicity";
325  hHitsMult[indexP][p]=ibooker.book1DD(st,st1+";number of hits;N / 1 hit",
326  hitMultMAX,-0.5,hitMultMAX-0.5);
327 
328  ibooker.setCurrentFolder(pd + "/ROCs");
329  int index = getPlaneIndex(arm,stn,rp,p);
330 
331  for(int roc=0; roc<NROCsMAX; roc++) {
332  sprintf(s,"ROC_%d",roc);
333  string st2 = st1 + "_" + string(s);
334  ibooker.setCurrentFolder(pd + "/ROCs/" + string(s));
335 
336  h2xyROCHits[index][roc]=ibooker.book2DD("hits",st2+";pix col;pix row",
337  ROCSizeInY,0,ROCSizeInY, ROCSizeInX,0,ROCSizeInX);
338  h2xyROCHits[index][roc]->getTH2D()->SetOption("colz");
339 
340  string st = "adc average value";
341  h2xyROCadc[index][roc]=ibooker.bookProfile2D(st,st2+";pix col;pix row",
342  ROCSizeInY,0,ROCSizeInY,ROCSizeInX,0,ROCSizeInX, 0.,512.,"");
343  h2xyROCadc[index][roc]->getTProfile2D()->SetOption("colz");
344  }
345  } // end of for(int p=0; p<NplaneMAX;..
346 
347  } // end for(int rp=0; rp<NRPotsMAX;...
348  } // end of for(int stn=0; stn<
349  } //end of for(int arm=0; arm<2;...
350 
351  return;
352 }
353 
354 //-------------------------------------------------------------------------------
355 
357 {
358  ++nEvents;
359  int lumiId = event.getLuminosityBlock().id().luminosityBlock();
360  if(lumiId<0) lumiId=0;
361 
362  int RPactivity[NArms][NRPotsMAX], digiSize[NArms][NRPotsMAX];
363  for(int arm = 0; arm <2; arm++) {
364  for(int rp=0; rp<NRPotsMAX; rp++) {
365  RPactivity[arm][rp] = digiSize[arm][rp] = 0;
366  }
367  }
368  for(int ind=0; ind<2*3*NRPotsMAX; ind++) {
369  for(int p=0; p<NplaneMAX; p++) {
370  HitsMultPlane[ind][p] = 0;
371  ClusMultPlane[ind][p] = 0;
372  }
373  }
374  for(int ind=0; ind<2*3*NRPotsMAX*NplaneMAX; ind++) {
375  for(int rp=0; rp<NROCsMAX; rp++) {
376  HitsMultROC[ind][rp] = 0;
377  }
378  }
380  event.getByToken(tokenDigi, pixDigi);
381 
383  event.getByToken(tokenCluster, pixClus);
384 
385  hBX->Fill(event.bunchCrossing());
386  hBXshort->Fill(event.bunchCrossing());
387 
388  bool valid = false;
389  valid |= pixDigi.isValid();
390 // valid |= Clus.isValid();
391 
392  if(!valid && verbosity) LogPrint("CTPPSPixelDQMSource") <<"No valid data in Event "<<nEvents;
393 
394  if(pixDigi.isValid()) {
395  for(const auto &ds_digi : *pixDigi)
396  {
397  int idet = getDet(ds_digi.id);
398  if(idet != DetId::VeryForward) {
399  if(verbosity>1) LogPrint("CTPPSPixelDQMSource") <<"not CTPPS: ds_digi.id"<<ds_digi.id;
400  continue;
401  }
402  // int subdet = getSubdet(ds_digi.id);
403 
404  int plane = getPixPlane(ds_digi.id);
405 
406  CTPPSDetId theId(ds_digi.id);
407  int arm = theId.arm()&0x1;
408  int station = theId.station()&0x3;
409  int rpot = theId.rp()&0x7;
410  RPactivity[arm][rpot] = 1;
411  ++digiSize[arm][rpot];
412 
413  if(StationStatus[station] && RPstatus[station][rpot]) {
414 
415  hp2HitsOcc[arm][station]->Fill(plane,rpot,(int)ds_digi.data.size());
416  h2HitsMultipl[arm][station]->Fill(prIndex(rpot,plane),ds_digi.data.size());
417  h2PlaneActive[arm][station]->Fill(plane,rpot);
418 
419  int index = getRPindex(arm,station,rpot);
420  HitsMultPlane[index][plane] += ds_digi.data.size();
421  if(RPindexValid[index]) {
422  hHitsMult[index][plane]->Fill(ds_digi.data.size());
423  }
424  int rocHistIndex = getPlaneIndex(arm,station,rpot,plane);
425 
426  for(DetSet<CTPPSPixelDigi>::const_iterator dit = ds_digi.begin();
427  dit != ds_digi.end(); ++dit) {
428  int row = dit->row();
429  int col = dit->column();
430  int adc = dit->adc();
431 
432  if(RPindexValid[index]) {
433  h2xyHits[index][plane]->Fill(col,row);
434  hp2xyADC[index][plane]->Fill(col,row,adc);
435  int colROC, rowROC;
436  int trocId;
437  if(!thePixIndices.transformToROC(col,row, trocId, colROC, rowROC)) {
438  if(trocId>=0 && trocId<NROCsMAX) {
439  h2xyROCHits[rocHistIndex][trocId]->Fill(colROC,rowROC);
440  h2xyROCadc[rocHistIndex][trocId]->Fill(colROC,rowROC,adc);
441  ++HitsMultROC[rocHistIndex][trocId];
442  }
443  }
444  } //end if(RPindexValid[index]) {
445  }
446  if(int(ds_digi.data.size()) > multHitsMax) multHitsMax = ds_digi.data.size();
447 
448  } // end if(StationStatus[station]) {
449  } // end for(const auto &ds_digi : *pixDigi)
450  } //if(pixDigi.isValid()) {
451 
452  if(pixClus.isValid())
453  for(const auto &ds : *pixClus)
454  {
455  int idet = getDet(ds.id);
456  if(idet != DetId::VeryForward) {
457  if(verbosity>1) LogPrint("CTPPSPixelDQMSource") <<"not CTPPS: cluster.id"<<ds.id;
458  continue;
459  }
460  // int subdet = getSubdet(ds.id);
461 
462  int plane = getPixPlane(ds.id);
463 
464  CTPPSDetId theId(ds.id);
465  int arm = theId.arm()&0x1;
466  int station = theId.station()&0x3;
467  int rpot = theId.rp()&0x7;
468 
469  int index = getRPindex(arm,station,rpot);
470  ++ClusMultPlane[index][plane];
471 
472  unsigned int minRow=pixRowMAX, maxRow=0;
473  unsigned int minCol=pixColMAX, maxCol=0;
474  for (const auto &p : ds) {
475  unsigned int max= p.minPixelRow() + p.rowSpan()+1;
476  if(minRow > p.minPixelRow()) minRow = p.minPixelRow();
477  if(maxRow < max) maxRow = max;
478  max= p.minPixelCol() + p.colSpan()+1;
479  if(minCol > p.minPixelCol()) minCol = p.minPixelCol();
480  if(maxCol < max) maxCol = max;
481 
482  }
483  int drow = maxRow - minRow;
484  int dcol = maxCol - minCol;
485  float clusize= sqrt(drow*drow + dcol*dcol);
486  if(cluSizeMax < int(clusize)) cluSizeMax = clusize;
487  h2CluSize[arm][station]->Fill(prIndex(rpot,plane),clusize);
488 
489  } // end if(pixClus.isValid()) for(const auto &ds : *pixClus)
490 
491  for(int arm=0; arm<2; arm++) {
492  for(int stn=0; stn<NStationMAX; stn++) {
493  for(int rp=0; rp<NRPotsMAX; rp++) {
494  int index = getRPindex(arm,stn,rp);
495  if(RPindexValid[index]==0) continue;
496  if(RPactivity[arm][rp]==0) continue;
497 
498  for(int p=0; p<NplaneMAX; p++)
499  h2ClusMultipl[arm][stn]->Fill(prIndex(rp,p),ClusMultPlane[index][p]);
500 
501  int np = 0;
502  for(int p=0; p<NplaneMAX; p++) if(HitsMultPlane[index][p]>0) np++;
503  for(int p=0; p<=NplaneMAX; p++) {
504  if(p == np) hRPotActivPlanes[index]->Fill(p,1.);
505  else hRPotActivPlanes[index]->Fill(p,0.);
506  }
507  if(np>5) hRPotActivBX[index]->Fill(event.bunchCrossing());
508  hRPotActivBXall[index]->Fill(event.bunchCrossing(),float(digiSize[arm][rp]));
509 
510  int rocf[NplaneMAX];
511  for(int r=0; r<NROCsMAX; r++) rocf[r]=0;
512  for(int p=0; p<NplaneMAX; p++) {
513  int indp = getPlaneIndex(arm,stn,rp,p);
514  for(int r=0; r<NROCsMAX; r++) if(HitsMultROC[indp][r] > 0) ++rocf[r];
515  for(int r=0; r<NROCsMAX; r++) {
516  h2HitsMultROC[index]->Fill(p,r,HitsMultROC[indp][r]);
517  hp2HitsMultROC_LS[index]->Fill(lumiId,p*NROCsMAX+r,HitsMultROC[indp][r]);
518  }
519  }
520  int max = 0;
521  for(int r=0; r<NROCsMAX; r++)
522  if(max < rocf[r]) { max = rocf[r]; }
523 
524  for(int r=0; r<NROCsMAX; r++) {
525  for(int p=0; p<=NplaneMAX; p++)
526  if(p==rocf[r]) hRPotActivROCs[index]->Fill(r,rocf[r],1.);
527  else hRPotActivROCs[index]->Fill(r,p,0);
528  }
529 
530  if(max > 4) hRPotActivBXroc[index]->Fill(event.bunchCrossing());
531  } //end for(int rp=0; rp<NRPotsMAX; rp++) {
532  }
533  } //end for(int arm=0; arm<2; arm++) {
534 
535  if((nEvents % 100)) return;
536  if(verbosity) LogPrint("CTPPSPixelDQMSource")<<"analyze event "<<nEvents;
537 }
538 
539 //-----------------------------------------------------------------------------
541 {
542  if(!verbosity) return;
543  LogPrint("CTPPSPixelDQMSource")
544  <<"end of Run "<<run.run()<<": "<<nEvents<<" events\n"
545  <<"multHitsMax= "<<multHitsMax <<" cluSizeMax= "<<cluSizeMax;
546 }
547 
548 //---------------------------------------------------------------------------
550 
int adc(sample_type sample)
get the ADC sample (12 bits)
uint32_t station() const
Definition: CTPPSDetId.h:63
T getParameter(std::string const &) const
MonitorElement * hHitsMult[RPotsTotalNumber][NplaneMAX]
int HitsMultPlane[RPotsTotalNumber][NplaneMAX]
MonitorElement * hp2xyADC[RPotsTotalNumber][NplaneMAX]
MonitorElement * hp2HitsMultROC_LS[RPotsTotalNumber]
MonitorElement * h2CluSize[NArms][NStationMAX]
RunNumber_t run() const
Definition: RunBase.h:40
edm::EDGetTokenT< edm::DetSetVector< CTPPSPixelDigi > > tokenDigi
void dqmBeginRun(edm::Run const &, edm::EventSetup const &) override
TProfile2D * getTProfile2D(void) const
MonitorElement * bookProfile(Args &&...args)
Definition: DQMStore.h:157
MonitorElement * hp2HitsOcc[NArms][NStationMAX]
void cd(void)
Definition: DQMStore.cc:269
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
MonitorElement * h2HitsMultROC[RPotsTotalNumber]
uint32_t ID
Definition: Definitions.h:26
void setRP(uint32_t rp)
Definition: CTPPSDetId.h:79
int bunchCrossing() const
Definition: EventBase.h:66
int getDefaultRowDetSize() const
TH2D * getTH2D(void) const
CTPPSDetId getStationId() const
Definition: CTPPSDetId.h:92
CTPPSPixelIndices thePixIndices
#define constexpr
edm::EDGetTokenT< edm::DetSetVector< CTPPSPixelCluster > > tokenCluster
void Fill(long long x)
void analyze(edm::Event const &e, edm::EventSetup const &eSetup) override
void endRun(edm::Run const &run, edm::EventSetup const &eSetup) override
int prIndex(int rp, int plane)
int RPindexValid[RPotsTotalNumber]
int RPstatus[NStationMAX][NRPotsMAX]
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
int np
Definition: AMPTWrapper.h:33
MonitorElement * h2ClusMultipl[NArms][NStationMAX]
int n0
Definition: AMPTWrapper.h:34
CTPPSPixelDQMSource(const edm::ParameterSet &ps)
MonitorElement * bookProfile2D(Args &&...args)
Definition: DQMStore.h:163
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
T sqrt(T t)
Definition: SSEVec.h:18
MonitorElement * hRPotActivBX[RPotsTotalNumber]
int getDefaultColDetSize() const
MonitorElement * h2xyROCadc[RPotsTotalNumber *NplaneMAX][NROCsMAX]
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:115
CTPPSDetId getRPId() const
Definition: CTPPSDetId.h:97
uint32_t arm() const
Definition: CTPPSDetId.h:52
bool isValid() const
Definition: HandleBase.h:74
void armName(std::string &name, NameFlag flag=nFull) const
Definition: CTPPSDetId.h:115
int getRPindex(int arm, int station, int rp)
MonitorElement * hRPotActivBXroc[RPotsTotalNumber]
MonitorElement * h2PlaneActive[NArms][NStationMAX]
iterator begin()
Definition: DetSet.h:59
MonitorElement * h2xyROCHits[RPotsTotalNumber *NplaneMAX][NROCsMAX]
void setStation(uint32_t station)
Definition: CTPPSDetId.h:68
int ClusMultPlane[RPotsTotalNumber][NplaneMAX]
MonitorElement * hRPotActivBXall[RPotsTotalNumber]
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:277
MonitorElement * book2D(Args &&...args)
Definition: DQMStore.h:133
double sd
Base class for CTPPS detector IDs.
Definition: CTPPSDetId.h:32
int transformToROC(const int col, const int row, int &rocId, int &colROC, int &rowROC) const
HLT enums.
static const int kDetOffset
Definition: DetId.h:20
MonitorElement * hRPotActivROCs[RPotsTotalNumber]
col
Definition: cuy.py:1008
MonitorElement * book2DD(Args &&...args)
Definition: DQMStore.h:145
int StationStatus[NStationMAX]
int HitsMultROC[RPotsTotalNumber *NplaneMAX][NROCsMAX]
TH2F * getTH2F(void) const
int getPlaneIndex(int arm, int station, int rp, int plane)
MonitorElement * h2xyHits[RPotsTotalNumber][NplaneMAX]
MonitorElement * hRPotActivPlanes[RPotsTotalNumber]
MonitorElement * book1DD(Args &&...args)
Definition: DQMStore.h:127
MonitorElement * hBXshort
MonitorElement * h2HitsMultipl[NArms][NStationMAX]
Definition: event.py:1
Definition: Run.h:43
uint32_t rp() const
Definition: CTPPSDetId.h:74