157 return clu1.
id() == clu2.
id() && clu1.
size() == clu2.
size() && clu1.
x() == clu2.
x() && clu1.
y() == clu2.
y() &&
164 hitMinEnergy2Dis_(iConfig.getParameter<double>(
"hitMinimumEnergy2Dis")),
165 optionalPlots_(iConfig.getParameter<
bool>(
"optionalPlots")),
166 uncalibRecHitsPlots_(iConfig.getParameter<
bool>(
"UncalibRecHitsPlots")),
167 hitMinAmplitude_(iConfig.getParameter<double>(
"HitMinimumAmplitude")),
207 for (
const auto&
hits : *mtdTrkHitHandle) {
208 if (
MTDDetId(
hits.id()).mtdSubDetector() == MTDDetId::MTDType::ETL) {
209 LogDebug(
"EtlLocalRecoValidation") <<
"MTD cluster DetId " <<
hits.id() <<
" # cluster " <<
hits.size();
212 <<
"MTD_TRH: " <<
hit.localPosition().
x() <<
"," <<
hit.localPosition().
y() <<
" : " 213 <<
hit.localPositionError().xx() <<
"," <<
hit.localPositionError().yy() <<
" : " <<
hit.time() <<
" : " 221 std::unordered_map<mtd_digitizer::MTDCellId, MTDHit> m_etlSimHits[4];
222 for (
auto const&
simHit : etlSimHits) {
231 if ((
id.
zside() == -1) && (
id.nDisc() == 1)) {
233 }
else if ((
id.
zside() == -1) && (
id.nDisc() == 2)) {
235 }
else if ((
id.
zside() == 1) && (
id.nDisc() == 1)) {
237 }
else if ((
id.
zside() == 1) && (
id.nDisc() == 2)) {
240 edm::LogWarning(
"EtlLocalRecoValidation") <<
"Unknown ETL DetId configuration: " <<
id;
250 auto simHitIt = m_etlSimHits[idet].emplace(pixelId,
MTDHit()).first;
256 if ((simHitIt->second).time == 0 ||
simHit.tof() < (simHitIt->second).
time) {
259 auto hit_pos =
simHit.localPosition();
260 (simHitIt->second).
x = hit_pos.x();
261 (simHitIt->second).
y = hit_pos.y();
262 (simHitIt->second).
z = hit_pos.z();
268 unsigned int n_reco_etl[4] = {0, 0, 0, 0};
269 for (
const auto&
recHit : *etlRecHitsHandle) {
274 if (thedet ==
nullptr)
275 throw cms::Exception(
"EtlLocalRecoValidation") <<
"GeographicalID: " << std::hex << geoId.
rawId() <<
" (" 276 <<
detId.rawId() <<
") is invalid!" <<
std::dec << std::endl;
281 const auto& global_point = thedet->
toGlobal(local_point);
285 if (
detId.discSide() == 1) {
288 if ((
detId.zside() == -1) && (
detId.nDisc() == 1)) {
290 }
else if ((
detId.zside() == -1) && (
detId.nDisc() == 2)) {
292 }
else if ((
detId.zside() == 1) && (
detId.nDisc() == 1)) {
294 }
else if ((
detId.zside() == 1) && (
detId.nDisc() == 2)) {
306 if ((idet == 0) || (idet == 1)) {
310 if ((idet == 2) || (idet == 3)) {
317 if ((idet == 0) || (idet == 1)) {
320 if ((idet == 2) || (idet == 3)) {
336 if (m_etlSimHits[idet].
count(pixelId) == 1) {
338 float time_res =
recHit.time() - m_etlSimHits[idet][pixelId].time;
350 for (
int i = 0;
i < 4;
i++) {
357 for (
const auto& DetSetClu : *etlRecCluHandle) {
358 for (
const auto& cluster : DetSetClu) {
361 DetId detIdObject(cluId);
362 const auto& genericDet =
geom->idToDetUnit(detIdObject);
363 if (genericDet ==
nullptr) {
365 <<
"GeographicalID: " << std::hex << cluId <<
" is invalid!" <<
std::dec << std::endl;
372 const auto& global_point = genericDet->toGlobal(local_point);
379 if ((cluId.
zside() == -1) && (cluId.
nDisc() == 1)) {
381 }
else if ((cluId.
zside() == -1) && (cluId.
nDisc() == 2)) {
383 }
else if ((cluId.
zside() == 1) && (cluId.
nDisc() == 1)) {
385 }
else if ((cluId.
zside() == 1) && (cluId.
nDisc() == 2)) {
388 edm::LogWarning(
"EtlLocalRecoValidation") <<
"Unknown ETL DetId configuration: " << cluId;
393 LogDebug(
"EtlLocalRecoValidation") <<
"Cluster # " <<
index <<
" DetId " << cluId.
rawId() <<
" idet " << idet;
407 double cluEneSIM = 0.;
408 double cluTimeSIM = 0.;
409 double cluLocXSIM = 0.;
410 double cluLocYSIM = 0.;
411 double cluLocZSIM = 0.;
413 for (
int ihit = 0; ihit < cluster.size(); ++ihit) {
414 int hit_row = cluster.minHitRow() + cluster.hitOffset()[ihit * 2];
415 int hit_col = cluster.minHitCol() + cluster.hitOffset()[ihit * 2 + 1];
418 for (
const auto&
recHit : *etlRecHitsHandle) {
431 if (m_etlSimHits[idet].
count(pixelId) == 0)
440 if (
recHit.time() != cluster.hitTIME()[ihit])
449 cluLocXSIM += local_point_sim.
x() * m_etlSimHits[idet][pixelId].energy;
450 cluLocYSIM += local_point_sim.
y() * m_etlSimHits[idet][pixelId].energy;
451 cluLocZSIM += local_point_sim.
z() * m_etlSimHits[idet][pixelId].energy;
454 cluEneSIM += m_etlSimHits[idet][pixelId].energy;
455 cluTimeSIM += m_etlSimHits[idet][pixelId].time * m_etlSimHits[idet][pixelId].energy;
465 bool matchClu =
false;
466 const auto& trkHits = (*mtdTrkHitHandle)[detIdObject];
467 for (
const auto& trkHit : trkHits) {
469 comp = trkHit.clone();
476 <<
"No valid TrackingRecHit corresponding to cluster, detId = " << detIdObject.
rawId();
480 int iside = (cluId.
zside() == -1 ? 0 : 1);
481 if (cluTimeSIM > 0. && cluEneSIM > 0.) {
482 cluTimeSIM /= cluEneSIM;
484 Local3DPoint cluLocalPosSIM(cluLocXSIM / cluEneSIM, cluLocYSIM / cluEneSIM, cluLocZSIM / cluEneSIM);
485 const auto& cluGlobalPosSIM = genericDet->toGlobal(cluLocalPosSIM);
487 float time_res = cluster.time() - cluTimeSIM;
488 float x_res = global_point.x() - cluGlobalPosSIM.x();
489 float y_res = global_point.y() - cluGlobalPosSIM.y();
490 float z_res = global_point.z() - cluGlobalPosSIM.z();
500 if (matchClu &&
comp !=
nullptr) {
515 auto itp = r2sAssociationMap.equal_range(clusterRef);
516 if (itp.first != itp.second) {
517 std::vector<MtdSimLayerClusterRef> simClustersRefs =
519 for (
unsigned int i = 0;
i < simClustersRefs.size();
i++) {
520 auto simClusterRef = simClustersRefs[
i];
522 float simClusEnergy =
convertUnitsTo(0.001_MeV, (*simClusterRef).simLCEnergy());
523 float simClusTime = (*simClusterRef).simLCTime();
524 LocalPoint simClusLocalPos = (*simClusterRef).simLCPos();
525 const auto& simClusGlobalPos = genericDet->toGlobal(simClusLocalPos);
527 float time_res = cluster.time() - simClusTime;
528 float x_res = global_point.
x() - simClusGlobalPos.x();
529 float y_res = global_point.y() - simClusGlobalPos.y();
530 float z_res = global_point.z() - simClusGlobalPos.z();
540 if (matchClu &&
comp !=
nullptr) {
559 for (
const auto& uRecHit : *etlUncalibRecHitsHandle) {
569 const auto& global_point = thedet->
toGlobal(local_point);
575 if (m_etlSimHits[idet].
count(pixelId) == 0)
578 if (thedet ==
nullptr)
579 throw cms::Exception(
"EtlLocalRecoValidation") <<
"GeographicalID: " << std::hex << geoId.
rawId() <<
" (" 580 <<
detId.rawId() <<
") is invalid!" <<
std::dec << std::endl;
587 float time_res = uRecHit.time().first - m_etlSimHits[idet][pixelId].time;
589 int iside = (
detId.zside() == -1 ? 0 : 1);
622 "Number of ETL RECO hits (-Z, Single(topo1D)/First(topo2D) disk);log_10(N_{RECO})",
627 ibook.
book1D(
"EtlNhitsZnegD2",
"Number of ETL RECO hits (-Z, Second disk);log_10(N_{RECO})", 100, 0., 5.25);
629 "Number of ETL RECO hits (+Z, Single(topo1D)/First(topo2D) disk);log_10(N_{RECO})",
634 ibook.
book1D(
"EtlNhitsZposD2",
"Number of ETL RECO hits (+Z, Second disk);log_10(N_{RECO})", 100, 0., 5.25);
636 "EtlHitTimeZnegD1",
"ETL RECO hits ToA (-Z, Single(topo1D)/First(topo2D) disk);ToA_{RECO} [ns]", 100, 0., 25.);
637 meHitTime_[1] = ibook.
book1D(
"EtlHitTimeZnegD2",
"ETL RECO hits ToA (-Z, Second disk);ToA_{RECO} [ns]", 100, 0., 25.);
639 "EtlHitTimeZposD1",
"ETL RECO hits ToA (+Z, Single(topo1D)/First(topo2D) disk);ToA_{RECO} [ns]", 100, 0., 25.);
640 meHitTime_[3] = ibook.
book1D(
"EtlHitTimeZposD2",
"ETL RECO hits ToA (+Z, Second disk);ToA_{RECO} [ns]", 100, 0., 25.);
642 ibook.
book1D(
"EtlHitTimeErrorZnegD1",
643 "ETL RECO hits ToA error (-Z, Single(topo1D)/First(topo2D) disk);#sigma^{ToA}_{RECO} [ns]",
648 "EtlHitTimeErrorZnegD2",
"ETL RECO hits ToA error(-Z, Second disk);#sigma^{ToA}_{RECO} [ns]", 50, 0., 0.1);
650 ibook.
book1D(
"EtlHitTimeErrorZposD1",
651 "ETL RECO hits ToA error (+Z, Single(topo1D)/First(topo2D) disk);#sigma^{ToA}_{RECO} [ns]",
656 "EtlHitTimeErrorZposD2",
"ETL RECO hits ToA error(+Z, Second disk);#sigma^{ToA}_{RECO} [ns]", 50, 0., 0.1);
660 ibook.
book2D(
"EtlOccupancyZnegD1",
661 "ETL RECO hits occupancy (-Z, Single(topo1D)/First(topo2D) disk);X_{RECO} [cm];Y_{RECO} [cm]",
669 "ETL RECO hits occupancy (-Z, Second disk);X_{RECO} [cm];Y_{RECO} [cm]",
677 ibook.
book2D(
"EtlOccupancyZposD1",
678 "ETL RECO hits occupancy (+Z, Single(topo1D)/First(topo2D) disk);X_{RECO} [cm];Y_{RECO} [cm]",
686 "ETL RECO hits occupancy (+Z, Second disk);X_{RECO} [cm];Y_{RECO} [cm]",
694 "ETL RECO hits local occupancy (-Z);X_{RECO} [cm];Y_{RECO} [cm]",
702 "ETL RECO hits local occupancy (+Z);X_{RECO} [cm];Y_{RECO} [cm]",
710 meHitXlocal_[0] = ibook.
book1D(
"EtlHitXlocalZneg",
"ETL RECO local X (-Z);X_{RECO}^{LOC} [cm]", 100, -2.2, 2.2);
711 meHitXlocal_[1] = ibook.
book1D(
"EtlHitXlocalZpos",
"ETL RECO local X (+Z);X_{RECO}^{LOC} [cm]", 100, -2.2, 2.2);
712 meHitYlocal_[0] = ibook.
book1D(
"EtlHitYlocalZneg",
"ETL RECO local Y (-Z);Y_{RECO}^{LOC} [cm]", 50, -1.1, 1.1);
713 meHitYlocal_[1] = ibook.
book1D(
"EtlHitYlocalZpos",
"ETL RECO local Y (-Z);Y_{RECO}^{LOC} [cm]", 50, -1.1, 1.1);
715 "EtlHitXZnegD1",
"ETL RECO hits X (-Z, Single(topo1D)/First(topo2D) Disk);X_{RECO} [cm]", 100, -130., 130.);
716 meHitX_[1] = ibook.
book1D(
"EtlHitXZnegD2",
"ETL RECO hits X (-Z, Second Disk);X_{RECO} [cm]", 100, -130., 130.);
718 "EtlHitXZposD1",
"ETL RECO hits X (+Z, Single(topo1D)/First(topo2D) Disk);X_{RECO} [cm]", 100, -130., 130.);
719 meHitX_[3] = ibook.
book1D(
"EtlHitXZposD2",
"ETL RECO hits X (+Z, Second Disk);X_{RECO} [cm]", 100, -130., 130.);
721 "EtlHitYZnegD1",
"ETL RECO hits Y (-Z, Single(topo1D)/First(topo2D) Disk);Y_{RECO} [cm]", 100, -130., 130.);
722 meHitY_[1] = ibook.
book1D(
"EtlHitYZnegD2",
"ETL RECO hits Y (-Z, Second Disk);Y_{RECO} [cm]", 100, -130., 130.);
724 "EtlHitYZposD1",
"ETL RECO hits Y (+Z, Single(topo1D)/First(topo2D) Disk);Y_{RECO} [cm]", 100, -130., 130.);
725 meHitY_[3] = ibook.
book1D(
"EtlHitYZposD2",
"ETL RECO hits Y (+Z, Second Disk);Y_{RECO} [cm]", 100, -130., 130.);
727 "EtlHitZZnegD1",
"ETL RECO hits Z (-Z, Single(topo1D)/First(topo2D) Disk);Z_{RECO} [cm]", 100, -302., -298.);
728 meHitZ_[1] = ibook.
book1D(
"EtlHitZZnegD2",
"ETL RECO hits Z (-Z, Second Disk);Z_{RECO} [cm]", 100, -304., -300.);
730 "EtlHitZZposD1",
"ETL RECO hits Z (+Z, Single(topo1D)/First(topo2D) Disk);Z_{RECO} [cm]", 100, 298., 302.);
731 meHitZ_[3] = ibook.
book1D(
"EtlHitZZposD2",
"ETL RECO hits Z (+Z, Second Disk);Z_{RECO} [cm]", 100, 300., 304.);
733 "EtlHitPhiZnegD1",
"ETL RECO hits #phi (-Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad]", 100, -3.2, 3.2);
735 ibook.
book1D(
"EtlHitPhiZnegD2",
"ETL RECO hits #phi (-Z, Second Disk);#phi_{RECO} [rad]", 100, -3.2, 3.2);
737 "EtlHitPhiZposD1",
"ETL RECO hits #phi (+Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad]", 100, -3.2, 3.2);
739 ibook.
book1D(
"EtlHitPhiZposD2",
"ETL RECO hits #phi (+Z, Second Disk);#phi_{RECO} [rad]", 100, -3.2, 3.2);
741 "EtlHitEtaZnegD1",
"ETL RECO hits #eta (-Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO}", 100, -3.2, -1.56);
742 meHitEta_[1] = ibook.
book1D(
"EtlHitEtaZnegD2",
"ETL RECO hits #eta (-Z, Second Disk);#eta_{RECO}", 100, -3.2, -1.56);
744 "EtlHitEtaZposD1",
"ETL RECO hits #eta (+Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO}", 100, 1.56, 3.2);
745 meHitEta_[3] = ibook.
book1D(
"EtlHitEtaZposD2",
"ETL RECO hits #eta (+Z, Second Disk);#eta_{RECO}", 100, 1.56, 3.2);
746 meTimeRes_ = ibook.
book1D(
"EtlTimeRes",
"ETL time resolution;T_{RECO}-T_{SIM}", 100, -0.5, 0.5);
748 "EtlHitTvsPhiZnegD1",
749 "ETL RECO time vs #phi (-Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad];ToA_{RECO} [ns]",
756 "ETL RECO time vs #phi (-Z, Second Disk);#phi_{RECO} [rad];ToA_{RECO} [ns]",
763 "EtlHitTvsPhiZposD1",
764 "ETL RECO time vs #phi (+Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad];ToA_{RECO} [ns]",
771 "ETL RECO time vs #phi (+Z, Second Disk);#phi_{RECO} [rad];ToA_{RECO} [ns]",
779 "ETL RECO time vs #eta (-Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO};ToA_{RECO} [ns]",
786 "ETL RECO time vs #eta (-Z, Second Disk);#eta_{RECO};ToA_{RECO} [ns]",
794 "ETL RECO time vs #eta (+Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO};ToA_{RECO} [ns]",
801 "ETL RECO time vs #eta (+Z, Second Disk);#eta_{RECO};ToA_{RECO} [ns]",
808 "EtlTPullvsE",
"ETL time pull vs E;E_{SIM} [MeV];(T_{RECO}-T_{SIM})/#sigma_{T_{RECO}}", 20, 0., 2., -5., 5.,
"S");
810 "ETL time pull vs #eta;|#eta_{RECO}|;(T_{RECO}-T_{SIM})/#sigma_{T_{RECO}}",
818 ibook.
book1D(
"EtlCluTimeZnegD1",
"ETL cluster ToA (-Z, Single(topo1D)/First(topo2D) Disk);ToA [ns]", 250, 0, 25);
819 meCluTime_[1] = ibook.
book1D(
"EtlCluTimeZnegD2",
"ETL cluster ToA (-Z, Second Disk);ToA [ns]", 250, 0, 25);
821 ibook.
book1D(
"EtlCluTimeZposD1",
"ETL cluster ToA (+Z, Single(topo1D)/First(topo2D) Disk);ToA [ns]", 250, 0, 25);
822 meCluTime_[3] = ibook.
book1D(
"EtlCluTimeZposD2",
"ETL cluster ToA (+Z, Second Disk);ToA [ns]", 250, 0, 25);
824 "ETL cluster time error (-Z, Single(topo1D)/First(topo2D) Disk);#sigma_{t} [ns]",
829 ibook.
book1D(
"EtlCluTimeErrorZnegD2",
"ETL cluster time error (-Z, Second Disk);#sigma_{t} [ns]", 100, 0, 0.1);
831 "ETL cluster time error (+Z, Single(topo1D)/First(topo2D) Disk);#sigma_{t} [ns]",
836 ibook.
book1D(
"EtlCluTimeErrorZposD2",
"ETL cluster time error (+Z, Second Disk);#sigma_{t} [ns]", 100, 0, 0.1);
838 "EtlCluPhiZnegD1",
"ETL cluster #phi (-Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad]", 126, -3.2, 3.2);
840 ibook.
book1D(
"EtlCluPhiZnegD2",
"ETL cluster #phi (-Z, Second Disk);#phi_{RECO} [rad]", 126, -3.2, 3.2);
842 "EtlCluPhiZposD1",
"ETL cluster #phi (+Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad]", 126, -3.2, 3.2);
844 ibook.
book1D(
"EtlCluPhiZposD2",
"ETL cluster #phi (+Z, Second Disk);#phi_{RECO} [rad]", 126, -3.2, 3.2);
846 "EtlCluEtaZnegD1",
"ETL cluster #eta (-Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO}", 100, -3.2, -1.4);
847 meCluEta_[1] = ibook.
book1D(
"EtlCluEtaZnegD2",
"ETL cluster #eta (-Z, Second Disk);#eta_{RECO}", 100, -3.2, -1.4);
849 "EtlCluEtaZposD1",
"ETL cluster #eta (+Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO}", 100, 1.4, 3.2);
850 meCluEta_[3] = ibook.
book1D(
"EtlCluEtaZposD2",
"ETL cluster #eta (+Z, Second Disk);#eta_{RECO}", 100, 1.4, 3.2);
852 "EtlCluHitNumberZnegD1",
"ETL hits per cluster (-Z, Single(topo1D)/First(topo2D) Disk);Cluster size", 5, 0, 5);
853 meCluHits_[1] = ibook.
book1D(
"EtlCluHitNumberZnegD2",
"ETL hits per cluster (-Z, Second Disk);Cluster size", 5, 0, 5);
855 "EtlCluHitNumberZposD1",
"ETL hits per cluster (+Z, Single(topo1D)/First(topo2D) Disk);Cluster size", 5, 0, 5);
856 meCluHits_[3] = ibook.
book1D(
"EtlCluHitNumberZposD2",
"ETL hits per cluster (+Z, Second Disk);Cluster size", 5, 0, 5);
859 ibook.
book1D(
"EtlCluTimeResZneg",
"ETL cluster time resolution (-Z);T_{RECO}-T_{SIM} [ns]", 100, -0.5, 0.5);
861 ibook.
book1D(
"EtlCluTimeResZpos",
"ETL cluster time resolution (+Z);T_{RECO}-T_{SIM} [MeV]", 100, -0.5, 0.5);
865 "ETL cluster time pull vs E (-Z);E_{SIM} [MeV];(T_{RECO}-T_{SIM})/#sigma_{T_{RECO}}",
874 "ETL cluster time pull vs E (+Z);E_{SIM} [MeV];(T_{RECO}-T_{SIM})/#sigma_{T_{RECO}}",
883 "ETL cluster time pull vs #eta (-Z);|#eta_{RECO}|;(T_{RECO}-T_{SIM})/#sigma_{T_{RECO}}",
892 "ETL cluster time pull vs #eta (+Z);|#eta_{RECO}|;(T_{RECO}-T_{SIM})/#sigma_{T_{RECO}}",
899 meCluXRes_[0] = ibook.
book1D(
"EtlCluXResZneg",
"ETL cluster X resolution (-Z);X_{RECO}-X_{SIM} [cm]", 100, -0.1, 0.1);
900 meCluXRes_[1] = ibook.
book1D(
"EtlCluXResZpos",
"ETL cluster X resolution (+Z);X_{RECO}-X_{SIM} [cm]", 100, -0.1, 0.1);
901 meCluYRes_[0] = ibook.
book1D(
"EtlCluYResZneg",
"ETL cluster Y resolution (-Z);Y_{RECO}-Y_{SIM} [cm]", 100, -0.1, 0.1);
902 meCluYRes_[1] = ibook.
book1D(
"EtlCluYResZpos",
"ETL cluster Y resolution (+Z);Y_{RECO}-Y_{SIM} [cm]", 100, -0.1, 0.1);
904 ibook.
book1D(
"EtlCluZResZneg",
"ETL cluster Z resolution (-Z);Z_{RECO}-Z_{SIM} [cm]", 100, -0.003, 0.003);
906 ibook.
book1D(
"EtlCluZResZpos",
"ETL cluster Z resolution (+Z);Z_{RECO}-Z_{SIM} [cm]", 100, -0.003, 0.003);
908 ibook.
book1D(
"EtlCluXPullZneg",
"ETL cluster X pull (-Z);X_{RECO}-X_{SIM}/sigmaX_[RECO] [cm]", 100, -5., 5.);
910 ibook.
book1D(
"EtlCluXPullZpos",
"ETL cluster X pull (+Z);X_{RECO}-X_{SIM}/sigmaX_[RECO] [cm]", 100, -5., 5.);
912 ibook.
book1D(
"EtlCluYPullZneg",
"ETL cluster Y pull (-Z);Y_{RECO}-Y_{SIM}/sigmaY_[RECO] [cm]", 100, -5., 5.);
914 ibook.
book1D(
"EtlCluYPullZpos",
"ETL cluster Y pull (+Z);Y_{RECO}-Y_{SIM}/sigmaY_[RECO] [cm]", 100, -5., 5.);
916 ibook.
book1D(
"EtlCluXLocalErrNeg",
"ETL cluster X local error (-Z);sigmaX_{RECO,loc} [cm]", 50, 0., 0.2);
918 ibook.
book1D(
"EtlCluXLocalErrPos",
"ETL cluster X local error (+Z);sigmaX_{RECO,loc} [cm]", 50, 0., 0.2);
920 ibook.
book1D(
"EtlCluYLocalErrNeg",
"ETL cluster Y local error (-Z);sigmaY_{RECO,loc} [cm]", 50., 0., 0.2);
922 ibook.
book1D(
"EtlCluYLocalErrPos",
"ETL cluster Y local error (+Z);sigmaY_{RECO,loc} [cm]", 50, 0., 0.2);
925 ibook.
book2D(
"EtlCluOccupancyZnegD1",
926 "ETL cluster X vs Y (-Z, Single(topo1D)/First(topo2D) Disk);X_{RECO} [cm]; Y_{RECO} [cm]",
934 "ETL cluster X vs Y (-Z, Second Disk);X_{RECO} [cm]; Y_{RECO} [cm]",
942 ibook.
book2D(
"EtlCluOccupancyZposD1",
943 "ETL cluster X vs Y (+Z, Single(topo1D)/First(topo2D) Disk);X_{RECO} [cm]; Y_{RECO} [cm]",
951 "ETL cluster X vs Y (+Z, Second Disk);X_{RECO} [cm]; Y_{RECO} [cm]",
959 "ETL cluster local Y vs X (-Z);X^{local}_{RECO} [cm];Y^{local}_{RECO} [cm]",
967 "ETL cluster local Y vs X (+Z);X^{local}_{RECO} [cm];Y^{local}_{RECO} [cm]",
975 "ETL cluster local Y vs X (-Z);X^{local}_{SIM} [cm];Y^{local}_{SIM} [cm]",
983 "ETL cluster local Y vs X (+Z);X^{local}_{SIM} [cm];Y^{local}_{SIM} [cm]",
991 ibook.
book2D(
"EtlCluYXLocalSimZneg_simLC",
992 "ETL cluster local Y vs X (-Z, MtdSimLayerClusters);X^{local}_{SIM} [cm];Y^{local}_{SIM} [cm]",
1000 ibook.
book2D(
"EtlCluYXLocalSimZpos_simLC",
1001 "ETL cluster local Y vs X (+Z, MtdSimLayerClusters);X^{local}_{SIM} [cm];Y^{local}_{SIM} [cm]",
1012 "ETL cluster time resolution (MtdSimLayerClusters, -Z);T_{RECO}-T_{SIM} [ns]",
1017 "ETL cluster time resolution (MtdSimLayerClusters, +Z);T_{RECO}-T_{SIM} [MeV]",
1023 "EtlCluTPullvsEZneg_simLC",
1024 "ETL cluster time pull vs E (MtdSimLayerClusters, -Z);E_{SIM} [MeV];(T_{RECO}-T_{SIM})/#sigma_{T_{RECO}}",
1032 "EtlCluTPullvsEZpos_simLC",
1033 "ETL cluster time pull vs E (MtdSimLayerClusters, +Z);E_{SIM} [MeV];(T_{RECO}-T_{SIM})/#sigma_{T_{RECO}}",
1041 "EtlCluTPullvsEtaZneg_simLC",
1042 "ETL cluster time pull vs #eta (MtdSimLayerClusters, -Z);|#eta_{RECO}|;(T_{RECO}-T_{SIM})/#sigma_{T_{RECO}}",
1050 "EtlCluTPullvsEtaZpos_simLC",
1051 "ETL cluster time pull vs #eta (MtdSimLayerClusters, +Z);|#eta_{RECO}|;(T_{RECO}-T_{SIM})/#sigma_{T_{RECO}}",
1059 "ETL cluster X resolution (MtdSimLayerClusters, -Z);X_{RECO}-X_{SIM} [cm]",
1064 "ETL cluster X resolution (MtdSimLayerClusters, +Z);X_{RECO}-X_{SIM} [cm]",
1069 "ETL cluster Y resolution (MtdSimLayerClusters, -Z);Y_{RECO}-Y_{SIM} [cm]",
1074 "ETL cluster Y resolution (MtdSimLayerClusters, +Z);Y_{RECO}-Y_{SIM} [cm]",
1079 "ETL cluster Z resolution (MtdSimLayerClusters, -Z);Z_{RECO}-Z_{SIM} [cm]",
1084 "ETL cluster Z resolution (MtdSimLayerClusters, +Z);Z_{RECO}-Z_{SIM} [cm]",
1089 ibook.
book1D(
"EtlCluXPullZneg_simLC",
1090 "ETL cluster X pull (MtdSimLayerClusters, -Z);X_{RECO}-X_{SIM}/sigmaX_[RECO] [cm]",
1095 ibook.
book1D(
"EtlCluXPullZpos_simLC",
1096 "ETL cluster X pull (MtdSimLayerClusters, +Z);X_{RECO}-X_{SIM}/sigmaX_[RECO] [cm]",
1101 ibook.
book1D(
"EtlCluYPullZneg_simLC",
1102 "ETL cluster Y pull (MtdSimLayerClusters, -Z);Y_{RECO}-Y_{SIM}/sigmaY_[RECO] [cm]",
1107 ibook.
book1D(
"EtlCluYPullZpos_simLC",
1108 "ETL cluster Y pull (MtdSimLayerClusters, +Z);Y_{RECO}-Y_{SIM}/sigmaY_[RECO] [cm]",
1117 for (
unsigned int iside = 0; iside < 2; ++iside) {
1118 for (
unsigned int ihistoTot = 0; ihistoTot <
nBinsTot_; ++ihistoTot) {
1119 std::string hname = Form(
"TimeResTot_%d_%d", iside, ihistoTot);
1121 Form(
"%s time resolution (Tot bin = %d);T_{RECO} - T_{SIM} [ns]", det_name[iside].
data(), ihistoTot);
1126 for (
unsigned int ihistoEta = 0; ihistoEta <
nBinsEta_; ++ihistoEta) {
1127 std::string hname = Form(
"TimeResEta_%d_%d", iside, ihistoEta);
1129 Form(
"%s time resolution (|#eta| bin = %d);T_{RECO} - T_{SIM} [ns]", det_name[iside].
data(), ihistoEta);
1148 desc.add<
double>(
"hitMinimumEnergy2Dis", 0.001);
1149 desc.add<
bool>(
"optionalPlots",
false);
1150 desc.add<
bool>(
"UncalibRecHitsPlots",
false);
1151 desc.add<
double>(
"HitMinimumAmplitude", 0.33);
1153 descriptions.
add(
"etlLocalRecoValid",
desc);
MonitorElement * meHitZ_[4]
edm::Ref< typename HandleT::element_type, typename HandleT::element_type::value_type::value_type > makeRefTo(const HandleT &iHandle, typename HandleT::element_type::value_type::const_iterator itIter)
MonitorElement * meCluTimeRes_simLC_[2]
MonitorElement * meHitX_[4]
T getParameter(std::string const &) const
MonitorElement * meCluEta_[4]
MonitorElement * meCluXRes_simLC_[2]
edm::EDGetTokenT< FTLUncalibratedRecHitCollection > etlUncalibRecHitsToken_
edm::EDGetTokenT< CrossingFrame< PSimHit > > etlSimHitsToken_
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
MonitorElement * meCluXRes_[2]
bool isSameCluster(const FTLCluster &, const FTLCluster &)
virtual void setCurrentFolder(std::string const &fullpath)
MonitorElement * meHitTime_[4]
std::pair< float, float > pixelInModule(const DetId &id, const int row, const int column) const
const edm::ESGetToken< MTDClusterParameterEstimator, MTDCPERecord > cpeToken_
virtual const Topology & topology() const
MonitorElement * meOccupancy_[4]
MonitorElement * meCluYLocalErr_[2]
MonitorElement * meCluTPullvsEta_[2]
virtual const PixelTopology & specificTopology() const
MonitorElement * meCluTimeError_[4]
MonitorElement * meTimeResTot_[2][nBinsTot_]
static constexpr float etaMin_
MonitorElement * meCluOccupancy_[4]
MonitorElement * meCluTime_[4]
static constexpr int nBinsTot_
MonitorElement * meNhits_[4]
MonitorElement * meCluTPullvsEta_simLC_[2]
MonitorElement * meTimeResEta_[2][nBinsEta_]
MonitorElement * meCluTPullvsE_simLC_[2]
const float hitMinEnergy2Dis_
~EtlLocalRecoValidation() override
Detector identifier base class for the MIP Timing Layer.
constexpr NumType convertUnitsTo(double desiredUnits, NumType val)
MonitorElement * meTPullvsEta_
EtlLocalRecoValidation(const edm::ParameterSet &)
U second(std::pair< T, U > const &p)
static constexpr float binWidthTot_
MonitorElement * meHitTvsEta_[4]
MonitorElement * meCluTimeRes_[2]
MonitorElement * meCluHits_[4]
const bool optionalPlots_
MonitorElement * meCluZRes_simLC_[2]
MonitorElement * meHitPhi_[4]
float localX(const float mpX) const override
edm::EDGetTokenT< FTLRecHitCollection > etlRecHitsToken_
MonitorElement * meHitEta_[4]
MonitorElement * meTPullvsE_
edm::EDGetTokenT< MTDTrackingDetSetVector > mtdTrackingHitToken_
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 bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
MonitorElement * meCluYPull_simLC_[2]
MonitorElement * meCluXPull_[2]
const edm::ESGetToken< MTDGeometry, MTDDigiGeometryRecord > mtdgeoToken_
Abs< T >::type abs(const T &t)
MonitorElement * meHitTimeError_[4]
static constexpr int nBinsEta_
#define DEFINE_FWK_MODULE(type)
MonitorElement * meTimeRes_
const double hitMinAmplitude_
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
void setGeometry(MTDGeometry const *geom)
float localY(const float mpY) const override
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
MonitorElement * meCluYXLocalSim_simLC_[2]
MonitorElement * meHitYlocal_[2]
MonitorElement * meCluZRes_[2]
constexpr NumType convertMmToCm(NumType millimeters)
MonitorElement * meLocalOccupancy_[2]
const edm::ESGetToken< MTDTopology, MTDTopologyRcd > mtdtopoToken_
MonitorElement * meCluYXLocal_[2]
MonitorElement * meHitY_[4]
constexpr uint32_t rawId() const
get the raw id
MonitorElement * meCluYXLocalSim_[2]
A 2D TrackerRecHit with time and time error information.
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, FUNC onbooking=NOOP())
void add(std::string const &label, ParameterSetDescription const &psetDescription)
edm::EDGetTokenT< MtdRecoClusterToSimLayerClusterAssociationMap > r2sAssociationMapToken_
static constexpr float binWidthEta_
Detector identifier class for the Endcap Timing Layer.
void analyze(const edm::Event &, const edm::EventSetup &) override
char data[epos_bytes_allocation]
static int position[264][3]
edm::EDGetTokenT< FTLClusterCollection > etlRecCluToken_
MonitorElement * meHitTvsPhi_[4]
MonitorElement * meCluXLocalErr_[2]
MonitorElement * meCluYPull_[2]
ESTransientHandle< T > getTransientHandle(const ESGetToken< T, R > &iToken) const
MonitorElement * meCluPhi_[4]
MonitorElement * meCluYRes_simLC_[2]
MonitorElement * meCluTPullvsE_[2]
MonitorElement * meHitXlocal_[2]
Log< level::Warning, false > LogWarning
MonitorElement * meCluYRes_[2]
auto makeValid(const U &iOtherHandleType) noexcept(false)
const std::string folder_
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
std::tuple< LocalPoint, LocalError, TimeValue, TimeValueError > ReturnType
MonitorElement * meCluXPull_simLC_[2]
const bool uncalibRecHitsPlots_
MonitorElement * meEnergyRes_