165 h_trackCorr_hor = ibooker.
book2D(
"track correlation RP-210-hor",
"rp, 210, hor", 4, -0.5, 3.5, 4, -0.5, 3.5);
167 TAxis *xa = hist->GetXaxis(), *ya = hist->GetYaxis();
168 xa->SetBinLabel(1,
"45, 210, near"); ya->SetBinLabel(1,
"45, 210, near");
169 xa->SetBinLabel(2,
"45, 210, far"); ya->SetBinLabel(2,
"45, 210, far");
170 xa->SetBinLabel(3,
"56, 210, near"); ya->SetBinLabel(3,
"56, 210, near");
171 xa->SetBinLabel(4,
"56, 210, far"); ya->SetBinLabel(4,
"56, 210, far");
180 bool diag = (top45 != top56);
183 sprintf(name,
"%s 45%s - 56%s",
184 (diag) ?
"diagonal" :
"antidiagonal",
185 (top45) ?
"top" :
"bot",
186 (top56) ?
"top" :
"bot" 192 h_lrc_x_d = ibooker.
book2D(
"dx left vs right",
string(name) +
" : dx left vs. right, histogram;#Delta x_{45};#Delta x_{56}", 50, 0., 0., 50, 0., 0.);
193 h_lrc_x_n = ibooker.
book2D(
"xn left vs right",
string(name) +
" : xn left vs. right, histogram;x^{N}_{45};x^{N}_{56}", 50, 0., 0., 50, 0., 0.);
194 h_lrc_x_f = ibooker.
book2D(
"xf left vs right",
string(name) +
" : xf left vs. right, histogram;x^{F}_{45};x^{F}_{56}", 50, 0., 0., 50, 0., 0.);
196 h_lrc_y_d = ibooker.
book2D(
"dy left vs right",
string(name) +
" : dy left vs. right, histogram;#Delta y_{45};#Delta y_{56}", 50, 0., 0., 50, 0., 0.);
197 h_lrc_y_n = ibooker.
book2D(
"yn left vs right",
string(name) +
" : yn left vs. right, histogram;y^{N}_{45};y^{N}_{56}", 50, 0., 0., 50, 0., 0.);
198 h_lrc_y_f = ibooker.
book2D(
"yf left vs right",
string(name) +
" : yf left vs. right, histogram;y^{F}_{45};y^{F}_{56}", 50, 0., 0., 50, 0., 0.);
216 h_trackCorr = ibooker.
book2D(
"track RP correlation", title, 13, -0.5, 12.5, 13, -0.5, 12.5);
218 TAxis *xa = h_trackCorr_h->GetXaxis(), *ya = h_trackCorr_h->GetYaxis();
219 xa->SetBinLabel(1,
"210, near, top"); ya->SetBinLabel(1,
"210, near, top");
220 xa->SetBinLabel(2,
"bot"); ya->SetBinLabel(2,
"bot");
221 xa->SetBinLabel(3,
"hor"); ya->SetBinLabel(3,
"hor");
222 xa->SetBinLabel(4,
"far, hor"); ya->SetBinLabel(4,
"far, hor");
223 xa->SetBinLabel(5,
"top"); ya->SetBinLabel(5,
"top");
224 xa->SetBinLabel(6,
"bot"); ya->SetBinLabel(6,
"bot");
225 xa->SetBinLabel(8,
"220, near, top"); ya->SetBinLabel(8,
"220, near, top");
226 xa->SetBinLabel(9,
"bot"); ya->SetBinLabel(9,
"bot");
227 xa->SetBinLabel(10,
"hor"); ya->SetBinLabel(10,
"hor");
228 xa->SetBinLabel(11,
"far, hor"); ya->SetBinLabel(11,
"far, hor");
229 xa->SetBinLabel(12,
"top"); ya->SetBinLabel(12,
"top");
230 xa->SetBinLabel(13,
"bot"); ya->SetBinLabel(13,
"bot");
234 xa = h_trackCorr_h->GetXaxis(); ya = h_trackCorr_h->GetYaxis();
235 xa->SetBinLabel(1,
"210, near, top"); ya->SetBinLabel(1,
"210, near, top");
236 xa->SetBinLabel(2,
"bot"); ya->SetBinLabel(2,
"bot");
237 xa->SetBinLabel(3,
"hor"); ya->SetBinLabel(3,
"hor");
238 xa->SetBinLabel(4,
"far, hor"); ya->SetBinLabel(4,
"far, hor");
239 xa->SetBinLabel(5,
"top"); ya->SetBinLabel(5,
"top");
240 xa->SetBinLabel(6,
"bot"); ya->SetBinLabel(6,
"bot");
241 xa->SetBinLabel(8,
"220, near, top"); ya->SetBinLabel(8,
"220, near, top");
242 xa->SetBinLabel(9,
"bot"); ya->SetBinLabel(9,
"bot");
243 xa->SetBinLabel(10,
"hor"); ya->SetBinLabel(10,
"hor");
244 xa->SetBinLabel(11,
"far, hor"); ya->SetBinLabel(11,
"far, hor");
245 xa->SetBinLabel(12,
"top"); ya->SetBinLabel(12,
"top");
246 xa->SetBinLabel(13,
"bot"); ya->SetBinLabel(13,
"bot");
270 vfat_problem = ibooker.
book2D(
"vfats with any problem", title+
";plane;vfat index", 10, -0.5, 9.5, 4, -0.5, 3.5);
271 vfat_missing = ibooker.
book2D(
"vfats missing", title+
";plane;vfat index", 10, -0.5, 9.5, 4, -0.5, 3.5);
272 vfat_ec_bc_error = ibooker.
book2D(
"vfats with EC or BC error", title+
";plane;vfat index", 10, -0.5, 9.5, 4, -0.5, 3.5);
273 vfat_corruption = ibooker.
book2D(
"vfats with data corruption", title+
";plane;vfat index", 10, -0.5, 9.5, 4, -0.5, 3.5);
275 activity = ibooker.
book1D(
"active planes", title+
";number of active planes", 11, -0.5, 10.5);
276 activity_u = ibooker.
book1D(
"active planes U", title+
";number of active U planes", 11, -0.5, 10.5);
277 activity_v = ibooker.
book1D(
"active planes V", title+
";number of active V planes", 11, -0.5, 10.5);
279 activity_per_bx = ibooker.
book1D(
"activity per BX", title+
";Event.BX", 4002, -1.5, 4000. + 0.5);
280 activity_per_bx_short = ibooker.
book1D(
"activity per BX (short)", title+
";Event.BX", 102, -1.5, 100. + 0.5);
282 hit_plane_hist = ibooker.
book2D(
"activity in planes (2D)", title+
";plane number;strip number", 10, -0.5, 9.5, 32, -0.5, 511.5);
284 patterns_u = ibooker.
book1D(
"recognized patterns U", title+
";number of recognized U patterns", 11, -0.5, 10.5);
285 patterns_v = ibooker.
book1D(
"recognized patterns V", title+
";number of recognized V patterns", 11, -0.5, 10.5);
287 h_planes_fit_u = ibooker.
book1D(
"planes contributing to fit U", title+
";number of planes contributing to U fit", 6, -0.5, 5.5);
288 h_planes_fit_v = ibooker.
book1D(
"planes contributing to fit V", title+
";number of planes contributing to V fit", 6, -0.5, 5.5);
290 event_category = ibooker.
book1D(
"event category", title+
";event category", 5, -0.5, 4.5);
291 TH1F *event_category_h = event_category->
getTH1F();
292 event_category_h->GetXaxis()->SetBinLabel(1,
"empty");
293 event_category_h->GetXaxis()->SetBinLabel(2,
"insufficient");
294 event_category_h->GetXaxis()->SetBinLabel(3,
"single-track");
295 event_category_h->GetXaxis()->SetBinLabel(4,
"multi-track");
296 event_category_h->GetXaxis()->SetBinLabel(5,
"shower");
298 trackHitsCumulativeHist = ibooker.
book2D(
"track XY profile", title+
";x (mm);y (mm)", 100, -18., +18., 100, -18., +18.);
300 track_u_profile = ibooker.
book1D(
"track profile U", title+
"; U (mm)", 512, -256*66E-3, +256*66E-3);
301 track_v_profile = ibooker.
book1D(
"track profile V", title+
"; V (mm)", 512, -256*66E-3, +256*66E-3);
316 digi_profile_cumulative = ibooker.
book1D(
"digi profile", title+
";strip number", 512, -0.5, 511.5);
317 cluster_profile_cumulative = ibooker.
book1D(
"cluster profile", title+
";cluster center", 1024, -0.25, 511.75);
318 hit_multiplicity = ibooker.
book1D(
"hit multiplicity", title+
";hits/detector/event", 6, -0.5, 5.5);
319 cluster_size = ibooker.
book1D(
"cluster size", title+
";hits per cluster", 5, 0.5, 5.5);
321 efficiency_num = ibooker.
book1D(
"efficiency num", title+
";track position (mm)", 30, -15., 0.);
322 efficiency_den = ibooker.
book1D(
"efficiency den", title+
";track position (mm)", 30, -15., 0.);
329 verbosity(ps.getUntrackedParameter<unsigned
int>(
"verbosity", 0))
375 for (
unsigned int arm = 0; arm < 2; arm++)
381 for (
unsigned int st = 0; st < 3; st += 2)
387 for (
unsigned int rp = 0; rp < 6; ++rp)
404 for (
unsigned int pl = 0; pl < 10; ++pl)
466 "ERROR in TotemDQMModuleRP::analyze > some of the required inputs are not valid. Skipping this event.\n" 467 <<
" status.isValid = " << status.
isValid() <<
"\n" 468 <<
" digi.isValid = " << digi.
isValid() <<
"\n" 469 <<
" digCluster.isValid = " << digCluster.
isValid() <<
"\n" 470 <<
" hits.isValid = " << hits.
isValid() <<
"\n" 471 <<
" patterns.isValid = " << patterns.
isValid() <<
"\n" 472 <<
" tracks.isValid = " << tracks.
isValid();
485 for (
auto &ds1 : *tracks)
487 for (
auto &tr1 : ds1)
493 unsigned int arm1 = rpId1.
arm();
494 unsigned int stNum1 = rpId1.station();
495 unsigned int rpNum1 = rpId1.rp();
496 if (stNum1 != 0 || (rpNum1 != 2 && rpNum1 != 3))
498 unsigned int idx1 = arm1*2 + rpNum1-2;
500 for (
auto &ds2 : *tracks)
502 for (
auto &tr2 : ds2)
508 unsigned int arm2 = rpId2.
arm();
509 unsigned int stNum2 = rpId2.station();
510 unsigned int rpNum2 = rpId2.rp();
511 if (stNum2 != 0 || (rpNum2 != 2 && rpNum2 != 3))
513 unsigned int idx2 = arm2*2 + rpNum2-2;
524 for (
auto &ds : *status)
527 unsigned int plNum = detId.
plane();
536 plots.vfat_problem->Fill(plNum,
s.getChipPosition());
537 plots.vfat_missing->Fill(plNum,
s.getChipPosition());
540 if (
s.isECProgressError() ||
s.isBCProgressError())
542 plots.vfat_problem->Fill(plNum,
s.getChipPosition());
543 plots.vfat_ec_bc_error->Fill(plNum,
s.getChipPosition());
546 if (
s.isIDMismatch() ||
s.isFootprintError() ||
s.isCRCError())
548 plots.vfat_problem->Fill(plNum,
s.getChipPosition());
549 plots.vfat_corruption->Fill(plNum,
s.getChipPosition());
562 planePlots[detId].digi_profile_cumulative->Fill(dit->getStripNumber());
570 planePlots[detId].cluster_profile_cumulative->Fill(dit->getCenterStripPosition());
577 planePlots[detId].hit_multiplicity->Fill(it->size());
585 planePlots[detId].cluster_size->Fill(dit->getNumberOfStrips());
589 for (
auto &ds : *tracks)
600 for (
unsigned int plNum = 0; plNum < 10; ++plNum)
605 double ft_z = ft.getZ0();
606 double ft_x = ft.getX0() + ft.getTx() * (ft_z - rp_z);
607 double ft_y = ft.getY0() + ft.getTy() * (ft_z - rp_z);
609 double ft_v = geometry->
GlobalToLocal(plId, CLHEP::Hep3Vector(ft_x, ft_y, ft_z)).y();
611 bool hasMatchingHit =
false;
612 const auto &hit_ds_it = hits->find(plId);
613 if (hit_ds_it != hits->end())
615 for (
const auto &
h : *hit_ds_it)
617 bool match = (fabs(ft_v -
h.getPosition()) < 2.*0.066);
620 hasMatchingHit =
true;
628 pp.efficiency_den->Fill(ft_v);
630 pp.efficiency_num->Fill(ft_v);
640 map<unsigned int, set<unsigned int> > planes;
641 map<unsigned int, set<unsigned int> > planes_u;
642 map<unsigned int, set<unsigned int> > planes_v;
643 for (
const auto &ds : *hits)
649 unsigned int planeNum = detId.
plane();
652 planes[rpId].insert(planeNum);
653 if (detId.isStripsCoordinateUDirection())
654 planes_u[rpId].
insert(planeNum);
656 planes_v[rpId].insert(planeNum);
659 for (
const auto &ds : *status)
661 bool activity =
false;
662 for (
const auto &
s : ds)
664 if (
s.isNumberOfClustersSpecified() &&
s.getNumberOfClusters() > 0)
675 unsigned int planeNum = detId.
plane();
678 planes[rpId].insert(planeNum);
679 if (detId.isStripsCoordinateUDirection())
680 planes_u[rpId].
insert(planeNum);
682 planes_v[rpId].insert(planeNum);
686 for (std::map<unsigned int, PotPlots>::iterator it =
potPlots.begin(); it !=
potPlots.end(); it++)
688 it->second.activity->Fill(planes[it->first].size());
689 it->second.activity_u->Fill(planes_u[it->first].size());
690 it->second.activity_v->Fill(planes_v[it->first].size());
692 if (planes[it->first].size() >= 6)
695 it->second.activity_per_bx_short->Fill(event.
bunchCrossing());
702 unsigned int planeNum = detId.
plane();
711 for (
auto &ds : *patterns)
718 unsigned int u = 0,
v = 0;
721 if (!
p.getFittable())
731 pp.patterns_u->Fill(u);
732 pp.patterns_v->Fill(
v);
739 auto &
pp = it.second;
742 unsigned int pl_u = planes_u[rpId].size();
743 unsigned int pl_v = planes_v[rpId].size();
746 const auto &rp_pat_it = patterns->find(rpId);
748 unsigned int pat_u = 0, pat_v = 0;
749 if (rp_pat_it != patterns->end())
751 for (
auto &
p : *rp_pat_it)
753 if (!
p.getFittable())
767 if (pl_u == 0 && pl_v == 0) category = 0;
769 if (category == -1 && pat_u + pat_v <= 1)
777 if (pat_u == 1 && pat_v == 1) category = 2;
779 if (category == -1) category = 3;
781 pp.event_category->Fill(category);
785 for (
auto &ds : *tracks)
797 unsigned int n_pl_in_fit_u = 0, n_pl_in_fit_v = 0;
798 for (
auto &hds : ft.getHits())
813 pp.h_planes_fit_u->Fill(n_pl_in_fit_u);
814 pp.h_planes_fit_v->Fill(n_pl_in_fit_v);
829 double x = ft.getX0() - rp_x;
830 double y = ft.getY0() - rp_y;
832 pp.trackHitsCumulativeHist->Fill(x, y);
834 double U = x * rod_U.x() + y * rod_U.y();
835 double V = x * rod_V.x() + y * rod_V.y();
837 pp.track_u_profile->Fill(U);
838 pp.track_v_profile->Fill(V);
849 map<unsigned int, unsigned int>
mTop, mHor, mBot;
858 for (
auto &ds : *tracks)
861 unsigned int rpNum = rpId.
rp();
869 if (rpNum == 0 || rpNum == 4)
871 if (rpNum == 2 || rpNum == 3)
873 if (rpNum == 1 || rpNum == 5)
878 for (
auto &
p : armPlots)
880 p.second.h_numRPWithTrack_top->Fill(mTop[
p.first]);
881 p.second.h_numRPWithTrack_hor->Fill(mHor[
p.first]);
882 p.second.h_numRPWithTrack_bot->Fill(mBot[
p.first]);
886 for (
auto &ds1 : *tracks)
888 for (
auto &tr1 : ds1)
894 unsigned int arm1 = rpId1.
arm();
895 unsigned int stNum1 = rpId1.station();
896 unsigned int rpNum1 = rpId1.rp();
897 unsigned int idx1 = stNum1/2 * 7 + rpNum1;
898 bool hor1 = (rpNum1 == 2 || rpNum1 == 3);
903 for (
auto &ds2 : *tracks)
905 for (
auto &tr2 : ds2)
911 unsigned int arm2 = rpId2.
arm();
912 unsigned int stNum2 = rpId2.station();
913 unsigned int rpNum2 = rpId2.rp();
914 unsigned int idx2 = stNum2/2 * 7 + rpNum2;
915 bool hor2 = (rpNum2 == 2 || rpNum2 == 3);
Detector ID class for TOTEM Si strip detectors.
T getParameter(std::string const &) const
MonitorElement * h_lrc_x_n
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
void dqmBeginRun(edm::Run const &, edm::EventSetup const &) override
void Init(DQMStore::IBooker &ibooker)
MonitorElement * h_trackCorr_overlap
CLHEP::Hep3Vector GetRPGlobalTranslation(int copy_no) const
position of a RP package (translation z corresponds to the first plane - TODO check it) ...
#define DEFINE_FWK_MODULE(type)
std::map< unsigned int, ArmPlots > armPlots
int bunchCrossing() const
DetGeomDesc * GetDetector(unsigned int) const
returns geometry of a detector performs necessary checks, returns NULL if fails input is raw ID ...
MonitorElement * events_per_bx
MonitorElement * h_lrc_x_f
void endRun(edm::Run const &run, edm::EventSetup const &eSetup) override
bool isStripsCoordinateUDirection() const
MonitorElement * h_trackCorr
edm::EDGetTokenT< edm::DetSetVector< TotemRPDigi > > tokenDigi
MonitorElement * h_lrc_y_d
Event setup record containing the real (actual) geometry information.
MonitorElement * h_numRPWithTrack_top
const PhiMemoryImage patterns[9]
plots related to one RP plane
std::map< unsigned int, PlanePlots > planePlots
MonitorElement * h_numRPWithTrack_hor
edm::EDGetTokenT< edm::DetSetVector< TotemRPRecHit > > tokenRecHit
MonitorElement * h_lrc_y_f
plots related to one (anti)diagonal
void beginLuminosityBlock(edm::LuminosityBlock const &lumi, edm::EventSetup const &eSetup) override
virtual ~TotemRPDQMSource()
edm::EDGetTokenT< edm::DetSetVector< TotemRPUVPattern > > tokenUVPattern
MonitorElement * h_numRPWithTrack_bot
MonitorElement * book1D(Args &&...args)
MonitorElement * h_trackCorr_hor
DDTranslation translation() const
void rpName(std::string &name, NameFlag flag=nFull) const
CTPPSDetId getRPId() const
bool insert(Storage &iStorage, ItemType *iItem, const IdTag &iIdTag)
CLHEP::Hep3Vector GlobalToLocal(DetGeomDesc *gd, const CLHEP::Hep3Vector r) const
MonitorElement * events_per_bx_short
void armName(std::string &name, NameFlag flag=nFull) const
CLHEP::Hep3Vector LocalToGlobalDirection(unsigned int id, const CLHEP::Hep3Vector dir) const
plots related to one station
edm::EDGetTokenT< edm::DetSetVector< TotemRPCluster > > tokenCluster
MonitorElement * hit_plane_hist
std::map< unsigned int, StationPlots > stationPlots
void setCurrentFolder(const std::string &fullpath)
CTPPSDetId getArmId() const
MonitorElement * book2D(Args &&...args)
void setPlane(uint32_t det)
void endLuminosityBlock(edm::LuminosityBlock const &lumi, edm::EventSetup const &eSetup) override
TH1F * getTH1F(void) const
MonitorElement * h_lrc_x_d
Base class for CTPPS detector IDs.
TotemRPDQMSource(const edm::ParameterSet &ps)
ESHandle< TrackerGeometry > geometry
void stationName(std::string &name, NameFlag flag=nFull) const
std::map< unsigned int, PotPlots > potPlots
void planeName(std::string &name, NameFlag flag=nFull) const
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
plots related to the whole system
void analyze(edm::Event const &e, edm::EventSetup const &eSetup) override
std::map< unsigned int, DiagonalPlots > diagonalPlots
TH2F * getTH2F(void) const
MonitorElement * h_lrc_y_n
edm::EDGetTokenT< edm::DetSetVector< TotemRPLocalTrack > > tokenLocalTrack
edm::EDGetTokenT< edm::DetSetVector< TotemVFATStatus > > tokenStatus