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