262 trackCorrelation = ibooker.
book2D(
"tracks correlation near-far",
263 title +
" tracks correlation near-far;track x 220nr_hr (mm);track x 220cyl (mm)",
270 trackCorrelationLowMultiplicity = ibooker.
book2D(
271 "tracks correlation with low multiplicity near-far",
272 title +
" tracks correlation with low multiplicity near-far;track x 220nr_hr (mm);track x 220cyl(mm)",
290 LeadingOnlyCounter(0),
291 TrailingOnlyCounter(0),
293 pixelTracksMap(
"Pixel track maps for efficiency",
"Pixel track maps for efficiency", 25, 0, 25, 16, -8, 8) {
302 ibooker.
book2D(
"hits in planes lumisection",
303 title +
" hits in planes in the last lumisection;plane number;x (mm)",
312 ibooker.
book2D(
"hits with OOT in planes (le only)",
313 title +
" hits with OOT in planes (le only);plane number, OOT index;x (mm)",
322 ibooker.
book1D(
"active planes inclusive",
323 title +
" active planes, MH and le only included (per event);number of active planes",
328 ECCheck = ibooker.
book1D(
"optorxEC(8bit) - vfatEC",
title +
" EC Error;optorxEC-vfatEC", 50, -25, 25);
331 ibooker.
book2D(
"Efficiency in channels",
332 title +
" Efficiency (%) in channels (diamonds only);plane number;ch number",
346 ibooker.
book2D(
"track time vs BX",
title +
" track time vs BX;BX;track_time(ns)", 4000, 0, 4000, 500, -25, 25);
353 "track time vs BX profile",
title +
" track time vs BX profile;BX;track_time(ns)", 500, -25, 25, 4000, 0, 4000);
368 "activity per BX " +
window,
title +
" Activity per BX " +
window +
" ns;Event.BX", 3600, -1.5, 3598. + 0.5);
371 title +
" tomography with pixel " +
window +
" ns (all planes);x + 25*plane(mm);y (mm)",
381 title +
" hits in planes;plane number;x (mm)",
390 title +
" hits with OOT in planes;plane number, OOT index;x (mm)",
400 for (
int pl = 0; pl < 4; ++pl)
401 for (
unsigned int oot = 0; oot <
windowsNum; ++oot) {
414 ibooker.
book1D(
"active planes",
title +
" active planes (per event);number of active planes", 6, -0.5, 5.5);
419 title +
" tracks with OOT;plane number;x (mm)",
428 title +
" leading edge (le and te) (recHits); leading edge (ns)",
433 title +
" leading edge (with or without te) (DIGIs); leading edge (ns)",
438 title +
" leading edge (le only) (DIGIs); leading edge (ns)",
443 title +
" trailing edge (te only) (DIGIs); trailing edge (ns)",
448 ibooker.
book1D(
"time over threshold",
title +
" time over threshold;time over threshold (ns)", 250, -25, 100);
460 ibooker.
book1D(
"event category",
title +
" leading edges without trailing;;%", 3, 0.5, 3.5);
466 for (
unsigned short error_index = 1; error_index < 16; ++error_index)
481 ibooker.
book2D(
"MH in channels",
title +
" MH (%) in channels;plane number;ch number", 10, -0.5, 4.5, 14, -1, 13);
493 : pixelTracksMapWithDiamonds(
"Pixel track maps for efficiency with coincidence",
494 "Pixel track maps for efficiency with coincidence",
508 title +
" digi profile; ch number",
517 title +
" leading edge (le and te) (recHits); leading edge (ns)",
522 title +
" leading edge (le only) (DIGIs); leading edge (ns)",
527 title +
" trailing edge (te only) (DIGIs); trailing edge (ns)",
532 ibooker.
book1D(
"time over threshold",
title +
" time over threshold;time over threshold (ns)", 75, -25, 50);
535 title +
" tomography with pixel;x + 25 OOT (mm);y (mm)",
543 ibooker.
book2D(
"Efficiency wrt pixels",
title +
" Efficiency wrt pixels;x (mm);y (mm)", 25, 0, 25, 16, -8, 8);
549 : HitCounter(0), MHCounter(0), LeadingOnlyCounter(0), TrailingOnlyCounter(0), CompleteCounter(0) {
564 "activity per BX " +
window,
title +
" Activity per BX " +
window +
" ns;Event.BX", 3600, -1.5, 3598. + 0.5);
568 for (
unsigned short error_index = 1; error_index < 16; ++error_index)
573 title +
" leading edge (le and te) (recHits); leading edge (ns)",
578 title +
" leading edge (le only) (DIGIs); leading edge (ns)",
583 title +
" trailing edge (te only) (DIGIs); trailing edge (ns)",
588 ibooker.
book1D(
"time over threshold",
title +
" time over threshold;time over threshold (ns)", 75, -25, 50);
600 "tomography with pixel;x + 25 OOT (mm);y (mm)",
618 ps.getUntrackedParameter<
edm::
InputTag>(
"tagPixelLocalTracks"))),
620 ps.getUntrackedParameter<
edm::
InputTag>(
"tagDiamondRecHits"))),
622 ps.getUntrackedParameter<
edm::
InputTag>(
"tagDiamondLocalTracks"))),
628 verbosity_(ps.getUntrackedParameter<unsigned
int>(
"verbosity", 0)),
631 windowsNum_(ps.getUntrackedParameter<unsigned
int>(
"windowsNum", 3)),
640 for (
const auto&
pset : ps.
getParameter<std::vector<edm::ParameterSet>>(
"offsetsOOT")) {
662 const auto diam =
geom.sensor(
it->first);
663 diamShifts_[diam_id].global = diam->translation().x() - diam->getDiamondDimensions().xHalfWidth;
666 auto pix =
geom.sensor(pixid);
669 pix->translation().x() - pix->getDiamondDimensions().xHalfWidth -
diamShifts_[diam_id].global - 1.;
684 for (
auto it =
geom.beginSensor();
it !=
geom.endSensor(); ++
it) {
712 auto d = std::make_shared<dds::Cache>();
713 d->hitDistribution2dMap.reserve(
potPlots_.size());
716 d->hitDistribution2dMap[
plot.first] = std::make_unique<TH2F>(
717 "hits in planes lumisection",
718 (
std::string(
plot.second.hitDistribution2d_lumisection->getTH2F()->GetTitle()) +
";plane number;x (mm)")
770 <<
"ERROR in CTPPSDiamondDQMSource::analyze > some of the required inputs are not valid. Skipping this " 773 <<
" diamondVFATStatus.isValid = " << diamondVFATStatus.
isValid() <<
"\n" 774 <<
" diamondDigis.isValid = " << diamondDigis.
isValid() <<
"\n" 775 <<
" fedInfo.isValid = " << fedInfo.
isValid() <<
"\n" 777 <<
" pixelTracks.isValid = " <<
pixelTracks.isValid() <<
"\n" 778 <<
" diamondRecHits.isValid = " << diamondRecHits.
isValid() <<
"\n" 779 <<
" diamondLocalTracks.isValid = " << diamondLocalTracks.
isValid();
793 for (
const auto& tracks_220nr_hr : *diamondLocalTracks) {
802 if (
potPlots_.count(detId_220nr_hr.rpId()) == 0)
804 TH1F* trackHistoInTimeTmp =
potPlots_[detId_220nr_hr.rpId()].trackDistribution->getTH1F();
806 for (
const auto& track_220nr_hr : tracks_220nr_hr) {
807 if (!track_220nr_hr.isValid())
811 int startBin_220nr_hr = trackHistoInTimeTmp->FindBin(
812 track_220nr_hr.x0() -
diamShifts_[detId_220nr_hr.rpId()].global - track_220nr_hr.x0Sigma());
815 for (
const auto& tracks_220cyl : *diamondLocalTracks) {
821 if (detId_220nr_hr.arm() != detId_220cyl.arm() || detId_220nr_hr.station() == detId_220cyl.station())
827 TH2F* trackHistoTmp =
sectorPlots_[detId_220cyl.armId()].trackCorrelation->getTH2F();
828 TAxis* trackHistoTmpXAxis = trackHistoTmp->GetXaxis();
829 TAxis* trackHistoTmpYAxis = trackHistoTmp->GetYaxis();
831 for (
const auto& track_220cyl : tracks_220cyl) {
832 if (!track_220cyl.isValid())
834 int startBin_220cyl = trackHistoTmpYAxis->FindBin(
835 track_220cyl.x0() -
diamShifts_[detId_220cyl.rpId()].global - track_220cyl.x0Sigma());
839 for (
int i = 0;
i < numOfBins_220nr_hr; ++
i)
840 for (
int y = 0;
y < numOfBins_220cyl; ++
y) {
841 float track_220nr_hr_x = trackHistoTmpXAxis->GetBinCenter(startBin_220nr_hr +
i);
842 float track_220cyl_x = trackHistoTmpYAxis->GetBinCenter(startBin_220cyl +
y);
843 trackHistoTmp->Fill(track_220nr_hr_x, track_220cyl_x);
846 sectorPlots_[detId_220cyl.armId()].trackCorrelationLowMultiplicity->Fill(track_220nr_hr_x,
864 for (
const auto& digis : *diamondDigis) {
866 for (
const auto& digi : digis) {
872 if (digi.leadingEdge() != 0 || digi.trailingEdge() != 0) {
874 if (digi.leadingEdge() != 0) {
877 if (digi.leadingEdge() != 0 && digi.trailingEdge() == 0) {
878 ++
potPlots_[detId_pot].LeadingOnlyCounter;
881 if (digi.leadingEdge() == 0 && digi.trailingEdge() != 0) {
882 ++
potPlots_[detId_pot].TrailingOnlyCounter;
885 if (digi.leadingEdge() != 0 && digi.trailingEdge() != 0) {
897 for (
unsigned short hptdcErrorIndex = 1; hptdcErrorIndex < 16; ++hptdcErrorIndex)
898 if (hptdcErrors.
errorId(hptdcErrorIndex - 1))
899 potPlots_[detId_pot].HPTDCErrorFlags_2D->Fill(hptdcErrorIndex, verticalIndex);
901 if (digi.multipleHit())
909 for (
const auto& vfat_status : *diamondVFATStatus) {
911 for (
const auto&
status : vfat_status) {
920 for (
const auto& optorx : *fedInfo) {
931 std::unordered_map<unsigned int, std::set<unsigned int>> planes;
932 std::unordered_map<unsigned int, std::set<unsigned int>> planes_inclusive;
934 auto lumiCache = luminosityBlockCache(
event.getLuminosityBlock().index());
935 for (
const auto& rechits : *diamondRecHits) {
939 for (
const auto& rechit : rechits) {
940 planes_inclusive[detId_pot].insert(
detId.plane());
949 potPlots_[detId_pot].recHitTime->Fill(rechit.time());
951 float UFSDShift = 0.0;
952 if (rechit.yWidth() < 3)
956 TH2F* hitHistoTmp =
potPlots_[detId_pot].hitDistribution2d->getTH2F();
957 TAxis* hitHistoTmpYAxis = hitHistoTmp->GetYaxis();
958 int startBin = hitHistoTmpYAxis->FindBin(rechit.x() - x_shift.global - 0.5 * rechit.xWidth());
960 for (
int i = 0;
i < numOfBins; ++
i)
961 hitHistoTmp->Fill(
detId.plane() + UFSDShift, hitHistoTmpYAxis->GetBinCenter(startBin +
i));
964 hitHistoTmp = lumiCache->hitDistribution2dMap[detId_pot].get();
965 hitHistoTmpYAxis = hitHistoTmp->GetYaxis();
966 startBin = hitHistoTmpYAxis->FindBin(rechit.x() - x_shift.global - 0.5 * rechit.xWidth());
968 for (
int i = 0;
i < numOfBins; ++
i)
969 hitHistoTmp->Fill(
detId.plane() + UFSDShift, hitHistoTmpYAxis->GetBinCenter(startBin +
i));
973 if (rechit.toT() > 0) {
975 potPlots_[detId_pot].leadingEdgeCumulative_both->Fill(rechit.time() + 25 * rechit.ootIndex());
976 potPlots_[detId_pot].timeOverThresholdCumulativePot->Fill(rechit.toT());
978 TH2F* hitHistoOOTTmp =
potPlots_[detId_pot].hitDistribution2dOOT->getTH2F();
979 TAxis* hitHistoOOTTmpYAxis = hitHistoOOTTmp->GetYaxis();
980 int startBin = hitHistoOOTTmpYAxis->FindBin(rechit.x() - x_shift.global - 0.5 * rechit.xWidth());
982 for (
int i = 0;
i < numOfBins; ++
i)
984 hitHistoOOTTmpYAxis->GetBinCenter(startBin +
i));
988 TH2F* hitHistoOOTTmp =
potPlots_[detId_pot].hitDistribution2dOOT_le->getTH2F();
989 TAxis* hitHistoOOTTmpYAxis = hitHistoOOTTmp->GetYaxis();
990 int startBin = hitHistoOOTTmpYAxis->FindBin(rechit.x() - x_shift.global - 0.5 * rechit.xWidth());
992 for (
int i = 0;
i < numOfBins; ++
i)
994 hitHistoOOTTmpYAxis->GetBinCenter(startBin +
i));
997 potPlots_[detId_pot].activity_per_bx.count(rechit.ootIndex()) > 0)
998 potPlots_[detId_pot].activity_per_bx.at(rechit.ootIndex())->
Fill(
event.bunchCrossing());
1006 plt.second.activePlanes->Fill(planes[plt.first].size());
1008 plt.second.activePlanesInclusive->Fill(planes_inclusive[plt.first].size());
1012 for (
const auto&
tracks : *diamondLocalTracks) {
1017 if (!
track.isValid())
1026 TH2F* trackHistoOOTTmp =
potPlots_[detId_pot].trackDistributionOOT->getTH2F();
1027 TAxis* trackHistoOOTTmpYAxis = trackHistoOOTTmp->GetYaxis();
1028 int startBin = trackHistoOOTTmpYAxis->FindBin(
track.x0() - x_shift.global -
track.x0Sigma());
1030 for (
int i = 0;
i < numOfBins; ++
i)
1031 trackHistoOOTTmp->Fill(
track.ootIndex(), trackHistoOOTTmpYAxis->GetBinCenter(startBin +
i));
1034 TH1F* trackHistoInTimeTmp =
potPlots_[detId_pot].trackDistribution->getTH1F();
1035 int startBin = trackHistoInTimeTmp->FindBin(
track.x0() - x_shift.global -
track.x0Sigma());
1037 for (
int i = 0;
i < numOfBins; ++
i)
1038 trackHistoInTimeTmp->Fill(trackHistoInTimeTmp->GetBinCenter(startBin +
i));
1048 for (
const auto&
tracks : *diamondLocalTracks) {
1053 std::set<int> planesInTrackSet;
1054 for (
const auto& vec : *diamondRecHits) {
1056 if (
detid.arm() != detId_pot.arm())
1059 for (
const auto&
hit : vec) {
1063 planesInTrackSet.insert(
detid.plane());
1068 if (numOfHits > 0 && numOfHits <= 10 && planesInTrackSet.size() > 2) {
1071 if (
detId.rpId() != detId_pot)
1073 const unsigned short map_index =
detId.plane() * 100 +
detId.channel();
1074 if (
potPlots_[detId_pot].effDoublecountingChMap.count(map_index) == 0) {
1075 potPlots_[detId_pot].effTriplecountingChMap[map_index] = 0;
1076 potPlots_[detId_pot].effDoublecountingChMap[map_index] = 0;
1080 ++
potPlots_[detId_pot].effDoublecountingChMap[map_index];
1081 for (
const auto& rechits : *diamondRecHits) {
1083 if (detId_hit ==
detId)
1084 for (
const auto& rechit : rechits)
1085 if (
track.containsHit(rechit, 1))
1086 ++
potPlots_[detId_pot].effTriplecountingChMap[map_index];
1095 for (
const auto& rechits : *diamondRecHits) {
1097 const auto pix_shift =
diamShifts_.at(detId_pot).withPixels;
1098 for (
const auto& rechit : rechits) {
1101 if (rechit.toT() == 0)
1114 for (
const auto& lt : ds) {
1115 if (lt.isValid() && pixId.arm() == detId_pot.arm()) {
1117 potPlots_[detId_pot].pixelTomographyAll.count(rechit.ootIndex()) > 0 && lt.x0() - pix_shift < 24)
1119 .pixelTomographyAll.at(rechit.ootIndex())
1120 ->
Fill(lt.x0() - pix_shift + 25 *
detId.plane(), lt.y0());
1154 std::unordered_map<unsigned int, unsigned int> channelsPerPlane;
1156 for (
const auto& digis : *diamondDigis) {
1158 for (
const auto& digi : digis) {
1164 if (digi.leadingEdge() != 0) {
1165 planePlots_[detId_plane].digiProfileCumulativePerPlane->Fill(
detId.channel());
1166 channelsPerPlane[detId_plane]++;
1170 if ((digi.trailingEdge() == 0) && (digi.leadingEdge() != 0)) {
1172 }
else if ((digi.leadingEdge() == 0 && (digi.trailingEdge() != 0))) {
1179 for (
const auto& plt : channelsPerPlane)
1180 planePlots_[plt.first].hit_multiplicity->Fill(plt.second);
1183 for (
const auto& rechits : *diamondRecHits) {
1185 for (
const auto& rechit : rechits) {
1188 if (rechit.toT() == 0)
1192 planePlots_[detId_plane].leadingEdgeCumulativePerPlane_both->Fill(rechit.time() + 25 * rechit.ootIndex());
1193 planePlots_[detId_plane].TimeOverThresholdCumulativePerPlane->Fill(rechit.toT());
1197 TH1F* hitHistoTmp =
planePlots_[detId_plane].hitProfile->getTH1F();
1198 int startBin = hitHistoTmp->FindBin(rechit.x() -
diamShifts_.at(detId_pot).global - 0.5 * rechit.xWidth());
1200 for (
int i = 0;
i < numOfBins; ++
i)
1201 hitHistoTmp->Fill(hitHistoTmp->GetBinCenter(startBin +
i));
1214 for (
const auto& lt : ds) {
1218 const auto&
shift = sh_vs_id.second;
1219 if (detId_pot.
arm() == pixId.arm())
1221 potPlots_[detId_pot].pixelTracksMap.Fill(lt.x0() -
shift.withPixels, lt.y0());
1224 std::set<CTPPSDiamondDetId> planesWitHits_set;
1225 for (
const auto& rechits : *diamondRecHits) {
1227 const auto pix_shift =
diamShifts_.at(detId_pot).withPixels;
1228 for (
const auto& rechit : rechits) {
1235 if (pixId.arm() == detId_plane.arm() && lt.x0() - pix_shift < 24) {
1236 planePlots_[detId_plane].pixelTomography_far->Fill(lt.x0() - pix_shift + 25 * rechit.ootIndex(), lt.y0());
1238 planesWitHits_set.insert(detId_plane);
1243 for (
auto& planeId : planesWitHits_set)
1244 planePlots_[planeId].pixelTracksMapWithDiamonds.Fill(lt.x0() -
diamShifts_.at(planeId.rpId()).withPixels,
1256 for (
const auto& digis : *diamondDigis) {
1258 for (
const auto& digi : digis) {
1264 for (
unsigned short hptdcErrorIndex = 1; hptdcErrorIndex < 16; ++hptdcErrorIndex)
1265 if (hptdcErrors.
errorId(hptdcErrorIndex - 1))
1267 if (digi.multipleHit())
1271 if (digi.leadingEdge() != 0 || digi.trailingEdge() != 0) {
1273 if (digi.trailingEdge() == 0) {
1276 }
else if (digi.leadingEdge() == 0) {
1292 for (
const auto& rechits : *diamondRecHits) {
1294 for (
const auto& rechit : rechits) {
1300 channelPlots_[
detId].leadingEdgeCumulative_both->Fill(rechit.time() + 25 * rechit.ootIndex());
1303 ++lumiCache->hitsCounterMap[
detId];
1313 for (
const auto& rechits : *diamondRecHits) {
1315 const auto shift_pix =
diamShifts_.at(detId_pot).withPixels;
1316 for (
const auto& rechit : rechits) {
1332 for (
const auto& lt : ds) {
1333 if (lt.isValid() && pixId.arm() ==
detId.arm() && lt.x0() - shift_pix < 24)
1334 channelPlots_[
detId].pixelTomography_far->Fill(lt.x0() - shift_pix + 25 * rechit.ootIndex(), lt.y0());
1344 auto lumiCache = luminosityBlockCache(
iLumi.index());
1348 *(
plot.second.hitDistribution2d_lumisection->getTH2F()) = *(lumiCache->hitDistribution2dMap[
plot.first]);
1351 auto hitsCounterPerLumisection = lumiCache->hitsCounterMap[
plot.first];
1352 if (hitsCounterPerLumisection != 0) {
1356 double HundredOverHitCounter = .0;
1357 if (
plot.second.HitCounter != 0)
1358 HundredOverHitCounter = 100. /
plot.second.HitCounter;
1359 plot.second.HPTDCErrorFlags->setBinContent(16, HundredOverHitCounter *
plot.second.MHCounter);
1360 plot.second.leadingWithoutTrailing->setBinContent(1, HundredOverHitCounter *
plot.second.LeadingOnlyCounter);
1361 plot.second.leadingWithoutTrailing->setBinContent(2, HundredOverHitCounter *
plot.second.TrailingOnlyCounter);
1362 plot.second.leadingWithoutTrailing->setBinContent(3, HundredOverHitCounter *
plot.second.CompleteCounter);
1366 double HundredOverHitCounterPot = 0.;
1367 if (
plot.second.HitCounter != 0)
1368 HundredOverHitCounterPot = 100. /
plot.second.HitCounter;
1369 plot.second.leadingWithoutTrailingCumulativePot->setBinContent(
1370 1, HundredOverHitCounterPot *
plot.second.LeadingOnlyCounter);
1371 plot.second.leadingWithoutTrailingCumulativePot->setBinContent(
1372 2, HundredOverHitCounterPot *
plot.second.TrailingOnlyCounter);
1373 plot.second.leadingWithoutTrailingCumulativePot->setBinContent(
1374 3, HundredOverHitCounterPot *
plot.second.CompleteCounter);
1376 plot.second.MHComprensive->Reset();
1381 plot.second.MHComprensive->Fill(
1382 chId.
plane(), chId.
channel(), chPlot.second.HPTDCErrorFlags->getBinContent(16));
1389 plot.second.EfficiencyOfChannelsInPot->Reset();
1390 for (
auto& element :
plot.second.effTriplecountingChMap) {
1391 if (
plot.second.effDoublecountingChMap[element.first] > 0) {
1392 int plane = element.first / 100;
1393 int channel = element.first % 100;
1394 double counted = element.second;
1395 double total =
plot.second.effDoublecountingChMap[element.first];
1399 plot.second.EfficiencyOfChannelsInPot->Fill(plane, channel, 100 *
efficiency);
1406 TH2F* hitHistoTmp =
plot.second.EfficiencyWRTPixelsInPlane->getTH2F();
1409 hitHistoTmp->Divide(&(
plot.second.pixelTracksMapWithDiamonds), &(
potPlots_[detId_pot].pixelTracksMap));
1420 int& EC_difference)
const {
1423 plots.ECCheck->Fill((
int)((optorx.
lv1() & 0xFF) - ((
unsigned int)
status.ec() & 0xFF)) & 0xFF);
1424 if ((static_cast<int>((optorx.
lv1() & 0xFF) -
status.ec()) != EC_difference) &&
1425 (
static_cast<uint8_t
>((optorx.
lv1() & 0xFF) -
status.ec()) < 128))
1426 EC_difference = static_cast<int>(optorx.
lv1() & 0xFF) - (static_cast<unsigned int>(
status.ec()) & 0xFF);
1427 if (EC_difference != 1 && EC_difference != -500 &&
std::abs(EC_difference) < 127) {
1432 <<
"FED " << optorx.
fedId() <<
": ECError at EV: 0x" << std::hex << optorx.
lv1() <<
"\t\tVFAT EC: 0x" 1434 <<
"\tdiff: " << EC_difference;
1443 auto plots = rpPlots.second;
1446 *(
plots.trackTimeVsBXProfile->getTProfile()) = *
plots.trackTimeVsBX->getTH2F()->ProfileX();
void analyze(const edm::Event &, const edm::EventSetup &) override
MonitorElement * leadingEdgeCumulativePerPlane_le
static constexpr unsigned short CTPPS_FED_ID_45
OptoRx headers and footers.
plots related to one Diamond plane
MonitorElement * TimeOverThresholdCumulativePerChannel
MonitorElement * timeOverThresholdCumulativePot
MonitorElement * trackCorrelationLowMultiplicity
plots related to one Diamond detector package
unsigned int CompleteCounter
edm::EDGetTokenT< edm::DetSetVector< CTPPSDiamondRecHit > > tokenDiamondHit_
static constexpr double SEC_PER_LUMI_SECTION
Number of seconds per lumisection: used to compute hit rates in Hz.
T getParameter(std::string const &) const
const Translation & translation() const
edm::ESGetToken< CTPPSGeometry, VeryForwardRealGeometryRecord > ctppsGeometryRunToken_
unsigned int LeadingOnlyCounter
MonitorElement * activePlanes
edm::EDGetTokenT< std::vector< TotemFEDInfo > > tokenFEDInfo_
TH2F pixelTracksMapWithDiamonds
unsigned int CompleteCounter
std::unordered_map< CTPPSDetId, DiamondShifts > diamShifts_
std::map< int, int > effDoublecountingChMap
MonitorElement * trailingEdgeCumulativePerPlane_te
bool contains(EventRange const &lh, EventID const &rh)
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
static constexpr unsigned short CTPPS_DIAMOND_CYL_RP_ID
virtual void setCurrentFolder(std::string const &fullpath)
static constexpr unsigned short CTPPS_DIAMOND_NUM_OF_CHANNELS
static constexpr double DISPLAY_RESOLUTION_FOR_HITS_MM
Bin width of histograms showing hits and tracks (in mm)
MonitorElement * leadingEdgeCumulative_le
Reconstructed hit in diamond detectors.
MonitorElement * TimeOverThresholdCumulativePerPlane
MonitorElement * leadingEdgeCumulative_le
void dqmBeginRun(const edm::Run &, const edm::EventSetup &) override
MonitorElement * MHComprensive
MonitorElement * digiSentPercentage
CTPPSDiamondDQMSource(const edm::ParameterSet &)
MonitorElement * trailingEdgeCumulative_te
plots related to the whole system
MonitorElement * digiProfileCumulativePerPlane
static constexpr unsigned short CTPPS_PIXEL_STATION_ID
std::shared_ptr< dds::Cache > globalBeginLuminosityBlock(const edm::LuminosityBlock &, const edm::EventSetup &) const override
MonitorElement * leadingEdgeCumulative_all
MonitorElement * EfficiencyWRTPixelsInPlane
MonitorElement * trailingEdgeCumulative_te
void planeName(std::string &name, NameFlag flag=nFull) const
edm::ESGetToken< CTPPSGeometry, VeryForwardRealGeometryRecord > ctppsGeometryEventToken_
edm::EDGetTokenT< edm::DetSetVector< CTPPSDiamondLocalTrack > > tokenDiamondTrack_
Event setup record containing the real (actual) geometry information.
static std::string to_string(const XMLCh *ch)
MonitorElement * trackTimeVsBXProfile
MonitorElement * leadingWithoutTrailingCumulativePot
edm::EDGetTokenT< edm::DetSetVector< CTPPSPixelLocalTrack > > tokenPixelTrack_
void globalEndLuminosityBlock(const edm::LuminosityBlock &, const edm::EventSetup &) override
static constexpr unsigned short HPTDC_0_CHANNEL
void dqmEndRun(edm::Run const &, edm::EventSetup const &) override
std::unordered_map< unsigned int, MonitorElement * > pixelTomographyAll
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
T getUntrackedParameter(std::string const &, T const &) const
static std::string hptdcErrorName(const unsigned short id)
std::vector< std::pair< edm::EventRange, int > > runParameters_
MonitorElement * hitDistribution2d
MonitorElement * EfficiencyOfChannelsInPot
MonitorElement * hitProfile
MonitorElement * recHitTime
edm::EDGetTokenT< edm::DetSetVector< CTPPSDiamondDigi > > tokenDigi_
void rpName(std::string &name, NameFlag flag=nFull) const
void bookHistograms(DQMStore::IBooker &, const edm::Run &, const edm::EventSetup &) override
MonitorElement * bookProfile(TString const &name, TString const &title, int nchX, double lowX, double highX, int, double lowY, double highY, char const *option="s", FUNC onbooking=NOOP())
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
std::unordered_map< unsigned int, ChannelPlots > channelPlots_
edm::EDGetTokenT< edm::DetSetVector< TotemVFATStatus > > tokenStatus_
static constexpr unsigned short CHANNEL_OF_VFAT_CLOCK
Channel ID of the VFAT that contains clock data.
MonitorElement * pixelTomography_far
Abs< T >::type abs(const T &t)
static constexpr unsigned int FIRST_RUN_W_PIXELS
Number of OOT indices monitored.
std::unordered_map< unsigned int, std::unique_ptr< TH2F > > hitDistribution2dMap
plots related to one Diamond channel
bool errorId(unsigned short id) const
void armName(std::string &name, NameFlag flag=nFull) const
#define DEFINE_FWK_MODULE(type)
def window(xmin, xmax, ymin, ymax, x=0, y=0, width=100, height=100, xlogbase=None, ylogbase=None, minusInfinity=-1000, flipx=False, flipy=True)
MonitorElement * leadingEdgeCumulativePerPlane_both
MonitorElement * pixelTomography_far
MonitorElement * hitDistribution2d_lumisection
bool insert(Storage &iStorage, ItemType *iItem, const IdTag &iIdTag)
const DiamondDimensions & getDiamondDimensions() const
virtual void setBinLabel(int bin, const std::string &label, int axis=1)
set bin label for x, y or z axis (axis=1, 2, 3 respectively)
void channelName(std::string &name, NameFlag flag=nFull) const
static bool check(unsigned int raw)
returns true if the raw ID is a PPS-timing one
const bool extract_digi_info_
The manager class for TOTEM RP geometry.
MonitorElement * trackDistribution
static constexpr unsigned short CTPPS_DIAMOND_CYL_STATION_ID
std::unordered_map< unsigned int, SectorPlots > sectorPlots_
MonitorElement * hit_multiplicity
unsigned int TrailingOnlyCounter
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, FUNC onbooking=NOOP())
MonitorElement * HPTDCErrorFlags_2D
std::unordered_map< unsigned int, MonitorElement * > activity_per_bx
MonitorElement * leadingEdgeCumulative_both
bool channelAlignedWithTrack(const CTPPSGeometry *geom, const CTPPSDiamondDetId &detid, const CTPPSDiamondLocalTrack &localTrack, const float tolerance=1)
MonitorElement * leadingWithoutTrailing
MonitorElement * trackTimeVsBX
std::unordered_map< unsigned int, PotPlots > potPlots_
static constexpr int TIMESLICE_WITHOUT_LEADING
unsigned int TrailingOnlyCounter
void checkEventNumber(const CTPPSDiamondDetId &, const TotemFEDInfo &, const TotemVFATStatus &, PotPlots &, int &) const
static constexpr unsigned short CTPPS_FED_ID_56
unsigned int LeadingOnlyCounter
static constexpr double HPTDC_BIN_WIDTH_NS
ns per HPTDC bin
static constexpr double INV_DISPLAY_RESOLUTION_FOR_HITS_MM
CTPPSDiamondDetId planeId() const
std::map< int, int > effTriplecountingChMap
static unsigned int const shift
Detector ID class for CTPPS Timing Diamond detectors. Bits [19:31] : Assigend in CTPPSDetId Calss Bit...
std::unordered_map< unsigned int, PlanePlots > planePlots_
MonitorElement * trackDistributionOOT
plots related to one sector
MonitorElement * hitDistribution2dOOT_le
std::unordered_map< unsigned int, MonitorElement * > activity_per_bx
bool excludeMultipleHits_
MonitorElement * recHitTime
static constexpr unsigned short CTPPS_PIXEL_FAR_RP_ID
MonitorElement * hitDistribution2dOOT
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
MonitorElement * leadingEdgeCumulative_both
static constexpr unsigned short HPTDC_1_CHANNEL
MonitorElement * trackCorrelation
std::unordered_map< unsigned int, unsigned long > hitsCounterMap
MonitorElement * hit_rate
Log< level::Error, true > LogProblem
unsigned int trackCorrelationThreshold_
MonitorElement * activePlanesInclusive