174 unsigned int windowsNum,
262 trackCorrelation = ibooker.
book2D(
"tracks correlation near-far",
263 title +
" tracks correlation near-far;x (mm);x (mm)",
270 trackCorrelationLowMultiplicity =
271 ibooker.
book2D(
"tracks correlation with low multiplicity near-far",
272 title +
" tracks correlation with low multiplicity near-far;x (mm);x (mm)",
284 unsigned int windowsNum,
290 LeadingOnlyCounter(0),
291 TrailingOnlyCounter(0),
293 pixelTracksMap(
"Pixel track maps for efficiency",
"Pixel track maps for efficiency", 25, 0, 25, 12, -2, 10) {
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);
365 for (
unsigned int i = 0;
i < windowsNum;
i++) {
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 +
" tomography with pixel;x + 25 OOT (mm);y (mm)",
525 ibooker.
book2D(
"Efficiency wrt pixels",
title +
" Efficiency wrt pixels;x (mm);y (mm)", 25, 0, 25, 12, -2, 10);
531 : HitCounter(0), MHCounter(0), LeadingOnlyCounter(0), TrailingOnlyCounter(0), CompleteCounter(0) {
543 for (
unsigned int i = 0;
i < windowsNum;
i++) {
546 "activity per BX " +
window,
title +
" Activity per BX " +
window +
" ns;Event.BX", 3600, -1.5, 3598. + 0.5);
550 for (
unsigned short error_index = 1; error_index < 16; ++error_index)
555 title +
" leading edge (recHits); leading edge (ns)",
560 "leading edge (le only)",
title +
" leading edge (DIGIs); leading edge (ns)", 25 * windowsNum, 0, 25 * windowsNum);
562 title +
" trailing edge (te only) (DIGIs); trailing edge (ns)",
567 ibooker.
book1D(
"time over threshold",
title +
" time over threshold;time over threshold (ns)", 75, -25, 50);
579 "tomography pixel",
"tomography with pixel;x + 25 OOT (mm);y (mm)", 25 * windowsNum, 0, 25 * windowsNum, 8, 0, 8);
602 verbosity_(ps.getUntrackedParameter<unsigned
int>(
"verbosity", 0)),
605 windowsNum_(ps.getUntrackedParameter<unsigned
int>(
"windowsNum", 3)),
614 for (
const auto&
pset : ps.
getParameter<std::vector<edm::ParameterSet>>(
"offsetsOOT")) {
633 for (
auto it =
geom.beginRP(); it !=
geom.endRP(); ++it)
636 const auto diam =
geom.sensor(it->first);
637 diamShifts_[diam_id].global = diam->translation().x() - diam->getDiamondDimensions().xHalfWidth;
640 auto pix =
geom.sensor(pixid);
643 pix->translation().x() - pix->getDiamondDimensions().xHalfWidth -
diamShifts_[diam_id].global - 1.;
658 for (
auto it =
geom.beginSensor(); it !=
geom.endSensor(); ++it) {
686 auto d = std::make_shared<dds::Cache>();
687 d->hitDistribution2dMap.reserve(
potPlots_.size());
690 d->hitDistribution2dMap[
plot.first] = std::make_unique<TH2F>(
691 "hits in planes lumisection",
692 (
std::string(
plot.second.hitDistribution2d_lumisection->getTH2F()->GetTitle()) +
";plane number;x (mm)")
745 <<
"ERROR in CTPPSDiamondDQMSource::analyze > some of the required inputs are not valid. Skipping this " 748 <<
" diamondVFATStatus.isValid = " << diamondVFATStatus.
isValid() <<
"\n" 749 <<
" diamondDigis.isValid = " << diamondDigis.
isValid() <<
"\n" 750 <<
" fedInfo.isValid = " << fedInfo.
isValid() <<
"\n" 752 <<
" pixelTracks.isValid = " <<
pixelTracks.isValid() <<
"\n" 753 <<
" diamondRecHits.isValid = " << diamondRecHits.
isValid() <<
"\n" 754 <<
" diamondLocalTracks.isValid = " << diamondLocalTracks.
isValid();
763 for (
const auto&
tracks : *diamondLocalTracks) {
767 if (!
track.isValid())
769 if (
potPlots_.count(detId_near.rpId()) == 0)
771 TH1F* trackHistoInTimeTmp =
potPlots_[detId_near.rpId()].trackDistribution->getTH1F();
776 for (
const auto& tracks_far : *diamondLocalTracks) {
778 if (detId_near.arm() != detId_far.arm() || detId_near.station() == detId_far.station())
780 for (
const auto& track_far : tracks_far) {
781 if (!
track.isValid())
785 TH2F* trackHistoTmp =
sectorPlots_[detId_far.armId()].trackCorrelation->getTH2F();
786 TAxis* trackHistoTmpXAxis = trackHistoTmp->GetXaxis();
787 TAxis* trackHistoTmpYAxis = trackHistoTmp->GetYaxis();
788 int startBin_far = trackHistoTmpYAxis->FindBin(track_far.x0() -
diamShifts_[detId_far.rpId()].global -
789 track_far.x0Sigma());
791 for (
int i = 0;
i < numOfBins_near; ++
i)
792 for (
int y = 0;
y < numOfBins_far; ++
y) {
793 trackHistoTmp->Fill(trackHistoTmpXAxis->GetBinCenter(startBin_near +
i),
794 trackHistoTmpYAxis->GetBinCenter(startBin_far +
y));
796 sectorPlots_[detId_far.armId()].trackCorrelationLowMultiplicity->Fill(
797 trackHistoTmpXAxis->GetBinCenter(startBin_near +
i),
798 trackHistoTmpYAxis->GetBinCenter(startBin_far +
y));
815 for (
const auto& digis : *diamondDigis) {
817 for (
const auto& digi : digis) {
823 if (digi.leadingEdge() != 0 || digi.trailingEdge() != 0) {
825 if (digi.leadingEdge() != 0) {
828 if (digi.leadingEdge() != 0 && digi.trailingEdge() == 0) {
829 ++
potPlots_[detId_pot].LeadingOnlyCounter;
832 if (digi.leadingEdge() == 0 && digi.trailingEdge() != 0) {
833 ++
potPlots_[detId_pot].TrailingOnlyCounter;
836 if (digi.leadingEdge() != 0 && digi.trailingEdge() != 0) {
847 int verticalIndex = 2 * detId.plane() + (detId.channel() -
HPTDC_0_CHANNEL);
848 for (
unsigned short hptdcErrorIndex = 1; hptdcErrorIndex < 16; ++hptdcErrorIndex)
849 if (hptdcErrors.
errorId(hptdcErrorIndex - 1))
850 potPlots_[detId_pot].HPTDCErrorFlags_2D->Fill(hptdcErrorIndex, verticalIndex);
852 if (digi.multipleHit())
860 for (
const auto& vfat_status : *diamondVFATStatus) {
862 for (
const auto&
status : vfat_status) {
871 for (
const auto& optorx : *fedInfo) {
882 std::unordered_map<unsigned int, std::set<unsigned int>> planes;
883 std::unordered_map<unsigned int, std::set<unsigned int>> planes_inclusive;
885 auto lumiCache = luminosityBlockCache(
event.getLuminosityBlock().index());
886 for (
const auto&
rechits : *diamondRecHits) {
890 for (
const auto& rechit :
rechits) {
891 planes_inclusive[detId_pot].insert(detId.plane());
895 planes[detId_pot].
insert(detId.plane());
900 potPlots_[detId_pot].recHitTime->Fill(rechit.time());
902 float UFSDShift = 0.0;
903 if (rechit.yWidth() < 3)
907 TH2F* hitHistoTmp =
potPlots_[detId_pot].hitDistribution2d->getTH2F();
908 TAxis* hitHistoTmpYAxis = hitHistoTmp->GetYaxis();
909 int startBin = hitHistoTmpYAxis->FindBin(rechit.x() - x_shift.global - 0.5 * rechit.xWidth());
911 for (
int i = 0;
i < numOfBins; ++
i)
912 hitHistoTmp->Fill(detId.plane() + UFSDShift, hitHistoTmpYAxis->GetBinCenter(startBin +
i));
915 hitHistoTmp = lumiCache->hitDistribution2dMap[detId_pot].get();
916 hitHistoTmpYAxis = hitHistoTmp->GetYaxis();
917 startBin = hitHistoTmpYAxis->FindBin(rechit.x() - x_shift.global - 0.5 * rechit.xWidth());
919 for (
int i = 0;
i < numOfBins; ++
i)
920 hitHistoTmp->Fill(detId.plane() + UFSDShift, hitHistoTmpYAxis->GetBinCenter(startBin +
i));
924 if (rechit.toT() > 0) {
926 potPlots_[detId_pot].leadingEdgeCumulative_both->Fill(rechit.time() + 25 * rechit.ootIndex());
927 potPlots_[detId_pot].timeOverThresholdCumulativePot->Fill(rechit.toT());
929 TH2F* hitHistoOOTTmp =
potPlots_[detId_pot].hitDistribution2dOOT->getTH2F();
930 TAxis* hitHistoOOTTmpYAxis = hitHistoOOTTmp->GetYaxis();
931 int startBin = hitHistoOOTTmpYAxis->FindBin(rechit.x() - x_shift.global - 0.5 * rechit.xWidth());
933 for (
int i = 0;
i < numOfBins; ++
i)
934 hitHistoOOTTmp->Fill(detId.plane() + 1. /
windowsNum_ * rechit.ootIndex(),
935 hitHistoOOTTmpYAxis->GetBinCenter(startBin +
i));
939 TH2F* hitHistoOOTTmp =
potPlots_[detId_pot].hitDistribution2dOOT_le->getTH2F();
940 TAxis* hitHistoOOTTmpYAxis = hitHistoOOTTmp->GetYaxis();
941 int startBin = hitHistoOOTTmpYAxis->FindBin(rechit.x() - x_shift.global - 0.5 * rechit.xWidth());
943 for (
int i = 0;
i < numOfBins; ++
i)
944 hitHistoOOTTmp->Fill(detId.plane() + 1. /
windowsNum_ * rechit.ootIndex(),
945 hitHistoOOTTmpYAxis->GetBinCenter(startBin +
i));
948 potPlots_[detId_pot].activity_per_bx.count(rechit.ootIndex()) > 0)
949 potPlots_[detId_pot].activity_per_bx.at(rechit.ootIndex())->
Fill(
event.bunchCrossing());
957 plt.second.activePlanes->Fill(planes[plt.first].size());
959 plt.second.activePlanesInclusive->Fill(planes_inclusive[plt.first].size());
963 for (
const auto&
tracks : *diamondLocalTracks) {
968 if (!
track.isValid())
977 TH2F* trackHistoOOTTmp =
potPlots_[detId_pot].trackDistributionOOT->getTH2F();
978 TAxis* trackHistoOOTTmpYAxis = trackHistoOOTTmp->GetYaxis();
979 int startBin = trackHistoOOTTmpYAxis->FindBin(
track.x0() - x_shift.global -
track.x0Sigma());
981 for (
int i = 0;
i < numOfBins; ++
i)
982 trackHistoOOTTmp->Fill(
track.ootIndex(), trackHistoOOTTmpYAxis->GetBinCenter(startBin +
i));
985 TH1F* trackHistoInTimeTmp =
potPlots_[detId_pot].trackDistribution->getTH1F();
986 int startBin = trackHistoInTimeTmp->FindBin(
track.x0() - x_shift.global -
track.x0Sigma());
988 for (
int i = 0;
i < numOfBins; ++
i)
989 trackHistoInTimeTmp->Fill(trackHistoInTimeTmp->GetBinCenter(startBin +
i));
1000 for (
const auto&
tracks : *diamondLocalTracks) {
1005 std::set<int> planesInTrackSet;
1006 for (
const auto& vec : *diamondRecHits) {
1008 if (detid.arm() != detId_pot.arm())
1011 for (
const auto&
hit : vec) {
1015 planesInTrackSet.insert(detid.plane());
1020 if (numOfHits > 0 && numOfHits <= 10 && planesInTrackSet.size() > 2) {
1023 if (detId.
rpId() != detId_pot)
1025 const unsigned short map_index = detId.
plane() * 100 + detId.
channel();
1026 if (
potPlots_[detId_pot].effDoublecountingChMap.count(map_index) == 0) {
1027 potPlots_[detId_pot].effTriplecountingChMap[map_index] = 0;
1028 potPlots_[detId_pot].effDoublecountingChMap[map_index] = 0;
1032 ++
potPlots_[detId_pot].effDoublecountingChMap[map_index];
1033 for (
const auto&
rechits : *diamondRecHits) {
1035 if (detId_hit == detId)
1036 for (
const auto& rechit :
rechits)
1037 if (
track.containsHit(rechit, 1))
1038 ++
potPlots_[detId_pot].effTriplecountingChMap[map_index];
1047 for (
const auto&
rechits : *diamondRecHits) {
1049 const auto pix_shift =
diamShifts_.at(detId_pot).withPixels;
1050 for (
const auto& rechit :
rechits) {
1053 if (rechit.toT() == 0)
1066 for (
const auto& lt : ds) {
1067 if (lt.isValid() && pixId.arm() == detId_pot.arm()) {
1069 potPlots_[detId_pot].pixelTomographyAll.count(rechit.ootIndex()) > 0 && lt.x0() - pix_shift < 24)
1071 .pixelTomographyAll.at(rechit.ootIndex())
1072 ->
Fill(lt.x0() - pix_shift + 25 * detId.plane(), lt.y0());
1106 std::unordered_map<unsigned int, unsigned int> channelsPerPlane;
1108 for (
const auto& digis : *diamondDigis) {
1110 for (
const auto& digi : digis) {
1116 if (digi.leadingEdge() != 0) {
1117 planePlots_[detId_plane].digiProfileCumulativePerPlane->Fill(detId.channel());
1118 channelsPerPlane[detId_plane]++;
1124 for (
const auto& plt : channelsPerPlane)
1125 planePlots_[plt.first].hit_multiplicity->Fill(plt.second);
1128 for (
const auto&
rechits : *diamondRecHits) {
1130 for (
const auto& rechit :
rechits) {
1133 if (rechit.toT() == 0)
1137 TH1F* hitHistoTmp =
planePlots_[detId_plane].hitProfile->getTH1F();
1138 int startBin = hitHistoTmp->FindBin(rechit.x() -
diamShifts_.at(detId_pot).global - 0.5 * rechit.xWidth());
1140 for (
int i = 0;
i < numOfBins; ++
i)
1141 hitHistoTmp->Fill(hitHistoTmp->GetBinCenter(startBin +
i));
1154 for (
const auto& lt : ds) {
1158 const auto&
shift = sh_vs_id.second;
1159 if (detId_pot.
arm() == pixId.arm())
1161 potPlots_[detId_pot].pixelTracksMap.Fill(lt.x0() -
shift.withPixels, lt.y0());
1164 std::set<CTPPSDiamondDetId> planesWitHits_set;
1165 for (
const auto&
rechits : *diamondRecHits) {
1167 const auto pix_shift =
diamShifts_.at(detId_pot).withPixels;
1168 for (
const auto& rechit :
rechits) {
1175 if (pixId.arm() == detId_plane.arm() && lt.x0() - pix_shift < 24) {
1176 planePlots_[detId_plane].pixelTomography_far->Fill(lt.x0() - pix_shift + 25 * rechit.ootIndex(), lt.y0());
1178 planesWitHits_set.insert(detId_plane);
1183 for (
auto& planeId : planesWitHits_set)
1184 planePlots_[planeId].pixelTracksMapWithDiamonds.Fill(lt.x0() -
diamShifts_.at(planeId.rpId()).withPixels,
1196 for (
const auto& digis : *diamondDigis) {
1198 for (
const auto& digi : digis) {
1204 for (
unsigned short hptdcErrorIndex = 1; hptdcErrorIndex < 16; ++hptdcErrorIndex)
1205 if (hptdcErrors.
errorId(hptdcErrorIndex - 1))
1207 if (digi.multipleHit())
1211 if (digi.leadingEdge() != 0 || digi.trailingEdge() != 0) {
1213 if (digi.trailingEdge() == 0) {
1216 }
else if (digi.leadingEdge() == 0) {
1232 for (
const auto&
rechits : *diamondRecHits) {
1234 for (
const auto& rechit :
rechits) {
1240 channelPlots_[detId].leadingEdgeCumulative_both->Fill(rechit.time() + 25 * rechit.ootIndex());
1241 channelPlots_[detId].TimeOverThresholdCumulativePerChannel->Fill(rechit.toT());
1243 ++lumiCache->hitsCounterMap[detId];
1246 channelPlots_[detId].activity_per_bx.count(rechit.ootIndex()) > 0)
1253 for (
const auto&
rechits : *diamondRecHits) {
1255 const auto shift_pix =
diamShifts_.at(detId_pot).withPixels;
1256 for (
const auto& rechit :
rechits) {
1272 for (
const auto& lt : ds) {
1273 if (lt.isValid() && pixId.arm() == detId.arm() && lt.x0() - shift_pix < 24)
1274 channelPlots_[detId].pixelTomography_far->Fill(lt.x0() - shift_pix + 25 * rechit.ootIndex(), lt.y0());
1284 auto lumiCache = luminosityBlockCache(iLumi.
index());
1288 *(
plot.second.hitDistribution2d_lumisection->getTH2F()) = *(lumiCache->hitDistribution2dMap[
plot.first]);
1291 auto hitsCounterPerLumisection = lumiCache->hitsCounterMap[
plot.first];
1292 if (hitsCounterPerLumisection != 0) {
1296 double HundredOverHitCounter = .0;
1297 if (
plot.second.HitCounter != 0)
1298 HundredOverHitCounter = 100. /
plot.second.HitCounter;
1299 plot.second.HPTDCErrorFlags->setBinContent(16, HundredOverHitCounter *
plot.second.MHCounter);
1300 plot.second.leadingWithoutTrailing->setBinContent(1, HundredOverHitCounter *
plot.second.LeadingOnlyCounter);
1301 plot.second.leadingWithoutTrailing->setBinContent(2, HundredOverHitCounter *
plot.second.TrailingOnlyCounter);
1302 plot.second.leadingWithoutTrailing->setBinContent(3, HundredOverHitCounter *
plot.second.CompleteCounter);
1306 double HundredOverHitCounterPot = 0.;
1307 if (
plot.second.HitCounter != 0)
1308 HundredOverHitCounterPot = 100. /
plot.second.HitCounter;
1309 plot.second.leadingWithoutTrailingCumulativePot->setBinContent(
1310 1, HundredOverHitCounterPot *
plot.second.LeadingOnlyCounter);
1311 plot.second.leadingWithoutTrailingCumulativePot->setBinContent(
1312 2, HundredOverHitCounterPot *
plot.second.TrailingOnlyCounter);
1313 plot.second.leadingWithoutTrailingCumulativePot->setBinContent(
1314 3, HundredOverHitCounterPot *
plot.second.CompleteCounter);
1316 plot.second.MHComprensive->Reset();
1320 if (chId.
arm() == rpId.
arm() && chId.
rp() == rpId.
rp()) {
1321 plot.second.MHComprensive->Fill(
1322 chId.
plane(), chId.
channel(), chPlot.second.HPTDCErrorFlags->getBinContent(16));
1329 plot.second.EfficiencyOfChannelsInPot->Reset();
1330 for (
auto& element :
plot.second.effTriplecountingChMap) {
1331 if (
plot.second.effDoublecountingChMap[element.first] > 0) {
1332 int plane = element.first / 100;
1333 int channel = element.first % 100;
1334 double counted = element.second;
1335 double total =
plot.second.effDoublecountingChMap[element.first];
1339 plot.second.EfficiencyOfChannelsInPot->Fill(plane, channel, 100 *
efficiency);
1346 TH2F* hitHistoTmp =
plot.second.EfficiencyWRTPixelsInPlane->getTH2F();
1349 hitHistoTmp->Divide(&(
plot.second.pixelTracksMapWithDiamonds), &(
potPlots_[detId_pot].pixelTracksMap));
1360 int& EC_difference)
const {
1363 plots.ECCheck->Fill((
int)((optorx.
lv1() & 0xFF) - ((
unsigned int)
status.ec() & 0xFF)) & 0xFF);
1364 if ((static_cast<int>((optorx.
lv1() & 0xFF) -
status.ec()) != EC_difference) &&
1365 (
static_cast<uint8_t
>((optorx.
lv1() & 0xFF) -
status.ec()) < 128))
1366 EC_difference = static_cast<int>(optorx.
lv1() & 0xFF) - (static_cast<unsigned int>(
status.ec()) & 0xFF);
1367 if (EC_difference != 1 && EC_difference != -500 &&
std::abs(EC_difference) < 127) {
1372 <<
"FED " << optorx.
fedId() <<
": ECError at EV: 0x" << std::hex << optorx.
lv1() <<
"\t\tVFAT EC: 0x" 1373 <<
static_cast<unsigned int>(
status.ec()) <<
"\twith ID: " <<
std::dec << detId
1374 <<
"\tdiff: " << EC_difference;
1383 auto plots = rpPlots.second;
1386 *(
plots.trackTimeVsBXProfile->getTProfile()) = *
plots.trackTimeVsBX->getTH2F()->ProfileX();
void analyze(const edm::Event &, const edm::EventSetup &) override
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
bool contains(EventRange const &lh, EventID const &rh)
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)
static constexpr unsigned short CTPPS_FAR_RP_ID
MonitorElement * leadingEdgeCumulative_le
Reconstructed hit in diamond detectors.
#define DEFINE_FWK_MODULE(type)
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::string to_string(const V &value)
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.
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)
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
def window(xmin, xmax, ymin, ymax, x=0, y=0, width=100, height=100, xlogbase=None, ylogbase=None, minusInfinity=-1000, flipx=False, flipy=True)
bool getData(T &iHolder) const
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
auto const & tracks
cannot be loose
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
LuminosityBlockIndex index() const
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
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