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