151 return clu1.
id() == clu2.
id() && clu1.
size() == clu2.
size() && clu1.
x() == clu2.
x() && clu1.
y() == clu2.
y() &&
158 hitMinEnergy1Dis_(iConfig.getParameter<double>(
"hitMinimumEnergy1Dis")),
159 hitMinEnergy2Dis_(iConfig.getParameter<double>(
"hitMinimumEnergy2Dis")),
160 LocalPosDebug_(iConfig.getParameter<bool>(
"LocalPositionDebug")),
161 uncalibRecHitsPlots_(iConfig.getParameter<bool>(
"UncalibRecHitsPlots")),
162 hitMinAmplitude_(iConfig.getParameter<double>(
"HitMinimumAmplitude")) {
171 mtdgeoToken_ = esConsumes<MTDGeometry, MTDDigiGeometryRecord>();
181 using namespace geant_units::operators;
187 const MTDTopology* topology = topologyHandle.product();
189 bool topo1Dis =
false;
190 bool topo2Dis =
false;
205 std::unordered_map<uint32_t, MTDHit> m_etlSimHits[4];
206 for (
auto const& simHit : etlSimHits) {
208 if (simHit.tof() < 0 || simHit.tof() > 25.)
215 if ((
id.
zside() == -1) && (
id.nDisc() == 1))
217 else if ((
id.
zside() == -1) && (
id.nDisc() == 2))
219 else if ((
id.
zside() == 1) && (
id.nDisc() == 1))
221 else if ((
id.
zside() == 1) && (
id.nDisc() == 2))
226 auto simHitIt = m_etlSimHits[idet].emplace(
id.rawId(),
MTDHit()).first;
232 if ((simHitIt->second).time == 0 || simHit.tof() < (simHitIt->second).time) {
233 (simHitIt->second).time = simHit.tof();
235 auto hit_pos = simHit.entryPoint();
236 (simHitIt->second).x_local = hit_pos.x();
237 (simHitIt->second).y_local = hit_pos.y();
238 (simHitIt->second).z_local = hit_pos.z();
244 unsigned int n_reco_etl[4] = {0, 0, 0, 0};
245 for (
const auto& recHit : *etlRecHitsHandle) {
250 if (thedet ==
nullptr)
251 throw cms::Exception(
"EtlLocalRecoValidation") <<
"GeographicalID: " << std::hex << geoId.
rawId() <<
" ("
252 << detId.
rawId() <<
") is invalid!" <<
std::dec << std::endl;
257 const auto& global_point = thedet->
toGlobal(local_point);
262 if (detId.
zside() == -1) {
264 }
else if (detId.
zside() == 1) {
275 if ((detId.
zside() == -1) && (detId.
nDisc() == 1)) {
277 }
else if ((detId.
zside() == -1) && (detId.
nDisc() == 2)) {
279 }
else if ((detId.
zside() == 1) && (detId.
nDisc() == 1)) {
281 }
else if ((detId.
zside() == 1) && (detId.
nDisc() == 2)) {
297 if ((idet == 0) || (idet == 1)) {
302 if ((idet == 2) || (idet == 3)) {
320 if (m_etlSimHits[idet].
count(detId.
rawId()) == 1) {
323 float time_res = recHit.time() - m_etlSimHits[idet][detId.
rawId()].time;
324 float energy_res = recHit.energy() - m_etlSimHits[idet][detId.
rawId()].energy;
343 for (
int i = 0;
i < 4;
i++) {
349 for (
const auto& DetSetClu : *etlRecCluHandle) {
350 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;
371 const auto& global_point = genericDet->toGlobal(local_point);
376 if (cluId.
zside() == -1) {
378 }
else if (cluId.
zside() == 1) {
389 if ((cluId.
zside() == -1) && (cluId.
nDisc() == 1)) {
391 }
else if ((cluId.
zside() == -1) && (cluId.
nDisc() == 2)) {
393 }
else if ((cluId.
zside() == 1) && (cluId.
nDisc() == 1)) {
395 }
else if ((cluId.
zside() == 1) && (cluId.
nDisc() == 2)) {
413 double cluEneSIM = 0.;
414 double cluTimeSIM = 0.;
415 double cluLocXSIM = 0.;
416 double cluLocYSIM = 0.;
417 double cluLocZSIM = 0.;
419 for (
int ihit = 0; ihit < cluster.size(); ++ihit) {
420 int hit_row = cluster.minHitRow() + cluster.hitOffset()[ihit * 2];
421 int hit_col = cluster.minHitCol() + cluster.hitOffset()[ihit * 2 + 1];
424 for (
const auto& recHit : *etlRecHitsHandle) {
425 ETLDetId hitId(recHit.id().rawId());
427 if (m_etlSimHits[idet].
count(hitId.rawId()) == 0)
431 if (hitId.zside() != cluId.
zside() || hitId.mtdRR() != cluId.
mtdRR() || hitId.module() != cluId.
module() ||
432 recHit.row() != hit_row || recHit.column() != hit_col)
436 if (recHit.energy() != cluster.hitENERGY()[ihit] || recHit.time() != cluster.hitTIME()[ihit])
441 convertMmToCm(m_etlSimHits[idet][recHit.id().rawId()].y_local),
442 convertMmToCm(m_etlSimHits[idet][recHit.id().rawId()].z_local));
445 cluLocXSIM += local_point_sim.
x() * m_etlSimHits[idet][recHit.id().rawId()].energy;
446 cluLocYSIM += local_point_sim.
y() * m_etlSimHits[idet][recHit.id().rawId()].energy;
447 cluLocZSIM += local_point_sim.
z() * m_etlSimHits[idet][recHit.id().rawId()].energy;
450 cluEneSIM += m_etlSimHits[idet][recHit.id().rawId()].energy;
451 cluTimeSIM += m_etlSimHits[idet][recHit.id().rawId()].time * m_etlSimHits[idet][recHit.id().rawId()].energy;
459 bool matchClu =
false;
460 const auto& trkHits = (*mtdTrkHitHandle)[detIdObject];
461 for (
const auto& trkHit : trkHits) {
463 comp = trkHit.
clone();
470 <<
"No valid TrackingRecHit corresponding to cluster, detId = " << detIdObject.
rawId();
474 int iside = (cluId.
zside() == -1 ? 0 : 1);
475 if (cluTimeSIM > 0. && cluEneSIM > 0.) {
476 cluTimeSIM /= cluEneSIM;
478 Local3DPoint cluLocalPosSIM(cluLocXSIM / cluEneSIM, cluLocYSIM / cluEneSIM, cluLocZSIM / cluEneSIM);
479 const auto& cluGlobalPosSIM = genericDet->toGlobal(cluLocalPosSIM);
481 float time_res = cluster.time() - cluTimeSIM;
482 float energy_res = cluster.energy() - cluEneSIM;
483 float x_res = global_point.x() - cluGlobalPosSIM.x();
484 float y_res = global_point.y() - cluGlobalPosSIM.y();
485 float z_res = global_point.z() - cluGlobalPosSIM.z();
497 if (matchClu && comp !=
nullptr) {
520 for (
const auto& uRecHit : *etlUncalibRecHitsHandle) {
526 if (m_etlSimHits[idet].
count(detId.
rawId()) != 1)
531 if (thedet ==
nullptr)
532 throw cms::Exception(
"EtlLocalRecoValidation") <<
"GeographicalID: " << std::hex << geoId.
rawId() <<
" ("
533 << detId.
rawId() <<
") is invalid!" <<
std::dec << std::endl;
539 const auto& global_point = thedet->
toGlobal(local_point);
546 float time_res = uRecHit.time().first - m_etlSimHits[idet][detId.
rawId()].time;
548 int iside = (detId.
zside() == -1 ? 0 : 1);
552 int qBin = (int)(uRecHit.amplitude().first /
binWidthQ_);
581 "EtlNhitsZnegD1",
"Number of ETL RECO hits (-Z, Single(topo1D)/First(topo2D) disk);N_{RECO}", 100, 0., 5000.);
582 meNhits_[1] = ibook.
book1D(
"EtlNhitsZnegD2",
"Number of ETL RECO hits (-Z, Second disk);N_{RECO}", 100, 0., 5000.);
584 "EtlNhitsZposD1",
"Number of ETL RECO hits (+Z, Single(topo1D)/First(topo2D) disk);N_{RECO}", 100, 0., 5000.);
585 meNhits_[3] = ibook.
book1D(
"EtlNhitsZposD2",
"Number of ETL RECO hits (+Z, Second disk);N_{RECO}", 100, 0., 5000.);
587 "EtlHitEnergyZnegD1",
"ETL RECO hits energy (-Z, Single(topo1D)/First(topo2D) disk);E_{RECO} [MeV]", 100, 0., 3.);
589 ibook.
book1D(
"EtlHitEnergyZnegD2",
"ETL RECO hits energy (-Z, Second disk);E_{RECO} [MeV]", 100, 0., 3.);
591 "EtlHitEnergyZposD1",
"ETL RECO hits energy (+Z, Single(topo1D)/First(topo2D) disk);E_{RECO} [MeV]", 100, 0., 3.);
593 ibook.
book1D(
"EtlHitEnergyZposD2",
"ETL RECO hits energy (+Z, Second disk);E_{RECO} [MeV]", 100, 0., 3.);
595 "EtlHitTimeZnegD1",
"ETL RECO hits ToA (-Z, Single(topo1D)/First(topo2D) disk);ToA_{RECO} [ns]", 100, 0., 25.);
596 meHitTime_[1] = ibook.
book1D(
"EtlHitTimeZnegD2",
"ETL RECO hits ToA (-Z, Second disk);ToA_{RECO} [ns]", 100, 0., 25.);
598 "EtlHitTimeZposD1",
"ETL RECO hits ToA (+Z, Single(topo1D)/First(topo2D) disk);ToA_{RECO} [ns]", 100, 0., 25.);
599 meHitTime_[3] = ibook.
book1D(
"EtlHitTimeZposD2",
"ETL RECO hits ToA (+Z, Second disk);ToA_{RECO} [ns]", 100, 0., 25.);
601 ibook.
book1D(
"EtlHitTimeErrorZnegD1",
602 "ETL RECO hits ToA error (-Z, Single(topo1D)/First(topo2D) disk);#sigma^{ToA}_{RECO} [ns]",
607 "EtlHitTimeErrorZnegD2",
"ETL RECO hits ToA error(-Z, Second disk);#sigma^{ToA}_{RECO} [ns]", 50, 0., 0.1);
609 ibook.
book1D(
"EtlHitTimeErrorZposD1",
610 "ETL RECO hits ToA error (+Z, Single(topo1D)/First(topo2D) disk);#sigma^{ToA}_{RECO} [ns]",
615 "EtlHitTimeErrorZposD2",
"ETL RECO hits ToA error(+Z, Second disk);#sigma^{ToA}_{RECO} [ns]", 50, 0., 0.1);
618 ibook.
book2D(
"EtlOccupancyZnegD1",
619 "ETL RECO hits occupancy (-Z, Single(topo1D)/First(topo2D) disk);X_{RECO} [cm];Y_{RECO} [cm]",
627 "ETL RECO hits occupancy (-Z, Second disk);X_{RECO} [cm];Y_{RECO} [cm]",
635 ibook.
book2D(
"EtlOccupancyZposD1",
636 "ETL RECO hits occupancy (+Z, Single(topo1D)/First(topo2D) disk);X_{RECO} [cm];Y_{RECO} [cm]",
644 "ETL RECO hits occupancy (+Z, Second disk);X_{RECO} [cm];Y_{RECO} [cm]",
653 "ETL RECO hits local occupancy (-Z);X_{RECO} [cm];Y_{RECO} [cm]",
661 "ETL RECO hits local occupancy (+Z);X_{RECO} [cm];Y_{RECO} [cm]",
668 meHitXlocal_[0] = ibook.
book1D(
"EtlHitXlocalZneg",
"ETL RECO local X (-Z);X_{RECO}^{LOC} [cm]", 100, -2.2, 2.2);
669 meHitXlocal_[1] = ibook.
book1D(
"EtlHitXlocalZpos",
"ETL RECO local X (+Z);X_{RECO}^{LOC} [cm]", 100, -2.2, 2.2);
670 meHitYlocal_[0] = ibook.
book1D(
"EtlHitYlocalZneg",
"ETL RECO local Y (-Z);Y_{RECO}^{LOC} [cm]", 50, -1.1, 1.1);
671 meHitYlocal_[1] = ibook.
book1D(
"EtlHitYlocalZpos",
"ETL RECO local Y (-Z);Y_{RECO}^{LOC} [cm]", 50, -1.1, 1.1);
674 "EtlHitXZnegD1",
"ETL RECO hits X (-Z, Single(topo1D)/First(topo2D) Disk);X_{RECO} [cm]", 100, -130., 130.);
675 meHitX_[1] = ibook.
book1D(
"EtlHitXZnegD2",
"ETL RECO hits X (-Z, Second Disk);X_{RECO} [cm]", 100, -130., 130.);
677 "EtlHitXZposD1",
"ETL RECO hits X (+Z, Single(topo1D)/First(topo2D) Disk);X_{RECO} [cm]", 100, -130., 130.);
678 meHitX_[3] = ibook.
book1D(
"EtlHitXZposD2",
"ETL RECO hits X (+Z, Second Disk);X_{RECO} [cm]", 100, -130., 130.);
680 "EtlHitYZnegD1",
"ETL RECO hits Y (-Z, Single(topo1D)/First(topo2D) Disk);Y_{RECO} [cm]", 100, -130., 130.);
681 meHitY_[1] = ibook.
book1D(
"EtlHitYZnegD2",
"ETL RECO hits Y (-Z, Second Disk);Y_{RECO} [cm]", 100, -130., 130.);
683 "EtlHitYZposD1",
"ETL RECO hits Y (+Z, Single(topo1D)/First(topo2D) Disk);Y_{RECO} [cm]", 100, -130., 130.);
684 meHitY_[3] = ibook.
book1D(
"EtlHitYZposD2",
"ETL RECO hits Y (+Z, Second Disk);Y_{RECO} [cm]", 100, -130., 130.);
686 "EtlHitZZnegD1",
"ETL RECO hits Z (-Z, Single(topo1D)/First(topo2D) Disk);Z_{RECO} [cm]", 100, -302., -298.);
687 meHitZ_[1] = ibook.
book1D(
"EtlHitZZnegD2",
"ETL RECO hits Z (-Z, Second Disk);Z_{RECO} [cm]", 100, -304., -300.);
689 "EtlHitZZposD1",
"ETL RECO hits Z (+Z, Single(topo1D)/First(topo2D) Disk);Z_{RECO} [cm]", 100, 298., 302.);
690 meHitZ_[3] = ibook.
book1D(
"EtlHitZZposD2",
"ETL RECO hits Z (+Z, Second Disk);Z_{RECO} [cm]", 100, 300., 304.);
692 "EtlHitPhiZnegD1",
"ETL RECO hits #phi (-Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad]", 100, -3.2, 3.2);
694 ibook.
book1D(
"EtlHitPhiZnegD2",
"ETL RECO hits #phi (-Z, Second Disk);#phi_{RECO} [rad]", 100, -3.2, 3.2);
696 "EtlHitPhiZposD1",
"ETL RECO hits #phi (+Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad]", 100, -3.2, 3.2);
698 ibook.
book1D(
"EtlHitPhiZposD2",
"ETL RECO hits #phi (+Z, Second Disk);#phi_{RECO} [rad]", 100, -3.2, 3.2);
700 "EtlHitEtaZnegD1",
"ETL RECO hits #eta (-Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO}", 100, -3.2, -1.56);
701 meHitEta_[1] = ibook.
book1D(
"EtlHitEtaZnegD2",
"ETL RECO hits #eta (-Z, Second Disk);#eta_{RECO}", 100, -3.2, -1.56);
703 "EtlHitEtaZposD1",
"ETL RECO hits #eta (+Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO}", 100, 1.56, 3.2);
704 meHitEta_[3] = ibook.
book1D(
"EtlHitEtaZposD2",
"ETL RECO hits #eta (+Z, Second Disk);#eta_{RECO}", 100, 1.56, 3.2);
705 meTimeRes_ = ibook.
book1D(
"EtlTimeRes",
"ETL time resolution;T_{RECO}-T_{SIM}", 100, -0.5, 0.5);
706 meEnergyRes_ = ibook.
book1D(
"EtlEnergyRes",
"ETL energy resolution;E_{RECO}-E_{SIM}", 100, -0.5, 0.5);
709 "ETL RECO time vs energy (-Z, Single(topo1D)/First(topo2D) Disk);E_{RECO} [MeV];ToA_{RECO} [ns]",
716 "ETL RECO time vs energy (-Z, Second Disk);E_{RECO} [MeV];ToA_{RECO} [ns]",
724 "ETL RECO time vs energy (+Z, Single(topo1D)/First(topo2D) Disk);E_{RECO} [MeV];ToA_{RECO} [ns]",
731 "ETL RECO time vs energy (+Z, Second Disk);E_{RECO} [MeV];ToA_{RECO} [ns]",
738 "EtlHitEvsPhiZnegD1",
739 "ETL RECO energy vs #phi (-Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad];E_{RECO} [MeV]",
746 "ETL RECO energy vs #phi (-Z, Second Disk);#phi_{RECO} [rad];E_{RECO} [MeV]",
753 "EtlHitEvsPhiZposD1",
754 "ETL RECO energy vs #phi (+Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad];E_{RECO} [MeV]",
761 "ETL RECO energy vs #phi (+Z, Second Disk);#phi_{RECO} [rad];E_{RECO} [MeV]",
769 "ETL RECO energy vs #eta (-Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO};E_{RECO} [MeV]",
776 "ETL RECO energy vs #eta (-Z, Second Disk);#eta_{RECO};E_{RECO} [MeV]",
784 "ETL RECO energy vs #eta (+Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO};E_{RECO} [MeV]",
791 "ETL RECO energy vs #eta (+Z, Second Disk);#eta_{RECO};E_{RECO} [MeV]",
798 "EtlHitTvsPhiZnegD1",
799 "ETL RECO time vs #phi (-Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad];ToA_{RECO} [ns]",
806 "ETL RECO time vs #phi (-Z, Second Disk);#phi_{RECO} [rad];ToA_{RECO} [ns]",
813 "EtlHitTvsPhiZposD1",
814 "ETL RECO time vs #phi (+Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad];ToA_{RECO} [ns]",
821 "ETL RECO time vs #phi (+Z, Second Disk);#phi_{RECO} [rad];ToA_{RECO} [ns]",
829 "ETL RECO time vs #eta (-Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO};ToA_{RECO} [ns]",
836 "ETL RECO time vs #eta (-Z, Second Disk);#eta_{RECO};ToA_{RECO} [ns]",
844 "ETL RECO time vs #eta (+Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO};ToA_{RECO} [ns]",
851 "ETL RECO time vs #eta (+Z, Second Disk);#eta_{RECO};ToA_{RECO} [ns]",
858 "EtlTPullvsE",
"ETL time pull vs E;E_{SIM} [MeV];(T_{RECO}-T_{SIM})/#sigma_{T_{RECO}}", 20, 0., 2., -5., 5.,
"S");
860 "ETL time pull vs #eta;|#eta_{RECO}|;(T_{RECO}-T_{SIM})/#sigma_{T_{RECO}}",
868 ibook.
book1D(
"EtlCluTimeZnegD1",
"ETL cluster ToA (-Z, Single(topo1D)/First(topo2D) Disk);ToA [ns]", 250, 0, 25);
869 meCluTime_[1] = ibook.
book1D(
"EtlCluTimeZnegD2",
"ETL cluster ToA (-Z, Second Disk);ToA [ns]", 250, 0, 25);
871 ibook.
book1D(
"EtlCluTimeZposD1",
"ETL cluster ToA (+Z, Single(topo1D)/First(topo2D) Disk);ToA [ns]", 250, 0, 25);
872 meCluTime_[3] = ibook.
book1D(
"EtlCluTimeZposD2",
"ETL cluster ToA (+Z, Second Disk);ToA [ns]", 250, 0, 25);
874 "ETL cluster time error (-Z, Single(topo1D)/First(topo2D) Disk);#sigma_{t} [ns]",
879 ibook.
book1D(
"EtlCluTimeErrorZnegD2",
"ETL cluster time error (-Z, Second Disk);#sigma_{t} [ns]", 100, 0, 0.1);
881 "ETL cluster time error (+Z, Single(topo1D)/First(topo2D) Disk);#sigma_{t} [ns]",
886 ibook.
book1D(
"EtlCluTimeErrorZposD2",
"ETL cluster time error (+Z, Second Disk);#sigma_{t} [ns]", 100, 0, 0.1);
888 "EtlCluEnergyZnegD1",
"ETL cluster energy (-Z, Single(topo1D)/First(topo2D) Disk);E_{RECO} [MeV]", 100, 0, 10);
890 ibook.
book1D(
"EtlCluEnergyZnegD2",
"ETL cluster energy (-Z, Second Disk);E_{RECO} [MeV]", 100, 0, 10);
892 "EtlCluEnergyZposD1",
"ETL cluster energy (+Z, Single(topo1D)/First(topo2D) Disk);E_{RECO} [MeV]", 100, 0, 10);
894 ibook.
book1D(
"EtlCluEnergyZposD2",
"ETL cluster energy (+Z, Second Disk);E_{RECO} [MeV]", 100, 0, 10);
896 "EtlCluPhiZnegD1",
"ETL cluster #phi (-Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad]", 126, -3.2, 3.2);
898 ibook.
book1D(
"EtlCluPhiZnegD2",
"ETL cluster #phi (-Z, Second Disk);#phi_{RECO} [rad]", 126, -3.2, 3.2);
900 "EtlCluPhiZposD1",
"ETL cluster #phi (+Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad]", 126, -3.2, 3.2);
902 ibook.
book1D(
"EtlCluPhiZposD2",
"ETL cluster #phi (+Z, Second Disk);#phi_{RECO} [rad]", 126, -3.2, 3.2);
904 "EtlCluEtaZnegD1",
"ETL cluster #eta (-Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO}", 100, -3.2, -1.4);
905 meCluEta_[1] = ibook.
book1D(
"EtlCluEtaZnegD2",
"ETL cluster #eta (-Z, Second Disk);#eta_{RECO}", 100, -3.2, -1.4);
907 "EtlCluEtaZposD1",
"ETL cluster #eta (+Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO}", 100, 1.4, 3.2);
908 meCluEta_[3] = ibook.
book1D(
"EtlCluEtaZposD2",
"ETL cluster #eta (+Z, Second Disk);#eta_{RECO}", 100, 1.4, 3.2);
910 "EtlCluHitNumberZnegD1",
"ETL hits per cluster (-Z, Single(topo1D)/First(topo2D) Disk);Cluster size", 10, 0, 10);
912 ibook.
book1D(
"EtlCluHitNumberZnegD2",
"ETL hits per cluster (-Z, Second Disk);Cluster size", 10, 0, 10);
914 "EtlCluHitNumberZposD1",
"ETL hits per cluster (+Z, Single(topo1D)/First(topo2D) Disk);Cluster size", 10, 0, 10);
916 ibook.
book1D(
"EtlCluHitNumberZposD2",
"ETL hits per cluster (+Z, Second Disk);Cluster size", 10, 0, 10);
918 ibook.
book2D(
"EtlCluOccupancyZnegD1",
919 "ETL cluster X vs Y (-Z, Single(topo1D)/First(topo2D) Disk);X_{RECO} [cm]; Y_{RECO} [cm]",
927 "ETL cluster X vs Y (-Z, Second Disk);X_{RECO} [cm]; Y_{RECO} [cm]",
935 ibook.
book2D(
"EtlCluOccupancyZposD1",
936 "ETL cluster X vs Y (+Z, Single(topo1D)/First(topo2D) Disk);X_{RECO} [cm]; Y_{RECO} [cm]",
944 "ETL cluster X vs Y (+Z, Second Disk);X_{RECO} [cm]; Y_{RECO} [cm]",
953 ibook.
book1D(
"EtlCluTimeResZneg",
"ETL cluster time resolution (-Z);T_{RECO}-T_{SIM} [ns]", 100, -0.5, 0.5);
955 ibook.
book1D(
"EtlCluTimeResZpos",
"ETL cluster time resolution (+Z);T_{RECO}-T_{SIM} [MeV]", 100, -0.5, 0.5);
957 ibook.
book1D(
"EtlCluEnergyResZneg",
"ETL cluster energy resolution (-Z);E_{RECO}-E_{SIM}", 100, -0.5, 0.5);
959 ibook.
book1D(
"EtlCluEnergyResZpos",
"ETL cluster energy resolution (+Z);E_{RECO}-E_{SIM}", 100, -0.5, 0.5);
963 "ETL cluster time pull vs E (-Z);E_{SIM} [MeV];(T_{RECO}-T_{SIM})/#sigma_{T_{RECO}}",
972 "ETL cluster time pull vs E (+Z);E_{SIM} [MeV];(T_{RECO}-T_{SIM})/#sigma_{T_{RECO}}",
981 "ETL cluster time pull vs #eta (-Z);|#eta_{RECO}|;(T_{RECO}-T_{SIM})/#sigma_{T_{RECO}}",
990 "ETL cluster time pull vs #eta (+Z);|#eta_{RECO}|;(T_{RECO}-T_{SIM})/#sigma_{T_{RECO}}",
997 meCluXRes_[0] = ibook.
book1D(
"EtlCluXResZneg",
"ETL cluster X resolution (-Z);X_{RECO}-X_{SIM} [cm]", 100, -0.1, 0.1);
998 meCluXRes_[1] = ibook.
book1D(
"EtlCluXResZpos",
"ETL cluster X resolution (+Z);X_{RECO}-X_{SIM} [cm]", 100, -0.1, 0.1);
999 meCluYRes_[0] = ibook.
book1D(
"EtlCluYResZneg",
"ETL cluster Y resolution (-Z);Y_{RECO}-Y_{SIM} [cm]", 100, -0.1, 0.1);
1000 meCluYRes_[1] = ibook.
book1D(
"EtlCluYResZpos",
"ETL cluster Y resolution (+Z);Y_{RECO}-Y_{SIM} [cm]", 100, -0.1, 0.1);
1002 ibook.
book1D(
"EtlCluZResZneg",
"ETL cluster Z resolution (-Z);Z_{RECO}-Z_{SIM} [cm]", 100, -0.003, 0.003);
1004 ibook.
book1D(
"EtlCluZResZpos",
"ETL cluster Z resolution (+Z);Z_{RECO}-Z_{SIM} [cm]", 100, -0.003, 0.003);
1007 ibook.
book1D(
"EtlCluXPullZneg",
"ETL cluster X pull (-Z);X_{RECO}-X_{SIM}/sigmaX_[RECO] [cm]", 100, -5., 5.);
1009 ibook.
book1D(
"EtlCluXPullZpos",
"ETL cluster X pull (+Z);X_{RECO}-X_{SIM}/sigmaX_[RECO] [cm]", 100, -5., 5.);
1011 ibook.
book1D(
"EtlCluYPullZneg",
"ETL cluster Y pull (-Z);Y_{RECO}-Y_{SIM}/sigmaY_[RECO] [cm]", 100, -5., 5.);
1013 ibook.
book1D(
"EtlCluYPullZpos",
"ETL cluster Y pull (+Z);Y_{RECO}-Y_{SIM}/sigmaY_[RECO] [cm]", 100, -5., 5.);
1015 "ETL cluster local Y vs X (-Z);X^{local}_{RECO} [cm];Y^{local}_{RECO} [cm]",
1023 "ETL cluster local Y vs X (+Z);X^{local}_{RECO} [cm];Y^{local}_{RECO} [cm]",
1031 "ETL cluster local Y vs X (-Z);X^{local}_{SIM} [cm];Y^{local}_{SIM} [cm]",
1039 "ETL cluster local Y vs X (+Z);X^{local}_{SIM} [cm];Y^{local}_{SIM} [cm]",
1047 ibook.
book1D(
"EtlCluXLocalErrNeg",
"ETL cluster X local error (-Z);sigmaX_{RECO,loc} [cm]", 50, 0., 0.2);
1049 ibook.
book1D(
"EtlCluXLocalErrPos",
"ETL cluster X local error (+Z);sigmaX_{RECO,loc} [cm]", 50, 0., 0.2);
1051 ibook.
book1D(
"EtlCluYLocalErrNeg",
"ETL cluster Y local error (-Z);sigmaY_{RECO,loc} [cm]", 50., 0., 0.2);
1053 ibook.
book1D(
"EtlCluYLocalErrPos",
"ETL cluster Y local error (+Z);sigmaY_{RECO,loc} [cm]", 50, 0., 0.2);
1056 "EtlUnmatchedCluEnergyNeg",
"ETL unmatched cluster log10(energy) (-Z);log10(E_{RECO} [MeV])", 5, -3, 2);
1058 "EtlUnmatchedCluEnergyPos",
"ETL unmatched cluster log10(energy) (+Z);log10(E_{RECO} [MeV])", 5, -3, 2);
1064 for (
unsigned int iside = 0; iside < 2; ++iside) {
1065 for (
unsigned int ihistoQ = 0; ihistoQ <
nBinsQ_; ++ihistoQ) {
1066 std::string hname = Form(
"TimeResQ_%d_%d", iside, ihistoQ);
1068 Form(
"%s time resolution (Q bin = %d);T_{RECO} - T_{SIM} [ns]", det_name[iside].
data(), ihistoQ);
1073 for (
unsigned int ihistoEta = 0; ihistoEta <
nBinsEta_; ++ihistoEta) {
1074 std::string hname = Form(
"TimeResEta_%d_%d", iside, ihistoEta);
1076 Form(
"%s time resolution (|#eta| bin = %d);T_{RECO} - T_{SIM} [ns]", det_name[iside].
data(), ihistoEta);
1094 desc.
add<
double>(
"hitMinimumEnergy1Dis", 1.);
1095 desc.
add<
double>(
"hitMinimumEnergy2Dis", 0.001);
1096 desc.
add<
bool>(
"LocalPositionDebug",
false);
1097 desc.
add<
bool>(
"UncalibRecHitsPlots",
false);
1098 desc.
add<
double>(
"HitMinimumAmplitude", 0.33);
1100 descriptions.
add(
"etlLocalRecoValid", desc);
MonitorElement * meHitZ_[4]
MonitorElement * meHitX_[4]
MonitorElement * meCluEta_[4]
edm::EDGetTokenT< FTLUncalibratedRecHitCollection > etlUncalibRecHitsToken_
edm::EDGetTokenT< CrossingFrame< PSimHit > > etlSimHitsToken_
MonitorElement * meCluXRes_[2]
bool isSameCluster(const FTLCluster &, const FTLCluster &)
GlobalError globalPositionError() const final
virtual void setCurrentFolder(std::string const &fullpath)
MonitorElement * meHitTime_[4]
virtual const Topology & topology() const
#define DEFINE_FWK_MODULE(type)
MonitorElement * meOccupancy_[4]
MonitorElement * meCluYLocalErr_[2]
MonitorElement * meCluTPullvsEta_[2]
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
MonitorElement * meCluTimeError_[4]
static constexpr float etaMin_
constexpr uint32_t rawId() const
get the raw id
MonitorElement * meCluOccupancy_[4]
MonitorElement * meCluTime_[4]
MonitorElement * meNhits_[4]
MonitorElement * meUnmatchedCluEnergy_[2]
MonitorElement * meTimeResEta_[2][nBinsEta_]
MonitorElement * meHitTvsE_[4]
MonitorElement * meCluEnergy_[4]
const float hitMinEnergy2Dis_
~EtlLocalRecoValidation() override
constexpr NumType convertUnitsTo(double desiredUnits, NumType val)
MonitorElement * meTPullvsEta_
EtlLocalRecoValidation(const edm::ParameterSet &)
Handle< PROD > getHandle(EDGetTokenT< PROD > token) const
MonitorElement * meHitEvsEta_[4]
edm::ESGetToken< MTDTopology, MTDTopologyRcd > mtdtopoToken_
MonitorElement * meHitTvsEta_[4]
MonitorElement * meCluTimeRes_[2]
MonitorElement * meCluHits_[4]
MonitorElement * meHitPhi_[4]
float localX(const float mpX) const override
edm::EDGetTokenT< FTLRecHitCollection > etlRecHitsToken_
MonitorElement * meHitEta_[4]
MonitorElement * meTPullvsE_
edm::EDGetTokenT< MTDTrackingDetSetVector > mtdTrackingHitToken_
const float hitMinEnergy1Dis_
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 * meCluXPull_[2]
ETLDetId geographicalId() const
virtual const PixelTopology & specificTopology() const
Abs< T >::type abs(const T &t)
const bool LocalPosDebug_
MonitorElement * meHitTimeError_[4]
static constexpr int nBinsEta_
MonitorElement * meTimeRes_
const double hitMinAmplitude_
edm::ESGetToken< MTDGeometry, MTDDigiGeometryRecord > mtdgeoToken_
ParameterDescriptionBase * add(U const &iLabel, T const &value)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
float localY(const float mpY) const override
MonitorElement * meHitYlocal_[2]
LocalError localPositionError() const override
MonitorElement * meTimeResQ_[2][nBinsQ_]
MonitorElement * meCluZRes_[2]
constexpr NumType convertMmToCm(NumType millimeters)
MonitorElement * meLocalOccupancy_[2]
MonitorElement * meCluYXLocal_[2]
MonitorElement * meHitY_[4]
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())
T getParameter(std::string const &) const
void add(std::string const &label, ParameterSetDescription const &psetDescription)
MTDTrackingRecHit * clone() const override
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]
edm::EDGetTokenT< FTLClusterCollection > etlRecCluToken_
ESTransientHandle< T > getTransientHandle(const ESGetToken< T, R > &iToken) const
MonitorElement * meHitTvsPhi_[4]
MonitorElement * meCluXLocalErr_[2]
MonitorElement * meHitEvsPhi_[4]
MonitorElement * meCluYPull_[2]
MonitorElement * meCluPhi_[4]
static constexpr float binWidthQ_
MonitorElement * meCluTPullvsE_[2]
MonitorElement * meHitEnergy_[4]
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())
static constexpr int nBinsQ_
int etaBin(const l1t::HGCalMulticluster *cl)
const bool uncalibRecHitsPlots_
MonitorElement * meEnergyRes_
MonitorElement * meCluEnergyRes_[2]