108 if (arm < 0 || station < 0 || rp < 0)
109 return (IndexNotValid);
110 if (arm > 1 || station >= NStationMAX || rp >= NRPotsMAX)
111 return (IndexNotValid);
112 int rc = (arm * NStationMAX +
station) * NRPotsMAX + rp;
117 if (plane < 0 || plane >= NplaneMAX)
118 return (IndexNotValid);
120 if (rc == IndexNotValid)
121 return (IndexNotValid);
122 return (rc * NplaneMAX + plane);
130 return (arm * 2 + stationBinOrder[stn] + 1);
135 return ((rp - RPn_first) * NplaneMAX + plane);
153 :
verbosity(ps.getUntrackedParameter<unsigned
int>(
"verbosity", 0)),
154 rpStatusWord(ps.getUntrackedParameter<unsigned
int>(
"RPStatusWord", 0x8008)) {
189 rpSts = (rpSts >> 1);
197 for (
int ind = 0; ind < 2 * 3 *
NRPotsMAX; ind++)
209 ibooker.setCurrentFolder(
"CTPPS/TrackingPixel");
211 string armTitleShort, stnTitleShort;
212 hBX = ibooker.book1D(
"events per BX",
"ctpps_pixel;Event.BX", 4002, -1.5, 4000. + 0.5);
213 hBXshort = ibooker.book1D(
"events per BX(short)",
"ctpps_pixel;Event.BX", 102, -1.5, 100. + 0.5);
215 string str1st =
"Pixel planes activity";
219 h1st->SetOption(
"colz");
220 TAxis *yah1st = h1st->GetYaxis();
222 string str2 =
"Pixel RP active";
230 str2 =
"Pixel Local Tracks";
238 for (
int arm = 0; arm < 2; arm++) {
245 ibooker.setCurrentFolder(sd);
251 string stnd, stnTitle;
257 ibooker.setCurrentFolder(stnd);
264 string rpBinName = armTitleShort +
"_" + stnTitleShort +
"_" + rpTitle;
266 xah1trk->SetBinLabel(
getRPglobalBin(arm, stn), rpBinName.c_str());
267 xaRPact->SetBinLabel(
getRPglobalBin(arm, stn), rpBinName.c_str());
277 ibooker.setCurrentFolder(rpd);
279 string st2 =
": " + stnTitle;
281 string st =
"hit multiplicity in planes";
282 string st3 =
";PlaneIndex(=pixelPot*PlaneMAX + plane)";
287 st =
"cluster size in planes";
292 const float x0Maximum = 70.;
293 const float y0Maximum = 15.;
294 st =
"track intercept point";
296 st, st + st2 +
";x0;y0",
int(x0Maximum) * 2, 0., x0Maximum,
int(y0Maximum) * 4, -y0Maximum, y0Maximum);
299 st =
"number of tracks per event";
301 rpTitle +
";number of tracks",
310 st =
"number of hits per track";
311 htrackHits[indexP] = ibooker.bookProfile(st, rpTitle +
";number of hits", 5, 1.5, 6.5, -0.1, 1.1,
"");
314 hRPotActivPlanes[indexP] = ibooker.bookProfile(
"number of fired planes per event",
315 rpTitle +
";nPlanes;Probability",
324 h2HitsMultROC[indexP] = ibooker.bookProfile2D(
"ROCs hits multiplicity per event",
325 rpTitle +
";plane # ;ROC #",
338 hp2HitsMultROC_LS[indexP] = ibooker.bookProfile2D(
"ROCs_hits_multiplicity_per_event vs LS",
339 rpTitle +
";LumiSection;Plane#___ROC#",
354 sprintf(s,
"plane%d_0",
p);
355 yahp2->SetBinLabel(
p * NplaneMAX + 1, s);
357 sprintf(s,
" %d_%d",
p,
r);
358 yahp2->SetBinLabel(
p * NplaneMAX +
r + 1, s);
362 ibooker.setCurrentFolder(rpd +
"/latency");
363 hRPotActivBX[indexP] = ibooker.book1D(
"5 fired planes per BX", rpTitle +
";Event.BX", 4002, -1.5, 4000. + 0.5);
365 hRPotActivBXroc[indexP] = ibooker.book1D(
"4 fired ROCs per BX", rpTitle +
";Event.BX", 4002, -1.5, 4000. + 0.5);
367 hRPotActivBXall[indexP] = ibooker.book1D(
"hits per BX", rpTitle +
";Event.BX", 4002, -1.5, 4000. + 0.5);
372 sprintf(s,
"plane_%d",
p);
373 string pd = rpd +
"/" +
string(s);
374 ibooker.setCurrentFolder(pd);
375 string st1 =
": " + rpTitle +
"_" +
string(s);
377 st =
"hits position";
382 st =
"adc average value";
383 hp2xyADC[indexP][
p] = ibooker.bookProfile2D(
384 st, st1 +
";pix col;pix row", nbins, 0,
pixRowMAX, nbins, 0,
pixRowMAX, 0., 512.,
"");
387 st =
"hits multiplicity";
403 int lumiId =
event.getLuminosityBlock().id().luminosityBlock();
411 RPactivity[rp] = RPdigiSize[rp] = pixRPTracks[rp] = 0;
420 for (
int ind = 0; ind < RPotsTotalNumber *
NplaneMAX; ind++) {
438 for (
const auto &ds_tr : *pixTrack) {
439 int idet =
getDet(ds_tr.id);
442 LogPrint(
"CTPPSPixelDQMSource") <<
"not CTPPS: ds_tr.id" << ds_tr.id;
446 int arm = theId.
arm() & 0x1;
448 int rpot = theId.
rp() & 0x7;
452 ++pixRPTracks[rpInd];
460 float x0 = dit->x0();
461 float y0 = dit->y0();
480 LogPrint(
"CTPPSPixelDQMSource") <<
"No valid data in Event " <<
nEvents;
483 for (
const auto &ds_digi : *pixDigi) {
484 int idet =
getDet(ds_digi.id);
487 LogPrint(
"CTPPSPixelDQMSource") <<
"not CTPPS: ds_digi.id" << ds_digi.id;
495 int arm = theId.
arm() & 0x1;
497 int rpot = theId.
rp() & 0x7;
499 RPactivity[rpInd] = 1;
509 int nh = ds_digi.data.size();
517 int row = dit->row();
518 int col = dit->column();
519 int adc = dit->adc();
527 if (trocId >= 0 && trocId <
NROCsMAX) {
541 for (
const auto &ds : *pixClus) {
545 LogPrint(
"CTPPSPixelDQMSource") <<
"not CTPPS: cluster.id" << ds.id;
553 int arm = theId.
arm() & 0x1;
555 int rpot = theId.
rp() & 0x7;
563 for (
const auto &
p : ds) {
564 int clusize =
p.size();
573 bool allRPactivity =
false;
575 if (RPactivity[rp] > 0)
576 allRPactivity =
true;
577 for (
int arm = 0; arm < 2; arm++) {
588 int ntr = pixRPTracks[
index];
646 LogPrint(
"CTPPSPixelDQMSource") <<
"end of Run " << run.
run() <<
": " <<
nEvents <<
" events\n"
int StationStatus[StationIDMAX]
T getParameter(std::string const &) const
virtual TH2D * getTH2D() const
MonitorElement * hHitsMult[RPotsTotalNumber][NplaneMAX]
int HitsMultPlane[RPotsTotalNumber][NplaneMAX]
MonitorElement * hp2xyADC[RPotsTotalNumber][NplaneMAX]
MonitorElement * hpRPactive
MonitorElement * hp2HitsMultROC_LS[RPotsTotalNumber]
edm::EDGetTokenT< edm::DetSetVector< CTPPSPixelCluster > > tokenCluster
MonitorElement * h2CluSize[NArms][NStationMAX]
edm::EDGetTokenT< edm::DetSetVector< CTPPSPixelDigi > > tokenDigi
void dqmBeginRun(edm::Run const &, edm::EventSetup const &) override
virtual void setOption(const char *option)
MonitorElement * htrackMult[RPotsTotalNumber]
MonitorElement * h2HitsMultROC[RPotsTotalNumber]
MonitorElement * h2trackXY0[RPotsTotalNumber]
MonitorElement * hpixLTrack
int bunchCrossing() const
int getDefaultRowDetSize() const
void dqmEndRun(edm::Run const &run, edm::EventSetup const &eSetup) override
static int NRPotBinsInStation
static int NLocalTracksMAX
CTPPSPixelIndices thePixIndices
static int ClusterSizeMax
MonitorElement * htrackHits[RPotsTotalNumber]
void analyze(edm::Event const &e, edm::EventSetup const &eSetup) override
edm::EDGetTokenT< edm::DetSetVector< CTPPSPixelLocalTrack > > tokenTrack
CTPPSDetId stationId() const
int prIndex(int rp, int plane)
#define DEFINE_FWK_MODULE(type)
int RPindexValid[RPotsTotalNumber]
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
MonitorElement * hROCadc[RPotsTotalNumber *NplaneMAX][NROCsMAX]
CTPPSPixelDQMSource(const edm::ParameterSet &ps)
MonitorElement * hRPotActivBX[RPotsTotalNumber]
static int RPotsTotalNumber
int getDefaultColDetSize() const
constexpr int adc(sample_type sample)
get the ADC sample (12 bits)
void armName(std::string &name, NameFlag flag=nFull) const
int getRPindex(int arm, int station, int rp)
virtual TProfile2D * getTProfile2D() const
MonitorElement * hRPotActivBXroc[RPotsTotalNumber]
MonitorElement * h2xyROCHits[RPotsTotalNumber *NplaneMAX][NROCsMAX]
void setStation(uint32_t station)
int ClusMultPlane[RPotsTotalNumber][NplaneMAX]
unsigned int rpStatusWord
MonitorElement * hRPotActivBXall[RPotsTotalNumber]
virtual TProfile * getTProfile() const
~CTPPSPixelDQMSource() override
Base class for CTPPS detector IDs.
int transformToROC(const int col, const int row, int &rocId, int &colROC, int &rowROC) const
static const int kDetOffset
MonitorElement * h2AllPlanesActive
int getRPglobalBin(int arm, int stn)
int HitsMultROC[RPotsTotalNumber *NplaneMAX][NROCsMAX]
int getRPInStationBin(int rp)
collection_type::const_iterator const_iterator
int getPlaneIndex(int arm, int station, int rp, int plane)
MonitorElement * h2xyHits[RPotsTotalNumber][NplaneMAX]
MonitorElement * hRPotActivPlanes[RPotsTotalNumber]
int RPstatus[StationIDMAX][RPotsIDMAX]
MonitorElement * hBXshort
MonitorElement * h2HitsMultipl[NArms][NStationMAX]