From 320065b56907291f3009bae627bde227e05e9220 Mon Sep 17 00:00:00 2001 From: Giulia Sorrentino Date: Mon, 22 Mar 2021 15:17:02 +0100 Subject: [PATCH 1/8] Adding new validation plots for tracks and hits --- .../plugins/BtlDigiHitsValidation.cc | 38 ++- .../plugins/BtlLocalRecoValidation.cc | 81 +++-- .../plugins/EtlDigiHitsValidation.cc | 46 ++- .../plugins/EtlLocalRecoValidation.cc | 162 +++++++++- .../plugins/MtdGlobalRecoValidation.cc | 284 +++++++++++------- 5 files changed, 468 insertions(+), 143 deletions(-) diff --git a/Validation/MtdValidation/plugins/BtlDigiHitsValidation.cc b/Validation/MtdValidation/plugins/BtlDigiHitsValidation.cc index 09b5f11dd3cf9..de9b19ec186ba 100644 --- a/Validation/MtdValidation/plugins/BtlDigiHitsValidation.cc +++ b/Validation/MtdValidation/plugins/BtlDigiHitsValidation.cc @@ -50,6 +50,7 @@ class BtlDigiHitsValidation : public DQMEDAnalyzer { // ------------ member data ------------ const std::string folder_; + const bool LocalPosDebug_; edm::EDGetTokenT btlDigiHitsToken_; @@ -62,6 +63,12 @@ class BtlDigiHitsValidation : public DQMEDAnalyzer { MonitorElement* meOccupancy_[2]; + //local position monitoring + MonitorElement* meLocalOccupancy_[2]; + MonitorElement* meHitXlocal_[2]; + MonitorElement* meHitYlocal_[2]; + MonitorElement* meHitZlocal_[2]; + MonitorElement* meHitX_[2]; MonitorElement* meHitY_[2]; MonitorElement* meHitZ_[2]; @@ -79,7 +86,8 @@ class BtlDigiHitsValidation : public DQMEDAnalyzer { // ------------ constructor and destructor -------------- BtlDigiHitsValidation::BtlDigiHitsValidation(const edm::ParameterSet& iConfig) - : folder_(iConfig.getParameter("folder")) { + : folder_(iConfig.getParameter("folder")), + LocalPosDebug_(iConfig.getParameter("LocalPositionDebug")) { btlDigiHitsToken_ = consumes(iConfig.getParameter("inputTag")); } @@ -132,6 +140,13 @@ void BtlDigiHitsValidation::analyze(const edm::Event& iEvent, const edm::EventSe meOccupancy_[iside]->Fill(global_point.z(), global_point.phi()); + if (LocalPosDebug_) { + meLocalOccupancy_[iside]->Fill(local_point.x(), local_point.y()); + meHitXlocal_[iside]->Fill(local_point.x()); + meHitYlocal_[iside]->Fill(local_point.y()); + meHitZlocal_[iside]->Fill(local_point.z()); + } + meHitX_[iside]->Fill(global_point.x()); meHitY_[iside]->Fill(global_point.y()); meHitZ_[iside]->Fill(global_point.z()); @@ -163,7 +178,6 @@ void BtlDigiHitsValidation::bookHistograms(DQMStore::IBooker& ibook, edm::Run const& run, edm::EventSetup const& iSetup) { ibook.setCurrentFolder(folder_); - // --- histograms booking meNhits_[0] = ibook.book1D("BtlNhitsL", "Number of BTL DIGI hits (L);log_{10}(N_{DIGI})", 100, 0., 5.25); @@ -173,7 +187,6 @@ void BtlDigiHitsValidation::bookHistograms(DQMStore::IBooker& ibook, meHitCharge_[1] = ibook.book1D("BtlHitChargeR", "BTL DIGI hits charge (R);Q_{DIGI} [ADC counts]", 100, 0., 1024.); meHitTime_[0] = ibook.book1D("BtlHitTimeL", "BTL DIGI hits ToA (L);ToA_{DIGI} [TDC counts]", 100, 0., 1024.); meHitTime_[1] = ibook.book1D("BtlHitTimeR", "BTL DIGI hits ToA (R);ToA_{DIGI} [TDC counts]", 100, 0., 1024.); - meOccupancy_[0] = ibook.book2D("BtlOccupancyL", "BTL DIGI hits occupancy (L);Z_{DIGI} [cm]; #phi_{DIGI} [rad]", 65, @@ -190,6 +203,24 @@ void BtlDigiHitsValidation::bookHistograms(DQMStore::IBooker& ibook, 126, -3.15, 3.15); + if (LocalPosDebug_) { + meLocalOccupancy_[0] = ibook.book2D("BtlLocalOccupancyL", + "BTL DIGI hits local occupancy (L);X_{DIGI} [cm]; Y_{DIGI} [cm]", + 100, + -10., + 10, + 60, + -3., + 3.); + meLocalOccupancy_[1] = ibook.book2D( + "BtlLocalOccupancyR", "BTL DIGI hits occupancy (R);X_{DIGI} [cm]; Y_{DIGI} [cm]", 100, -10., 10., 60, -3., 3.); + meHitXlocal_[0] = ibook.book1D("BtlHitXlocalL", "BTL DIGI local X (L);X_{DIGI}^{LOC} [cm]", 100, -10., 10.); + meHitXlocal_[1] = ibook.book1D("BtlHitXlocalR", "BTL DIGI local X (R);X_{DIGI}^{LOC} [cm]", 100, -10., 10.); + meHitYlocal_[0] = ibook.book1D("BtlHitYlocalL", "BTL DIGI local Y (L);Y_{DIGI}^{LOC} [cm]", 60, -3., 3.); + meHitYlocal_[1] = ibook.book1D("BtlHitYlocalR", "BTL DIGI local Y (R);Y_{DIGI}^{LOC} [cm]", 60, -3., 3.); + meHitZlocal_[0] = ibook.book1D("BtlHitZlocalL", "BTL DIGI local z (L);z_{DIGI}^{LOC} [cm]", 10, -1, 1); + meHitZlocal_[1] = ibook.book1D("BtlHitZlocalR", "BTL DIGI local z (R);z_{DIGI}^{LOC} [cm]", 10, -1, 1); + } meHitX_[0] = ibook.book1D("BtlHitXL", "BTL DIGI hits X (L);X_{DIGI} [cm]", 60, -120., 120.); meHitX_[1] = ibook.book1D("BtlHitXR", "BTL DIGI hits X (R);X_{DIGI} [cm]", 60, -120., 120.); @@ -258,6 +289,7 @@ void BtlDigiHitsValidation::fillDescriptions(edm::ConfigurationDescriptions& des desc.add("folder", "MTD/BTL/DigiHits"); desc.add("inputTag", edm::InputTag("mix", "FTLBarrel")); + desc.add("LocalPositionDebug", false); descriptions.add("btlDigiHitsDefault", desc); } diff --git a/Validation/MtdValidation/plugins/BtlLocalRecoValidation.cc b/Validation/MtdValidation/plugins/BtlLocalRecoValidation.cc index 244cb029326b5..5b587ca9fb638 100644 --- a/Validation/MtdValidation/plugins/BtlLocalRecoValidation.cc +++ b/Validation/MtdValidation/plugins/BtlLocalRecoValidation.cc @@ -64,7 +64,8 @@ class BtlLocalRecoValidation : public DQMEDAnalyzer { // ------------ member data ------------ const std::string folder_; - const float hitMinEnergy_; + const double hitMinEnergy_; + const bool LocalPosDebug_; edm::EDGetTokenT btlRecHitsToken_; edm::EDGetTokenT > btlSimHitsToken_; @@ -76,9 +77,16 @@ class BtlLocalRecoValidation : public DQMEDAnalyzer { MonitorElement* meHitEnergy_; MonitorElement* meHitTime_; + MonitorElement* meHitTimeError_; MonitorElement* meOccupancy_; + //local position monitoring + MonitorElement* meLocalOccupancy_; + MonitorElement* meHitXlocal_; + MonitorElement* meHitYlocal_; + MonitorElement* meHitZlocal_; + MonitorElement* meHitX_; MonitorElement* meHitY_; MonitorElement* meHitZ_; @@ -97,8 +105,8 @@ class BtlLocalRecoValidation : public DQMEDAnalyzer { MonitorElement* meTimeRes_; MonitorElement* meEnergyRes_; - MonitorElement* meTresvsE_; - MonitorElement* meEresvsE_; + MonitorElement* meTPullvsE_; + MonitorElement* meTPullvsEta_; MonitorElement* meCluTime_; MonitorElement* meCluEnergy_; @@ -111,7 +119,8 @@ class BtlLocalRecoValidation : public DQMEDAnalyzer { // ------------ constructor and destructor -------------- BtlLocalRecoValidation::BtlLocalRecoValidation(const edm::ParameterSet& iConfig) : folder_(iConfig.getParameter("folder")), - hitMinEnergy_(iConfig.getParameter("hitMinimumEnergy")) { + hitMinEnergy_(iConfig.getParameter("hitMinimumEnergy")), + LocalPosDebug_(iConfig.getParameter("LocalPositionDebug")) { btlRecHitsToken_ = consumes(iConfig.getParameter("recHitsTag")); btlSimHitsToken_ = consumes >(iConfig.getParameter("simHitsTag")); btlRecCluToken_ = consumes(iConfig.getParameter("recCluTag")); @@ -183,11 +192,18 @@ void BtlLocalRecoValidation::analyze(const edm::Event& iEvent, const edm::EventS meHitEnergy_->Fill(recHit.energy()); meHitTime_->Fill(recHit.time()); + meHitTimeError_->Fill(recHit.timeError()); meHitLongPos_->Fill(recHit.position()); meHitLongPosErr_->Fill(recHit.positionError()); meOccupancy_->Fill(global_point.z(), global_point.phi()); + if (LocalPosDebug_) { + meLocalOccupancy_->Fill(local_point.x(), local_point.y()); + meHitXlocal_->Fill(local_point.x()); + meHitYlocal_->Fill(local_point.y()); + meHitZlocal_->Fill(local_point.z()); + } meHitX_->Fill(global_point.x()); meHitY_->Fill(global_point.y()); meHitZ_->Fill(global_point.z()); @@ -207,11 +223,18 @@ void BtlLocalRecoValidation::analyze(const edm::Event& iEvent, const edm::EventS float time_res = recHit.time() - m_btlSimHits[detId.rawId()].time; float energy_res = recHit.energy() - m_btlSimHits[detId.rawId()].energy; - meTimeRes_->Fill(time_res); - meEnergyRes_->Fill(energy_res); + Local3DPoint local_point_sim(m_btlSimHits[detId.rawId()].x_local, + m_btlSimHits[detId.rawId()].y_local, + m_btlSimHits[detId.rawId()].z_local); + local_point_sim = + topo.pixelToModuleLocalPoint(local_point_sim, detId.row(topo.nrows()), detId.column(topo.nrows())); + const auto& global_point_sim = thedet->toGlobal(local_point_sim); + + meTimeRes_->Fill(time_res / m_btlSimHits[detId.rawId()].time); + meEnergyRes_->Fill(energy_res / m_btlSimHits[detId.rawId()].energy); - meTresvsE_->Fill(m_btlSimHits[detId.rawId()].energy, time_res); - meEresvsE_->Fill(m_btlSimHits[detId.rawId()].energy, energy_res); + meTPullvsEta_->Fill(fabs(global_point_sim.eta()), time_res / recHit.timeError()); + meTPullvsE_->Fill(m_btlSimHits[detId.rawId()].energy, time_res / recHit.timeError()); } n_reco_btl++; @@ -237,7 +260,7 @@ void BtlLocalRecoValidation::analyze(const edm::Event& iEvent, const edm::EventS const ProxyMTDTopology& topoproxy = static_cast(genericDet->topology()); const RectangularMTDTopology& topo = static_cast(topoproxy.specificTopology()); - Local3DPoint local_point(cluster.x() * 5.7, cluster.y() * 0.3, 0.); + Local3DPoint local_point(cluster.x() * topo.pitch().first, cluster.y() * topo.pitch().second, 0.); local_point = topo.pixelToModuleLocalPoint(local_point, cluId.row(topo.nrows()), cluId.column(topo.ncolumns())); const auto& global_point = genericDet->toGlobal(local_point); @@ -263,16 +286,21 @@ void BtlLocalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, meHitEnergy_ = ibook.book1D("BtlHitEnergy", "BTL RECO hits energy;E_{RECO} [MeV]", 100, 0., 20.); meHitTime_ = ibook.book1D("BtlHitTime", "BTL RECO hits ToA;ToA_{RECO} [ns]", 100, 0., 25.); - + meHitTimeError_ = ibook.book1D("BtlHitTimeError", "BTL RECO hits ToA error;#sigma^{ToA}_{RECO} [ns]", 50, 0., 0.1); meOccupancy_ = ibook.book2D( "BtlOccupancy", "BTL RECO hits occupancy;Z_{RECO} [cm]; #phi_{RECO} [rad]", 65, -260., 260., 126, -3.2, 3.2); - + if (LocalPosDebug_) { + meLocalOccupancy_ = ibook.book2D( + "BtlLocalOccupancy", "BTL RECO hits local occupancy;X_{RECO} [cm]; Y_{RECO} [cm]", 100, 10., 10., 60, -3., 3.); + meHitXlocal_ = ibook.book1D("BtlHitXlocal", "BTL RECO local X;X_{RECO}^{LOC} [cm]", 100, -10., 10.); + meHitYlocal_ = ibook.book1D("BtlHitYlocal", "BTL RECO local Y;Y_{RECO}^{LOC} [cm]", 60, -3, 3); + meHitZlocal_ = ibook.book1D("BtlHitZlocal", "BTL RECO local z;z_{RECO}^{LOC} [cm]", 10, -1, 1); + } meHitX_ = ibook.book1D("BtlHitX", "BTL RECO hits X;X_{RECO} [cm]", 60, -120., 120.); meHitY_ = ibook.book1D("BtlHitY", "BTL RECO hits Y;Y_{RECO} [cm]", 60, -120., 120.); meHitZ_ = ibook.book1D("BtlHitZ", "BTL RECO hits Z;Z_{RECO} [cm]", 100, -260., 260.); meHitPhi_ = ibook.book1D("BtlHitPhi", "BTL RECO hits #phi;#phi_{RECO} [rad]", 126, -3.2, 3.2); meHitEta_ = ibook.book1D("BtlHitEta", "BTL RECO hits #eta;#eta_{RECO}", 100, -1.55, 1.55); - meHitTvsE_ = ibook.bookProfile("BtlHitTvsE", "BTL RECO ToA vs energy;E_{RECO} [MeV];ToA_{RECO} [ns]", 50, 0., 20., 0., 100.); meHitEvsPhi_ = ibook.bookProfile( @@ -290,18 +318,28 @@ void BtlLocalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, meHitLongPos_ = ibook.book1D("BtlLongPos", "BTL RECO hits longitudinal position;long. pos._{RECO}", 100, -10, 10); meHitLongPosErr_ = ibook.book1D("BtlLongPosErr", "BTL RECO hits longitudinal position error; long. pos. error_{RECO}", 100, -1, 1); - - meTimeRes_ = ibook.book1D("BtlTimeRes", "BTL time resolution;T_{RECO} - T_{SIM} [ns]", 100, -0.5, 0.5); - meEnergyRes_ = ibook.book1D("BtlEnergyRes", "BTL energy resolution;E_{RECO} - E_{SIM} [MeV]", 100, -0.5, 0.5); - - meTresvsE_ = ibook.bookProfile( - "BtlTresvsE", "BTL time resolution vs E;E_{SIM} [MeV];T_{RECO}-T_{SIM} [ns]", 50, 0., 20., 0., 100.); - meEresvsE_ = ibook.bookProfile( - "BtlEresvsE", "BTL energy resolution vs E;E_{SIM} [MeV];E_{RECO}-E_{SIM} [MeV]", 50, 0., 20., 0., 100.); + meTimeRes_ = ibook.book1D("BtlTimeRes", "BTL time resolution;T_{RECO}-T_{SIM}/T_{SIM} [ns]", 100, -0.5, 0.5); + meEnergyRes_ = ibook.book1D("BtlEnergyRes", "BTL energy resolution;E_{RECO}-E_{SIM}/E_{SIM} [MeV]", 100, -0.5, 0.5); + meTPullvsE_ = ibook.bookProfile("BtlTPullvsE", + "BTL time pull vs E;E_{SIM} [MeV];T_{RECO}-T_{SIM}/#sigma_T_{RECO} [ns]", + 20, + 0., + 20., + -0.8, + 0.8, + "S"); + meTPullvsEta_ = ibook.bookProfile("BtlTPullvsEta", + "BTL time pull vs #eta;|#eta_{RECO}|;T_{RECO}-T_{SIM}/#sigma_T_{RECO} [ns]", + 32, + 0, + 1.55, + -0.8, + 0.8, + "S"); meCluTime_ = ibook.book1D("BtlCluTime", "BTL cluster time ToA;ToA [ns]", 250, 0, 25); meCluEnergy_ = ibook.book1D("BtlCluEnergy", "BTL cluster energy;E_{RECO} [MeV]", 100, 0, 20); meCluPhi_ = ibook.book1D("BtlCluPhi", "BTL cluster #phi;#phi_{RECO} [rad]", 144, -3.2, 3.2); - meCluEta_ = ibook.book1D("BtlCluEta", "BTL cluster #eta;#eta_{RECO}", 100, -1.6, 1.6); + meCluEta_ = ibook.book1D("BtlCluEta", "BTL cluster #eta;#eta_{RECO}", 100, -1.55, 1.55); meCluHits_ = ibook.book1D("BtlCluHitNumber", "BTL hits per cluster; Cluster size", 10, 0, 10); meCluZvsPhi_ = ibook.book2D( "BtlOccupancy", "BTL cluster Z vs #phi;Z_{RECO} [cm]; #phi_{RECO} [rad]", 144, -260., 260., 50, -3.2, 3.2); @@ -316,6 +354,7 @@ void BtlLocalRecoValidation::fillDescriptions(edm::ConfigurationDescriptions& de desc.add("simHitsTag", edm::InputTag("mix", "g4SimHitsFastTimerHitsBarrel")); desc.add("recCluTag", edm::InputTag("mtdClusters", "FTLBarrel")); desc.add("hitMinimumEnergy", 1.); // [MeV] + desc.add("LocalPositionDebug", false); descriptions.add("btlLocalReco", desc); } diff --git a/Validation/MtdValidation/plugins/EtlDigiHitsValidation.cc b/Validation/MtdValidation/plugins/EtlDigiHitsValidation.cc index 492a1e454b557..3a31ea77dbceb 100644 --- a/Validation/MtdValidation/plugins/EtlDigiHitsValidation.cc +++ b/Validation/MtdValidation/plugins/EtlDigiHitsValidation.cc @@ -46,6 +46,7 @@ class EtlDigiHitsValidation : public DQMEDAnalyzer { // ------------ member data ------------ const std::string folder_; + const bool LocalPosDebug_; edm::EDGetTokenT etlDigiHitsToken_; @@ -58,6 +59,10 @@ class EtlDigiHitsValidation : public DQMEDAnalyzer { MonitorElement* meOccupancy_[4]; + MonitorElement* meLocalOccupancy_[2]; //folding the two ETL discs + MonitorElement* meHitXlocal_[2]; + MonitorElement* meHitYlocal_[2]; + MonitorElement* meHitX_[4]; MonitorElement* meHitY_[4]; MonitorElement* meHitZ_[4]; @@ -73,7 +78,8 @@ class EtlDigiHitsValidation : public DQMEDAnalyzer { // ------------ constructor and destructor -------------- EtlDigiHitsValidation::EtlDigiHitsValidation(const edm::ParameterSet& iConfig) - : folder_(iConfig.getParameter("folder")) { + : folder_(iConfig.getParameter("folder")), + LocalPosDebug_(iConfig.getParameter("LocalPositionDebug")) { etlDigiHitsToken_ = consumes(iConfig.getParameter("inputTag")); } @@ -158,6 +164,19 @@ void EtlDigiHitsValidation::analyze(const edm::Event& iEvent, const edm::EventSe meHitTime_[idet]->Fill(sample.toa()); meOccupancy_[idet]->Fill(global_point.x(), global_point.y(), weight); + if (LocalPosDebug_) { + if ((idet == 0) || (idet == 1)) { + meLocalOccupancy_[0]->Fill(local_point.x(), local_point.y()); + meHitXlocal_[0]->Fill(local_point.x()); + meHitYlocal_[0]->Fill(local_point.y()); + + } else if ((idet == 2) || (idet == 3)) { + meLocalOccupancy_[1]->Fill(local_point.x(), local_point.y()); + meHitXlocal_[1]->Fill(local_point.x()); + meHitYlocal_[1]->Fill(local_point.y()); + } + } + meHitX_[idet]->Fill(global_point.x()); meHitY_[idet]->Fill(global_point.y()); meHitZ_[idet]->Fill(global_point.z()); @@ -272,7 +291,28 @@ void EtlDigiHitsValidation::bookHistograms(DQMStore::IBooker& ibook, 135, -135., 135.); - + if (LocalPosDebug_) { + meLocalOccupancy_[0] = ibook.book2D("EtlLocalOccupancyZneg", + "ETL DIGI hits local occupancy (-Z);X_{DIGI} [cm];Y_{DIGI} [cm]", + 100, + -2.2, + 2.2, + 50, + -1.1, + 1.1); + meLocalOccupancy_[1] = ibook.book2D("EtlLocalOccupancyZpos", + "ETL DIGI hits local occupancy (+Z);X_{DIGI} [cm];Y_{DIGI} [cm]", + 100, + -2.2, + 2.2, + 50, + -1.1, + 1.1); + meHitXlocal_[0] = ibook.book1D("EtlHitXlocalZneg", "ETL DIGI local X (-Z);X_{DIGI}^{LOC} [cm]", 100, -2.2, 2.2); + meHitXlocal_[1] = ibook.book1D("EtlHitXlocalZpos", "ETL DIGI local X (+Z);X_{DIGI}^{LOC} [cm]", 100, -2.2, 2.2); + meHitYlocal_[0] = ibook.book1D("EtlHitYlocalZneg", "ETL DIGI local Y (-Z);Y_{DIGI}^{LOC} [cm]", 50, -1.1, 1.1); + meHitYlocal_[1] = ibook.book1D("EtlHitYlocalZpos", "ETL DIGI local Y (-Z);Y_{DIGI}^{LOC} [cm]", 50, -1.1, 1.1); + } meHitX_[0] = ibook.book1D( "EtlHitXZnegD1", "ETL DIGI hits X (-Z, Single(topo1D)/First(topo2D) disk);X_{DIGI} [cm]", 100, -130., 130.); meHitX_[1] = ibook.book1D("EtlHitXZnegD2", "ETL DIGI hits X (-Z, Second disk);X_{DIGI} [cm]", 100, -130., 130.); @@ -312,7 +352,6 @@ void EtlDigiHitsValidation::bookHistograms(DQMStore::IBooker& ibook, meHitEta_[2] = ibook.book1D( "EtlHitEtaZposD1", "ETL DIGI hits #eta (+Z, Single(topo1D)/First(topo2D) disk);#eta_{DIGI}", 100, 1.56, 3.2); meHitEta_[3] = ibook.book1D("EtlHitEtaZposD2", "ETL DIGI hits #eta (+Z, Second disk);#eta_{DIGI}", 100, 1.56, 3.2); - meHitTvsQ_[0] = ibook.bookProfile( "EtlHitTvsQZnegD1", "ETL DIGI ToA vs charge (-Z, Single(topo1D)/First(topo2D) disk);Q_{DIGI} [ADC counts];ToA_{DIGI} [TDC counts]", @@ -477,6 +516,7 @@ void EtlDigiHitsValidation::fillDescriptions(edm::ConfigurationDescriptions& des desc.add("folder", "MTD/ETL/DigiHits"); desc.add("inputTag", edm::InputTag("mix", "FTLEndcap")); + desc.add("LocalPositionDebug", false); descriptions.add("etlDigiHitsDefault", desc); } diff --git a/Validation/MtdValidation/plugins/EtlLocalRecoValidation.cc b/Validation/MtdValidation/plugins/EtlLocalRecoValidation.cc index 2da37e10d6df5..fb65c367b5927 100644 --- a/Validation/MtdValidation/plugins/EtlLocalRecoValidation.cc +++ b/Validation/MtdValidation/plugins/EtlLocalRecoValidation.cc @@ -22,16 +22,29 @@ #include "DQMServices/Core/interface/DQMStore.h" #include "DataFormats/Common/interface/ValidHandle.h" +#include "DataFormats/Math/interface/GeantUnits.h" #include "DataFormats/ForwardDetId/interface/ETLDetId.h" #include "DataFormats/FTLRecHit/interface/FTLRecHitCollections.h" #include "DataFormats/FTLRecHit/interface/FTLClusterCollections.h" +#include "SimDataFormats/CrossingFrame/interface/CrossingFrame.h" +#include "SimDataFormats/CrossingFrame/interface/MixCollection.h" +#include "SimDataFormats/TrackingHit/interface/PSimHit.h" + #include "Geometry/Records/interface/MTDDigiGeometryRecord.h" #include "Geometry/MTDGeometryBuilder/interface/MTDGeometry.h" #include "Geometry/CommonTopologies/interface/PixelTopology.h" #include "Geometry/MTDNumberingBuilder/interface/MTDTopology.h" #include "Geometry/MTDCommonData/interface/MTDTopologyMode.h" +struct MTDHit { + float energy; + float time; + float x_local; + float y_local; + float z_local; +}; + class EtlLocalRecoValidation : public DQMEDAnalyzer { public: explicit EtlLocalRecoValidation(const edm::ParameterSet&); @@ -49,8 +62,10 @@ class EtlLocalRecoValidation : public DQMEDAnalyzer { const std::string folder_; const float hitMinEnergy1Dis_; const float hitMinEnergy2Dis_; + const bool LocalPosDebug_; edm::EDGetTokenT etlRecHitsToken_; + edm::EDGetTokenT > etlSimHitsToken_; edm::EDGetTokenT etlRecCluToken_; // --- histograms declaration @@ -58,9 +73,14 @@ class EtlLocalRecoValidation : public DQMEDAnalyzer { MonitorElement* meNhits_[4]; MonitorElement* meHitEnergy_[4]; MonitorElement* meHitTime_[4]; + MonitorElement* meHitTimeError_[4]; MonitorElement* meOccupancy_[4]; + MonitorElement* meLocalOccupancy_[2]; + MonitorElement* meHitXlocal_[2]; + MonitorElement* meHitYlocal_[2]; + MonitorElement* meHitX_[4]; MonitorElement* meHitY_[4]; MonitorElement* meHitZ_[4]; @@ -79,14 +99,21 @@ class EtlLocalRecoValidation : public DQMEDAnalyzer { MonitorElement* meCluEta_[4]; MonitorElement* meCluHits_[4]; MonitorElement* meCluOccupancy_[4]; + + MonitorElement* meTimeRes_; + MonitorElement* meEnergyRes_; + MonitorElement* meTPullvsE_; + MonitorElement* meTPullvsEta_; }; // ------------ constructor and destructor -------------- EtlLocalRecoValidation::EtlLocalRecoValidation(const edm::ParameterSet& iConfig) : folder_(iConfig.getParameter("folder")), hitMinEnergy1Dis_(iConfig.getParameter("hitMinimumEnergy1Dis")), - hitMinEnergy2Dis_(iConfig.getParameter("hitMinimumEnergy2Dis")) { + hitMinEnergy2Dis_(iConfig.getParameter("hitMinimumEnergy2Dis")), + LocalPosDebug_(iConfig.getParameter("LocalPositionDebug")) { etlRecHitsToken_ = consumes(iConfig.getParameter("recHitsTag")); + etlSimHitsToken_ = consumes >(iConfig.getParameter("simHitsTag")); etlRecCluToken_ = consumes(iConfig.getParameter("recCluTag")); } @@ -96,6 +123,8 @@ EtlLocalRecoValidation::~EtlLocalRecoValidation() {} void EtlLocalRecoValidation::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { using namespace edm; using namespace std; + using namespace geant_units::operators; + edm::ESHandle topologyHandle; iSetup.get().get(topologyHandle); const MTDTopology* topology = topologyHandle.product(); @@ -114,10 +143,50 @@ void EtlLocalRecoValidation::analyze(const edm::Event& iEvent, const edm::EventS const MTDGeometry* geom = geometryHandle.product(); auto etlRecHitsHandle = makeValid(iEvent.getHandle(etlRecHitsToken_)); + auto etlSimHitsHandle = makeValid(iEvent.getHandle(etlSimHitsToken_)); auto etlRecCluHandle = makeValid(iEvent.getHandle(etlRecCluToken_)); + MixCollection etlSimHits(etlSimHitsHandle.product()); + + // --- Loop over the ETL SIM hits + std::unordered_map m_etlSimHits[4]; + for (auto const& simHit : etlSimHits) { + // --- Use only hits compatible with the in-time bunch-crossing + if (simHit.tof() < 0 || simHit.tof() > 25.) + continue; + + ETLDetId id = simHit.detUnitId(); + + int idet = -1; + + if ((id.zside() == -1) && (id.nDisc() == 1)) + idet = 0; + else if ((id.zside() == -1) && (id.nDisc() == 2)) + idet = 1; + else if ((id.zside() == 1) && (id.nDisc() == 1)) + idet = 2; + else if ((id.zside() == 1) && (id.nDisc() == 2)) + idet = 3; + else + continue; + + auto simHitIt = m_etlSimHits[idet].emplace(id.rawId(), MTDHit()).first; + + // --- Accumulate the energy (in MeV) of SIM hits in the same detector cell + (simHitIt->second).energy += convertUnitsTo(0.001_MeV, simHit.energyLoss()); + + // --- Get the time of the first SIM hit in the cell + if ((simHitIt->second).time == 0 || simHit.tof() < (simHitIt->second).time) { + (simHitIt->second).time = simHit.tof(); + + auto hit_pos = simHit.entryPoint(); + (simHitIt->second).x_local = hit_pos.x(); + (simHitIt->second).y_local = hit_pos.y(); + (simHitIt->second).z_local = hit_pos.z(); + } - // --- Loop over the ELT RECO hits + } // simHit loop + // --- Loop over the ELT RECO hits unsigned int n_reco_etl[4] = {0, 0, 0, 0}; for (const auto& recHit : *etlRecHitsHandle) { double weight = 1.0; @@ -165,8 +234,22 @@ void EtlLocalRecoValidation::analyze(const edm::Event& iEvent, const edm::EventS meHitEnergy_[idet]->Fill(recHit.energy()); meHitTime_[idet]->Fill(recHit.time()); + meHitTimeError_[idet]->Fill(recHit.timeError()); meOccupancy_[idet]->Fill(global_point.x(), global_point.y(), weight); + + if (LocalPosDebug_) { + if ((idet == 0) || (idet == 1)) { + meLocalOccupancy_[0]->Fill(local_point.x(), local_point.y()); + meHitXlocal_[0]->Fill(local_point.x()); + meHitYlocal_[0]->Fill(local_point.y()); + } + if ((idet == 2) || (idet == 3)) { + meLocalOccupancy_[1]->Fill(local_point.x(), local_point.y()); + meHitXlocal_[1]->Fill(local_point.x()); + meHitYlocal_[1]->Fill(local_point.y()); + } + } meHitX_[idet]->Fill(global_point.x()); meHitY_[idet]->Fill(global_point.y()); meHitZ_[idet]->Fill(global_point.z()); @@ -178,6 +261,21 @@ void EtlLocalRecoValidation::analyze(const edm::Event& iEvent, const edm::EventS meHitTvsPhi_[idet]->Fill(global_point.phi(), recHit.time()); meHitTvsEta_[idet]->Fill(global_point.eta(), recHit.time()); + // Resolution histograms + if (m_etlSimHits[idet].count(detId.rawId()) == 1) { + if ((topo1Dis && m_etlSimHits[idet][detId.rawId()].energy > hitMinEnergy1Dis_) || + (topo2Dis && m_etlSimHits[idet][detId.rawId()].energy > hitMinEnergy2Dis_)) { + float time_res = recHit.time() - m_etlSimHits[idet][detId.rawId()].time; + float energy_res = recHit.energy() - m_etlSimHits[idet][detId.rawId()].energy; + + meTimeRes_->Fill(time_res / m_etlSimHits[idet][detId.rawId()].time); + meEnergyRes_->Fill(energy_res / m_etlSimHits[idet][detId.rawId()].energy); + + meTPullvsEta_->Fill(fabs(global_point.eta()), time_res / recHit.timeError()); + meTPullvsE_->Fill(m_etlSimHits[idet][detId.rawId()].energy, time_res / recHit.timeError()); + } + } + n_reco_etl[idet]++; } // recHit loop @@ -284,6 +382,22 @@ void EtlLocalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, meHitTime_[2] = ibook.book1D( "EtlHitTimeZposD1", "ETL RECO hits ToA (+Z, Single(topo1D)/First(topo2D) disk);ToA_{RECO} [ns]", 100, 0., 25.); meHitTime_[3] = ibook.book1D("EtlHitTimeZposD2", "ETL RECO hits ToA (+Z, Second disk);ToA_{RECO} [ns]", 100, 0., 25.); + meHitTimeError_[0] = + ibook.book1D("EtlHitTimeErrorZnegD1", + "ETL RECO hits ToA error (-Z, Single(topo1D)/First(topo2D) disk);#sigma^{ToA}_{RECO} [ns]", + 50, + 0., + 0.1); + meHitTimeError_[1] = ibook.book1D( + "EtlHitTimeErrorZnegD2", "ETL RECO hits ToA error(-Z, Second disk);#sigma^{ToA}_{RECO} [ns]", 50, 0., 0.1); + meHitTimeError_[2] = + ibook.book1D("EtlHitTimeErrorZposD1", + "ETL RECO hits ToA error (+Z, Single(topo1D)/First(topo2D) disk);#sigma^{ToA}_{RECO} [ns]", + 50, + 0., + 0.1); + meHitTimeError_[3] = ibook.book1D( + "EtlHitTimeErrorZposD2", "ETL RECO hits ToA error(+Z, Second disk);#sigma^{ToA}_{RECO} [ns]", 50, 0., 0.1); meOccupancy_[0] = ibook.book2D("EtlOccupancyZnegD1", @@ -319,7 +433,28 @@ void EtlLocalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, 135, -135., 135.); - + if (LocalPosDebug_) { + meLocalOccupancy_[0] = ibook.book2D("EtlLocalOccupancyZneg", + "ETL RECO hits local occupancy (-Z);X_{RECO} [cm];Y_{RECO} [cm]", + 100, + -2.2, + 2.2, + 50, + -1.1, + 1.1); + meLocalOccupancy_[1] = ibook.book2D("EtlLocalOccupancyZpos", + "ETL RECO hits local occupancy (+Z);X_{RECO} [cm];Y_{RECO} [cm]", + 100, + -2.2, + 2.2, + 50, + -1.1, + 1.1); + meHitXlocal_[0] = ibook.book1D("EtlHitXlocalZneg", "ETL RECO local X (-Z);X_{RECO}^{LOC} [cm]", 100, -2.2, 2.2); + meHitXlocal_[1] = ibook.book1D("EtlHitXlocalZpos", "ETL RECO local X (+Z);X_{RECO}^{LOC} [cm]", 100, -2.2, 2.2); + meHitYlocal_[0] = ibook.book1D("EtlHitYlocalZneg", "ETL RECO local Y (-Z);Y_{RECO}^{LOC} [cm]", 50, -1.1, 1.1); + meHitYlocal_[1] = ibook.book1D("EtlHitYlocalZpos", "ETL RECO local Y (-Z);Y_{RECO}^{LOC} [cm]", 50, -1.1, 1.1); + } meHitX_[0] = ibook.book1D( "EtlHitXZnegD1", "ETL RECO hits X (-Z, Single(topo1D)/First(topo2D) Disk);X_{RECO} [cm]", 100, -130., 130.); meHitX_[1] = ibook.book1D("EtlHitXZnegD2", "ETL RECO hits X (-Z, Second Disk);X_{RECO} [cm]", 100, -130., 130.); @@ -352,7 +487,8 @@ void EtlLocalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, meHitEta_[2] = ibook.book1D( "EtlHitEtaZposD1", "ETL RECO hits #eta (+Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO}", 100, 1.56, 3.2); meHitEta_[3] = ibook.book1D("EtlHitEtaZposD2", "ETL RECO hits #eta (+Z, Second Disk);#eta_{RECO}", 100, 1.56, 3.2); - + meTimeRes_ = ibook.book1D("EtlTimeRes", "ETL time resolution;T_{RECO}-T_{SIM}/T_{SIM} [ns]", 100, -0.5, 0.5); + meEnergyRes_ = ibook.book1D("EtlEnergyRes", "ETL energy resolution;E_{RECO}-E_{SIM}/E_{SIM} [MeV]", 100, -0.5, 0.5); meHitTvsE_[0] = ibook.bookProfile( "EtlHitTvsEZnegD1", "ETL RECO time vs energy (-Z, Single(topo1D)/First(topo2D) Disk);E_{RECO} [MeV];ToA_{RECO} [ns]", @@ -503,6 +639,22 @@ void EtlLocalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, 3.2, 0., 100.); + meTPullvsE_ = ibook.bookProfile("EtlTPullvsE", + "ETL time pull vs E;E_{SIM} [MeV];T_{RECO}-T_{SIM}/#sigma_T_{RECO} [ns]", + 20, + 0., + 2., + -0.8, + 0.8, + "S"); + meTPullvsEta_ = ibook.bookProfile("EtlTPullvsEta", + "ETL time pull vs #eta;|#eta_{RECO}|;T_{RECO}-T_{SIM}/#sigma_T_{RECO} [ns]", + 26, + 1.65, + 3.0, + -0.8, + 0.8, + "S"); meCluTime_[0] = ibook.book1D("EtlCluTimeZnegD1", "ETL cluster ToA (-Z, Single(topo1D)/First(topo2D) Disk);ToA [ns]", 250, 0, 25); meCluTime_[1] = ibook.book1D("EtlCluTimeZnegD2", "ETL cluster ToA (-Z, Second Disk);ToA [ns]", 250, 0, 25); @@ -581,9 +733,11 @@ void EtlLocalRecoValidation::fillDescriptions(edm::ConfigurationDescriptions& de desc.add("folder", "MTD/ETL/LocalReco"); desc.add("recHitsTag", edm::InputTag("mtdRecHits", "FTLEndcap")); + desc.add("simHitsTag", edm::InputTag("mix", "g4SimHitsFastTimerHitsEndcap")); desc.add("recCluTag", edm::InputTag("mtdClusters", "FTLEndcap")); desc.add("hitMinimumEnergy1Dis", 1.); // [MeV] desc.add("hitMinimumEnergy2Dis", 0.001); // [MeV] + desc.add("LocalPositionDebug", false); descriptions.add("etlLocalReco", desc); } diff --git a/Validation/MtdValidation/plugins/MtdGlobalRecoValidation.cc b/Validation/MtdValidation/plugins/MtdGlobalRecoValidation.cc index 62675608c0b9f..d9bec2c80d45a 100644 --- a/Validation/MtdValidation/plugins/MtdGlobalRecoValidation.cc +++ b/Validation/MtdValidation/plugins/MtdGlobalRecoValidation.cc @@ -4,6 +4,7 @@ #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "DataFormats/Common/interface/ValueMap.h" #include "DQMServices/Core/interface/DQMEDAnalyzer.h" #include "DQMServices/Core/interface/DQMStore.h" @@ -21,6 +22,7 @@ #include "DataFormats/TrackReco/interface/Track.h" #include "DataFormats/VertexReco/interface/Vertex.h" +#include "DataFormats/TrackReco/interface/TrackFwd.h" #include "Geometry/Records/interface/MTDDigiGeometryRecord.h" #include "Geometry/Records/interface/MTDTopologyRcd.h" @@ -49,9 +51,16 @@ class MtdGlobalRecoValidation : public DQMEDAnalyzer { const float trackMinEta_; const float trackMaxEta_; + edm::EDGetTokenT GenRecTrackToken_; edm::EDGetTokenT RecTrackToken_; edm::EDGetTokenT> RecVertexToken_; + edm::EDGetTokenT> pathLengthToken_; + + edm::EDGetTokenT> t0SafePidToken_; + edm::EDGetTokenT> Sigmat0SafePidToken_; + edm::EDGetTokenT> trackMVAQualToken_; + MonitorElement* meBTLTrackRPTime_; MonitorElement* meBTLTrackEffEtaTot_; MonitorElement* meBTLTrackEffPhiTot_; @@ -59,17 +68,22 @@ class MtdGlobalRecoValidation : public DQMEDAnalyzer { MonitorElement* meBTLTrackEffEtaMtd_; MonitorElement* meBTLTrackEffPhiMtd_; MonitorElement* meBTLTrackEffPtMtd_; + MonitorElement* meBTLTrackPtRes_; - MonitorElement* meETLTrackRPTime_[4]; - MonitorElement* meETLTrackNumHits_[4]; + MonitorElement* meETLTrackRPTime_; MonitorElement* meETLTrackEffEtaTot_[2]; MonitorElement* meETLTrackEffPhiTot_[2]; MonitorElement* meETLTrackEffPtTot_[2]; MonitorElement* meETLTrackEffEtaMtd_[2]; MonitorElement* meETLTrackEffPhiMtd_[2]; MonitorElement* meETLTrackEffPtMtd_[2]; + MonitorElement* meETLTrackPtRes_; + MonitorElement* meTrackt0SafePid_; + MonitorElement* meTrackSigmat0SafePid_; MonitorElement* meTrackNumHits_; + MonitorElement* meTrackMVAQual_; + MonitorElement* meTrackPathLenghtvsEta_; MonitorElement* meVerNumber_; MonitorElement* meVerZ_; @@ -82,8 +96,13 @@ MtdGlobalRecoValidation::MtdGlobalRecoValidation(const edm::ParameterSet& iConfi trackMinEnergy_(iConfig.getParameter("trackMinimumEnergy")), trackMinEta_(iConfig.getParameter("trackMinimumEta")), trackMaxEta_(iConfig.getParameter("trackMaximumEta")) { + GenRecTrackToken_ = consumes(iConfig.getParameter("inputTagG")); RecTrackToken_ = consumes(iConfig.getParameter("inputTagT")); RecVertexToken_ = consumes>(iConfig.getParameter("inputTagV")); + pathLengthToken_ = consumes>(iConfig.getParameter("pathLengthSrc")); + t0SafePidToken_ = consumes>(iConfig.getParameter("t0SafePID")); + Sigmat0SafePidToken_ = consumes>(iConfig.getParameter("sigmat0SafePID")); + trackMVAQualToken_ = consumes>(iConfig.getParameter("trackMVAQual")); } MtdGlobalRecoValidation::~MtdGlobalRecoValidation() {} @@ -107,124 +126,155 @@ void MtdGlobalRecoValidation::analyze(const edm::Event& iEvent, const edm::Event topo2Dis = true; } + auto GenRecTrackHandle = makeValid(iEvent.getHandle(GenRecTrackToken_)); auto RecTrackHandle = makeValid(iEvent.getHandle(RecTrackToken_)); auto RecVertexHandle = makeValid(iEvent.getHandle(RecVertexToken_)); + const auto& t0Safe = iEvent.get(t0SafePidToken_); + const auto& Sigmat0Safe = iEvent.get(Sigmat0SafePidToken_); + const auto& mtdQualMVA = iEvent.get(trackMVAQualToken_); + const auto& pathLength = iEvent.get(pathLengthToken_); + + unsigned int index = 0; // --- Loop over all RECO tracks --- - for (const auto& track : *RecTrackHandle) { - if (track.pt() < trackMinEnergy_) - continue; - - if (fabs(track.eta()) < trackMinEta_) { - // --- all BTL tracks (with and without hit in MTD) --- - meBTLTrackEffEtaTot_->Fill(track.eta()); - meBTLTrackEffPhiTot_->Fill(track.phi()); - meBTLTrackEffPtTot_->Fill(track.pt()); - - bool MTDBtl = false; - int numMTDBtlvalidhits = 0; - for (const auto hit : track.recHits()) { - if (hit->isValid() == false) - continue; - MTDDetId Hit = hit->geographicalId(); - if ((Hit.det() == 6) && (Hit.subdetId() == 1) && (Hit.mtdSubDetector() == 1)) { - MTDBtl = true; - numMTDBtlvalidhits++; - } - } - meTrackNumHits_->Fill(numMTDBtlvalidhits); - - // --- keeping only tracks with last hit in MTD --- - if (MTDBtl == true) { - meBTLTrackEffEtaMtd_->Fill(track.eta()); - meBTLTrackEffPhiMtd_->Fill(track.phi()); - meBTLTrackEffPtMtd_->Fill(track.pt()); - meBTLTrackRPTime_->Fill(track.t0()); - } - } - - else { - // --- all ETL tracks (with and without hit in MTD) --- - if ((track.eta() < -trackMinEta_) && (track.eta() > -trackMaxEta_)) { - meETLTrackEffEtaTot_[0]->Fill(track.eta()); - meETLTrackEffPhiTot_[0]->Fill(track.phi()); - meETLTrackEffPtTot_[0]->Fill(track.pt()); - } + for (const auto& trackGen : *GenRecTrackHandle) { + const reco::TrackRef trackref(iEvent.getHandle(GenRecTrackToken_), index); + index++; + + unsigned int MTDindex = 0; + for (const auto& track : *RecTrackHandle) { + const reco::TrackRef mtdTrackref = reco::TrackRef(iEvent.getHandle(RecTrackToken_), MTDindex); + MTDindex++; + + if (track.pt() < trackMinEnergy_) + continue; - if ((track.eta() > trackMinEta_) && (track.eta() < trackMaxEta_)) { - meETLTrackEffEtaTot_[1]->Fill(track.eta()); - meETLTrackEffPhiTot_[1]->Fill(track.phi()); - meETLTrackEffPtTot_[1]->Fill(track.pt()); + if (mtdQualMVA[trackref] == -1) { + continue; } - bool MTDEtlZnegD1 = false; - bool MTDEtlZnegD2 = false; - bool MTDEtlZposD1 = false; - bool MTDEtlZposD2 = false; - int numMTDEtlvalidhits = 0; - for (const auto hit : track.recHits()) { - if (hit->isValid() == false) - continue; - MTDDetId Hit = hit->geographicalId(); - if ((Hit.det() == 6) && (Hit.subdetId() == 1) && (Hit.mtdSubDetector() == 2)) { - ETLDetId ETLHit = hit->geographicalId(); - - if (topo2Dis) { - if ((ETLHit.zside() == -1) && (ETLHit.nDisc() == 1)) { - MTDEtlZnegD1 = true; - meETLTrackRPTime_[0]->Fill(track.t0()); - numMTDEtlvalidhits++; - } - if ((ETLHit.zside() == -1) && (ETLHit.nDisc() == 2)) { - MTDEtlZnegD2 = true; - meETLTrackRPTime_[1]->Fill(track.t0()); - numMTDEtlvalidhits++; - } - if ((ETLHit.zside() == 1) && (ETLHit.nDisc() == 1)) { - MTDEtlZposD1 = true; - meETLTrackRPTime_[2]->Fill(track.t0()); - numMTDEtlvalidhits++; - } - if ((ETLHit.zside() == 1) && (ETLHit.nDisc() == 2)) { - MTDEtlZposD2 = true; - meETLTrackRPTime_[3]->Fill(track.t0()); - numMTDEtlvalidhits++; - } + meTrackt0SafePid_->Fill(t0Safe[trackref]); + meTrackSigmat0SafePid_->Fill(Sigmat0Safe[trackref]); + meTrackMVAQual_->Fill(mtdQualMVA[trackref]); + + meTrackPathLenghtvsEta_->Fill(std::fabs(track.eta()), pathLength[mtdTrackref]); + + if (fabs(track.eta()) < trackMinEta_) { + // --- all BTL tracks (with and without hit in MTD) --- + meBTLTrackEffEtaTot_->Fill(track.eta()); + meBTLTrackEffPhiTot_->Fill(track.phi()); + meBTLTrackEffPtTot_->Fill(track.pt()); + + bool MTDBtl = false; + int numMTDBtlvalidhits = 0; + for (const auto hit : track.recHits()) { + if (hit->isValid() == false) + continue; + MTDDetId Hit = hit->geographicalId(); + if ((Hit.det() == 6) && (Hit.subdetId() == 1) && (Hit.mtdSubDetector() == 1)) { + MTDBtl = true; + numMTDBtlvalidhits++; } + } + meTrackNumHits_->Fill(numMTDBtlvalidhits); + + // --- keeping only tracks with last hit in MTD --- + if (MTDBtl == true) { + meBTLTrackEffEtaMtd_->Fill(track.eta()); + meBTLTrackEffPhiMtd_->Fill(track.phi()); + meBTLTrackEffPtMtd_->Fill(track.pt()); + meBTLTrackRPTime_->Fill(track.t0()); + meBTLTrackPtRes_->Fill((trackGen.pt() - track.pt()) / trackGen.pt()); + } + } //loop over (geometrical) BTL tracks + + else { + // --- all ETL tracks (with and without hit in MTD) --- + if ((track.eta() < -trackMinEta_) && (track.eta() > -trackMaxEta_)) { + meETLTrackEffEtaTot_[0]->Fill(track.eta()); + meETLTrackEffPhiTot_[0]->Fill(track.phi()); + meETLTrackEffPtTot_[0]->Fill(track.pt()); + } + + if ((track.eta() > trackMinEta_) && (track.eta() < trackMaxEta_)) { + meETLTrackEffEtaTot_[1]->Fill(track.eta()); + meETLTrackEffPhiTot_[1]->Fill(track.phi()); + meETLTrackEffPtTot_[1]->Fill(track.pt()); + } - if (topo1Dis) { - if (ETLHit.zside() == -1) { - MTDEtlZnegD1 = true; - meETLTrackRPTime_[0]->Fill(track.t0()); - numMTDEtlvalidhits++; + bool MTDEtlZnegD1 = false; + bool MTDEtlZnegD2 = false; + bool MTDEtlZposD1 = false; + bool MTDEtlZposD2 = false; + int numMTDEtlvalidhits = 0; + for (const auto hit : track.recHits()) { + if (hit->isValid() == false) + continue; + MTDDetId Hit = hit->geographicalId(); + if ((Hit.det() == 6) && (Hit.subdetId() == 1) && (Hit.mtdSubDetector() == 2)) { + ETLDetId ETLHit = hit->geographicalId(); + + if (topo2Dis) { + if ((ETLHit.zside() == -1) && (ETLHit.nDisc() == 1)) { + MTDEtlZnegD1 = true; + meETLTrackRPTime_->Fill(track.t0()); + meETLTrackPtRes_->Fill((trackGen.pt() - track.pt()) / trackGen.pt()); + numMTDEtlvalidhits++; + } + if ((ETLHit.zside() == -1) && (ETLHit.nDisc() == 2)) { + MTDEtlZnegD2 = true; + meETLTrackRPTime_->Fill(track.t0()); + meETLTrackPtRes_->Fill((trackGen.pt() - track.pt()) / trackGen.pt()); + numMTDEtlvalidhits++; + } + if ((ETLHit.zside() == 1) && (ETLHit.nDisc() == 1)) { + MTDEtlZposD1 = true; + meETLTrackRPTime_->Fill(track.t0()); + meETLTrackPtRes_->Fill((trackGen.pt() - track.pt()) / trackGen.pt()); + numMTDEtlvalidhits++; + } + if ((ETLHit.zside() == 1) && (ETLHit.nDisc() == 2)) { + MTDEtlZposD2 = true; + meETLTrackRPTime_->Fill(track.t0()); + meETLTrackPtRes_->Fill((trackGen.pt() - track.pt()) / trackGen.pt()); + numMTDEtlvalidhits++; + } } - if (ETLHit.zside() == 1) { - MTDEtlZposD1 = true; - meETLTrackRPTime_[2]->Fill(track.t0()); - numMTDEtlvalidhits++; + + if (topo1Dis) { + if (ETLHit.zside() == -1) { + MTDEtlZnegD1 = true; + meETLTrackRPTime_->Fill(track.t0()); + numMTDEtlvalidhits++; + } + if (ETLHit.zside() == 1) { + MTDEtlZposD1 = true; + meETLTrackRPTime_->Fill(track.t0()); + numMTDEtlvalidhits++; + } } } } - } - meTrackNumHits_->Fill(-numMTDEtlvalidhits); - - // --- keeping only tracks with last hit in MTD --- - if ((track.eta() < -trackMinEta_) && (track.eta() > -trackMaxEta_)) { - if ((MTDEtlZnegD1 == true) || (MTDEtlZnegD2 == true)) { - meETLTrackEffEtaMtd_[0]->Fill(track.eta()); - meETLTrackEffPhiMtd_[0]->Fill(track.phi()); - meETLTrackEffPtMtd_[0]->Fill(track.pt()); + meTrackNumHits_->Fill(-numMTDEtlvalidhits); + + // --- keeping only tracks with last hit in MTD --- + if ((track.eta() < -trackMinEta_) && (track.eta() > -trackMaxEta_)) { + if ((MTDEtlZnegD1 == true) || (MTDEtlZnegD2 == true)) { + meETLTrackEffEtaMtd_[0]->Fill(track.eta()); + meETLTrackEffPhiMtd_[0]->Fill(track.phi()); + meETLTrackEffPtMtd_[0]->Fill(track.pt()); + } } - } - if ((track.eta() > trackMinEta_) && (track.eta() < trackMaxEta_)) { - if ((MTDEtlZposD1 == true) || (MTDEtlZposD2 == true)) { - meETLTrackEffEtaMtd_[1]->Fill(track.eta()); - meETLTrackEffPhiMtd_[1]->Fill(track.phi()); - meETLTrackEffPtMtd_[1]->Fill(track.pt()); + if ((track.eta() > trackMinEta_) && (track.eta() < trackMaxEta_)) { + if ((MTDEtlZposD1 == true) || (MTDEtlZposD2 == true)) { + meETLTrackEffEtaMtd_[1]->Fill(track.eta()); + meETLTrackEffPhiMtd_[1]->Fill(track.phi()); + meETLTrackEffPtMtd_[1]->Fill(track.pt()); + } } } - } - } //RECO tracks loop + } //RECO MTD tracks + } //RECO GEN tracks loop // --- Loop over the RECO vertices --- int nv = 0; @@ -247,6 +297,9 @@ void MtdGlobalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, // histogram booking meBTLTrackRPTime_ = ibook.book1D("TrackBTLRPTime", "Track t0 with respect to R.P.;t0 [ns]", 100, -1, 3); + meTrackt0SafePid_ = ibook.book1D("Trackt0SafePID", "Track t0 Safe as stored in TofPid;t0 [ns]", 100, -1, 1); + meTrackSigmat0SafePid_ = + ibook.book1D("TrackSigmat0SafePID", "Sigmat0 Safe as stored in TofPid; #sigma_{t0} [ns]", 100, -0.02, 0.06); meBTLTrackEffEtaTot_ = ibook.book1D("TrackBTLEffEtaTot", "Track efficiency vs eta (Tot);#eta_{RECO}", 100, -1.6, 1.6); meBTLTrackEffPhiTot_ = ibook.book1D("TrackBTLEffPhiTot", "Track efficiency vs phi (Tot);#phi_{RECO} [rad]", 100, -3.2, 3.2); @@ -255,14 +308,9 @@ void MtdGlobalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, meBTLTrackEffPhiMtd_ = ibook.book1D("TrackBTLEffPhiMtd", "Track efficiency vs phi (Mtd);#phi_{RECO} [rad]", 100, -3.2, 3.2); meBTLTrackEffPtMtd_ = ibook.book1D("TrackBTLEffPtMtd", "Track efficiency vs pt (Mtd);pt_{RECO} [GeV]", 50, 0, 10); - meETLTrackRPTime_[0] = - ibook.book1D("TrackETLRPTimeZnegD1", "Track t0 with respect to R.P. (-Z, First Disk);t0 [ns]", 100, -1, 3); - meETLTrackRPTime_[1] = - ibook.book1D("TrackETLRPTimeZnegD2", "Track t0 with respect to R.P. (-Z, Second Disk);t0 [ns]", 100, -1, 3); - meETLTrackRPTime_[2] = - ibook.book1D("TrackETLRPTimeZposD1", "Track t0 with respect to R.P. (+Z, First Disk);t0 [ns]", 100, -1, 3); - meETLTrackRPTime_[3] = - ibook.book1D("TrackETLRPTimeZposD2", "Track t0 with respect to R.P. (+Z, Second Disk);t0 [ns]", 100, -1, 3); + meBTLTrackPtRes_ = + ibook.book1D("TrackBTLPtRes", "Track pT resolution ;pT_{Gentrack}-pT_{MTDtrack}/pT_{Gentrack} ", 100, -0.1, 0.1); + meETLTrackRPTime_ = ibook.book1D("TrackETLRPTime", "Track t0 with respect to R.P.;t0 [ns]", 100, -1, 3); meETLTrackEffEtaTot_[0] = ibook.book1D("TrackETLEffEtaTotZneg", "Track efficiency vs eta (Tot) (-Z);#eta_{RECO}", 100, -3.2, -1.4); meETLTrackEffEtaTot_[1] = @@ -287,7 +335,12 @@ void MtdGlobalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, ibook.book1D("TrackETLEffPtMtdZneg", "Track efficiency vs pt (Mtd) (-Z);pt_{RECO} [GeV]", 50, 0, 10); meETLTrackEffPtMtd_[1] = ibook.book1D("TrackETLEffPtMtdZpos", "Track efficiency vs pt (Mtd) (+Z);pt_{RECO} [GeV]", 50, 0, 10); + meETLTrackPtRes_ = + ibook.book1D("TrackETLPtRes", "Track pT resolution;pT_{Gentrack}-pT_{MTDtrack}/pT_{Gentrack} ", 100, -0.1, 0.1); meTrackNumHits_ = ibook.book1D("TrackNumHits", "Number of valid MTD hits per track ; Number of hits", 10, -5, 5); + meTrackMVAQual_ = ibook.book1D("TrackMVAQual", "Track MVA Quality as stored in Value Map ; MVAQual", 100, 0, 1); + meTrackPathLenghtvsEta_ = ibook.bookProfile( + "TrackPathLenghtvsEta", "MTD Track pathlength vs MTD track Eta;|#eta|;Pathlength", 100, 0, 3.2, 100.0, 400.0, "S"); meVerZ_ = ibook.book1D("VerZ", "RECO Vertex Z;Z_{RECO} [cm]", 180, -18, 18); meVerTime_ = ibook.book1D("VerTime", "RECO Vertex Time;t0 [ns]", 100, -1, 1); meVerNumber_ = ibook.book1D("VerNumber", "RECO Vertex Number: Number of vertices", 100, 0, 500); @@ -299,8 +352,15 @@ void MtdGlobalRecoValidation::fillDescriptions(edm::ConfigurationDescriptions& d edm::ParameterSetDescription desc; desc.add("folder", "MTD/GlobalReco"); + desc.add("inputTagG", edm::InputTag("generalTracks", "")); desc.add("inputTagT", edm::InputTag("trackExtenderWithMTD", "")); desc.add("inputTagV", edm::InputTag("offlinePrimaryVertices4D", "")); + desc.add("t0Src", edm::InputTag("trackExtenderWithMTD:generalTrackt0", "")); + desc.add("sigmat0Src", edm::InputTag("trackExtenderWithMTD:generalTracksigmat0", "")); + desc.add("pathLengthSrc", edm::InputTag("trackExtenderWithMTD", "pathLength")); + desc.add("t0SafePID", edm::InputTag("tofPID:t0safe", "")); + desc.add("sigmat0SafePID", edm::InputTag("tofPID:sigmat0safe", "")); + desc.add("trackMVAQual", edm::InputTag("mtdTrackQualityMVA:mtdQualMVA", "")); desc.add("trackMinimumEnergy", 1.0); // [GeV] desc.add("trackMinimumEta", 1.5); desc.add("trackMaximumEta", 3.2); From fc2a9267fce280578dab75c369108d0d7fd0d2fb Mon Sep 17 00:00:00 2001 From: Giulia Sorrentino Date: Tue, 23 Mar 2021 10:51:51 +0100 Subject: [PATCH 2/8] Update track validation plugin --- .../Configuration/python/mtdSimValid_cff.py | 4 +- ...RecoHarvester.cc => MtdTracksHarvester.cc} | 22 +- ...coValidation.cc => MtdTracksValidation.cc} | 318 +++++++++--------- .../python/MtdPostProcessor_cff.py | 4 +- .../MtdValidation/test/mtdValidation_cfg.py | 2 +- 5 files changed, 183 insertions(+), 167 deletions(-) rename Validation/MtdValidation/plugins/{MtdGlobalRecoHarvester.cc => MtdTracksHarvester.cc} (94%) rename Validation/MtdValidation/plugins/{MtdGlobalRecoValidation.cc => MtdTracksValidation.cc} (57%) diff --git a/Validation/Configuration/python/mtdSimValid_cff.py b/Validation/Configuration/python/mtdSimValid_cff.py index 34aa1ca875322..8c902769e92a4 100644 --- a/Validation/Configuration/python/mtdSimValid_cff.py +++ b/Validation/Configuration/python/mtdSimValid_cff.py @@ -7,8 +7,8 @@ from Validation.MtdValidation.etlLocalReco_cfi import etlLocalReco from Validation.MtdValidation.etlSimHits_cfi import etlSimHits from Validation.MtdValidation.etlDigiHits_cfi import etlDigiHits -from Validation.MtdValidation.globalReco_cfi import globalReco +from Validation.MtdValidation.mtdTracks_cfi import mtdTracks mtdSimValid = cms.Sequence(btlSimHits + etlSimHits ) mtdDigiValid = cms.Sequence(btlDigiHits + etlDigiHits) -mtdRecoValid = cms.Sequence(btlLocalReco + etlLocalReco + globalReco) +mtdRecoValid = cms.Sequence(btlLocalReco + etlLocalReco + mtdTracks) diff --git a/Validation/MtdValidation/plugins/MtdGlobalRecoHarvester.cc b/Validation/MtdValidation/plugins/MtdTracksHarvester.cc similarity index 94% rename from Validation/MtdValidation/plugins/MtdGlobalRecoHarvester.cc rename to Validation/MtdValidation/plugins/MtdTracksHarvester.cc index 57b0a3b830559..112f5bd263980 100644 --- a/Validation/MtdValidation/plugins/MtdGlobalRecoHarvester.cc +++ b/Validation/MtdValidation/plugins/MtdTracksHarvester.cc @@ -10,10 +10,10 @@ #include "DataFormats/ForwardDetId/interface/ETLDetId.h" -class MtdGlobalRecoHarvester : public DQMEDHarvester { +class MtdTracksHarvester : public DQMEDHarvester { public: - explicit MtdGlobalRecoHarvester(const edm::ParameterSet& iConfig); - ~MtdGlobalRecoHarvester() override; + explicit MtdTracksHarvester(const edm::ParameterSet& iConfig); + ~MtdTracksHarvester() override; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); @@ -33,13 +33,13 @@ class MtdGlobalRecoHarvester : public DQMEDHarvester { }; // ------------ constructor and destructor -------------- -MtdGlobalRecoHarvester::MtdGlobalRecoHarvester(const edm::ParameterSet& iConfig) +MtdTracksHarvester::MtdTracksHarvester(const edm::ParameterSet& iConfig) : folder_(iConfig.getParameter("folder")) {} -MtdGlobalRecoHarvester::~MtdGlobalRecoHarvester() {} +MtdTracksHarvester::~MtdTracksHarvester() {} // ------------ endjob tasks ---------------------------- -void MtdGlobalRecoHarvester::dqmEndJob(DQMStore::IBooker& ibook, DQMStore::IGetter& igetter) { +void MtdTracksHarvester::dqmEndJob(DQMStore::IBooker& ibook, DQMStore::IGetter& igetter) { // --- Get the monitoring histograms MonitorElement* meBTLTrackEffEtaTot = igetter.get(folder_ + "TrackBTLEffEtaTot"); MonitorElement* meBTLTrackEffPhiTot = igetter.get(folder_ + "TrackBTLEffPhiTot"); @@ -65,7 +65,7 @@ void MtdGlobalRecoHarvester::dqmEndJob(DQMStore::IBooker& ibook, DQMStore::IGett !meETLTrackEffPtTotZneg || !meETLTrackEffEtaMtdZneg || !meETLTrackEffPhiMtdZneg || !meETLTrackEffPtMtdZneg || !meETLTrackEffEtaTotZpos || !meETLTrackEffPhiTotZpos || !meETLTrackEffPtTotZpos || !meETLTrackEffEtaMtdZpos || !meETLTrackEffPhiMtdZpos || !meETLTrackEffPtMtdZpos) { - edm::LogError("MtdGlobalRecoHarvester") << "Monitoring histograms not found!" << std::endl; + edm::LogError("MtdTracksHarvester") << "Monitoring histograms not found!" << std::endl; return; } @@ -250,12 +250,12 @@ void MtdGlobalRecoHarvester::dqmEndJob(DQMStore::IBooker& ibook, DQMStore::IGett } // ------------ method fills 'descriptions' with the allowed parameters for the module ---------- -void MtdGlobalRecoHarvester::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { +void MtdTracksHarvester::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; - desc.add("folder", "MTD/GlobalReco/"); + desc.add("folder", "MTD/Tracks/"); - descriptions.add("MtdGlobalRecoPostProcessor", desc); + descriptions.add("MtdTracksPostProcessor", desc); } -DEFINE_FWK_MODULE(MtdGlobalRecoHarvester); +DEFINE_FWK_MODULE(MtdTracksHarvester); diff --git a/Validation/MtdValidation/plugins/MtdGlobalRecoValidation.cc b/Validation/MtdValidation/plugins/MtdTracksValidation.cc similarity index 57% rename from Validation/MtdValidation/plugins/MtdGlobalRecoValidation.cc rename to Validation/MtdValidation/plugins/MtdTracksValidation.cc index d9bec2c80d45a..85094f19fb8ec 100644 --- a/Validation/MtdValidation/plugins/MtdGlobalRecoValidation.cc +++ b/Validation/MtdValidation/plugins/MtdTracksValidation.cc @@ -32,10 +32,10 @@ #include "Geometry/MTDGeometryBuilder/interface/ProxyMTDTopology.h" #include "Geometry/MTDGeometryBuilder/interface/RectangularMTDTopology.h" -class MtdGlobalRecoValidation : public DQMEDAnalyzer { +class MtdTracksValidation : public DQMEDAnalyzer { public: - explicit MtdGlobalRecoValidation(const edm::ParameterSet&); - ~MtdGlobalRecoValidation() override; + explicit MtdTracksValidation(const edm::ParameterSet&); + ~MtdTracksValidation() override; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); @@ -55,10 +55,11 @@ class MtdGlobalRecoValidation : public DQMEDAnalyzer { edm::EDGetTokenT RecTrackToken_; edm::EDGetTokenT> RecVertexToken_; + edm::EDGetTokenT> trackAssocToken_; edm::EDGetTokenT> pathLengthToken_; - edm::EDGetTokenT> t0SafePidToken_; - edm::EDGetTokenT> Sigmat0SafePidToken_; + edm::EDGetTokenT> t0SafePidToken_; + edm::EDGetTokenT> Sigmat0SafePidToken_; edm::EDGetTokenT> trackMVAQualToken_; MonitorElement* meBTLTrackRPTime_; @@ -85,30 +86,35 @@ class MtdGlobalRecoValidation : public DQMEDAnalyzer { MonitorElement* meTrackMVAQual_; MonitorElement* meTrackPathLenghtvsEta_; + MonitorElement* meFailMVAEta_; + MonitorElement* meFailMVAPhi_; + MonitorElement* meFailMVAPt_; + MonitorElement* meVerNumber_; MonitorElement* meVerZ_; MonitorElement* meVerTime_; }; // ------------ constructor and destructor -------------- -MtdGlobalRecoValidation::MtdGlobalRecoValidation(const edm::ParameterSet& iConfig) +MtdTracksValidation::MtdTracksValidation(const edm::ParameterSet& iConfig) : folder_(iConfig.getParameter("folder")), - trackMinEnergy_(iConfig.getParameter("trackMinimumEnergy")), + trackMinEnergy_(iConfig.getParameter("trackMinimumPt")), trackMinEta_(iConfig.getParameter("trackMinimumEta")), trackMaxEta_(iConfig.getParameter("trackMaximumEta")) { GenRecTrackToken_ = consumes(iConfig.getParameter("inputTagG")); RecTrackToken_ = consumes(iConfig.getParameter("inputTagT")); RecVertexToken_ = consumes>(iConfig.getParameter("inputTagV")); + trackAssocToken_ = consumes>(iConfig.getParameter("trackAssocSrc")); pathLengthToken_ = consumes>(iConfig.getParameter("pathLengthSrc")); t0SafePidToken_ = consumes>(iConfig.getParameter("t0SafePID")); Sigmat0SafePidToken_ = consumes>(iConfig.getParameter("sigmat0SafePID")); trackMVAQualToken_ = consumes>(iConfig.getParameter("trackMVAQual")); } -MtdGlobalRecoValidation::~MtdGlobalRecoValidation() {} +MtdTracksValidation::~MtdTracksValidation() {} // ------------ method called for each event ------------ -void MtdGlobalRecoValidation::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { +void MtdTracksValidation::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { using namespace edm; using namespace geant_units::operators; using namespace std; @@ -127,154 +133,162 @@ void MtdGlobalRecoValidation::analyze(const edm::Event& iEvent, const edm::Event } auto GenRecTrackHandle = makeValid(iEvent.getHandle(GenRecTrackToken_)); - auto RecTrackHandle = makeValid(iEvent.getHandle(RecTrackToken_)); auto RecVertexHandle = makeValid(iEvent.getHandle(RecVertexToken_)); const auto& t0Safe = iEvent.get(t0SafePidToken_); const auto& Sigmat0Safe = iEvent.get(Sigmat0SafePidToken_); const auto& mtdQualMVA = iEvent.get(trackMVAQualToken_); + const auto& trackAssoc = iEvent.get(trackAssocToken_); const auto& pathLength = iEvent.get(pathLengthToken_); unsigned int index = 0; // --- Loop over all RECO tracks --- for (const auto& trackGen : *GenRecTrackHandle) { + const reco::TrackRef trackref(iEvent.getHandle(GenRecTrackToken_), index); index++; - unsigned int MTDindex = 0; - for (const auto& track : *RecTrackHandle) { - const reco::TrackRef mtdTrackref = reco::TrackRef(iEvent.getHandle(RecTrackToken_), MTDindex); - MTDindex++; - - if (track.pt() < trackMinEnergy_) - continue; + if (trackAssoc[trackref] == -1) { + LogWarning("mtdTracks") << "Extended track not associated"; + continue; + } + + const reco::TrackRef mtdTrackref = reco::TrackRef(iEvent.getHandle(RecTrackToken_), trackAssoc[trackref]); + const reco::Track track = *mtdTrackref; + + if (track.pt() < trackMinEnergy_) + continue; + + if (mtdQualMVA[trackref] == -1) { + meFailMVAEta_->Fill(std::fabs(trackGen.eta())); + meFailMVAPhi_->Fill(trackGen.phi()); + meFailMVAPt_->Fill(trackGen.pt()); + } + + meTrackt0SafePid_->Fill(t0Safe[trackref]); + meTrackSigmat0SafePid_->Fill(Sigmat0Safe[trackref]); + meTrackMVAQual_->Fill(mtdQualMVA[trackref]); + + meTrackPathLenghtvsEta_->Fill(std::fabs(track.eta()), pathLength[mtdTrackref]); + + if (fabs(track.eta()) < trackMinEta_) { + // --- all BTL tracks (with and without hit in MTD) --- + meBTLTrackEffEtaTot_->Fill(track.eta()); + meBTLTrackEffPhiTot_->Fill(track.phi()); + meBTLTrackEffPtTot_->Fill(track.pt()); + + bool MTDBtl = false; + int numMTDBtlvalidhits = 0; + for (const auto hit : track.recHits()) { + if (hit->isValid() == false) + continue; + MTDDetId Hit = hit->geographicalId(); + if ((Hit.det() == 6) && (Hit.subdetId() == 1) && (Hit.mtdSubDetector() == 1)) { + MTDBtl = true; + numMTDBtlvalidhits++; + } + } + meTrackNumHits_->Fill(numMTDBtlvalidhits); + + // --- keeping only tracks with last hit in MTD --- + if (MTDBtl == true) { + + meBTLTrackEffEtaMtd_->Fill(track.eta()); + meBTLTrackEffPhiMtd_->Fill(track.phi()); + meBTLTrackEffPtMtd_->Fill(track.pt()); + meBTLTrackRPTime_->Fill(track.t0()); + meBTLTrackPtRes_->Fill((trackGen.pt() - track.pt())/trackGen.pt()); + } + } //loop over (geometrical) BTL tracks + + else { + // --- all ETL tracks (with and without hit in MTD) --- + if ((track.eta() < -trackMinEta_) && (track.eta() > -trackMaxEta_)) { + meETLTrackEffEtaTot_[0]->Fill(track.eta()); + meETLTrackEffPhiTot_[0]->Fill(track.phi()); + meETLTrackEffPtTot_[0]->Fill(track.pt()); + } - if (mtdQualMVA[trackref] == -1) { - continue; + if ((track.eta() > trackMinEta_) && (track.eta() < trackMaxEta_)) { + meETLTrackEffEtaTot_[1]->Fill(track.eta()); + meETLTrackEffPhiTot_[1]->Fill(track.phi()); + meETLTrackEffPtTot_[1]->Fill(track.pt()); } - meTrackt0SafePid_->Fill(t0Safe[trackref]); - meTrackSigmat0SafePid_->Fill(Sigmat0Safe[trackref]); - meTrackMVAQual_->Fill(mtdQualMVA[trackref]); - - meTrackPathLenghtvsEta_->Fill(std::fabs(track.eta()), pathLength[mtdTrackref]); - - if (fabs(track.eta()) < trackMinEta_) { - // --- all BTL tracks (with and without hit in MTD) --- - meBTLTrackEffEtaTot_->Fill(track.eta()); - meBTLTrackEffPhiTot_->Fill(track.phi()); - meBTLTrackEffPtTot_->Fill(track.pt()); - - bool MTDBtl = false; - int numMTDBtlvalidhits = 0; - for (const auto hit : track.recHits()) { - if (hit->isValid() == false) - continue; - MTDDetId Hit = hit->geographicalId(); - if ((Hit.det() == 6) && (Hit.subdetId() == 1) && (Hit.mtdSubDetector() == 1)) { - MTDBtl = true; - numMTDBtlvalidhits++; + bool MTDEtlZnegD1 = false; + bool MTDEtlZnegD2 = false; + bool MTDEtlZposD1 = false; + bool MTDEtlZposD2 = false; + int numMTDEtlvalidhits = 0; + for (const auto hit : track.recHits()) { + if (hit->isValid() == false) + continue; + MTDDetId Hit = hit->geographicalId(); + if ((Hit.det() == 6) && (Hit.subdetId() == 1) && (Hit.mtdSubDetector() == 2)) { + ETLDetId ETLHit = hit->geographicalId(); + + if (topo2Dis) { + if ((ETLHit.zside() == -1) && (ETLHit.nDisc() == 1)) { + MTDEtlZnegD1 = true; + meETLTrackRPTime_->Fill(track.t0()); + meETLTrackPtRes_->Fill((trackGen.pt() - track.pt())/trackGen.pt()); + numMTDEtlvalidhits++; + } + if ((ETLHit.zside() == -1) && (ETLHit.nDisc() == 2)) { + MTDEtlZnegD2 = true; + meETLTrackRPTime_->Fill(track.t0()); + meETLTrackPtRes_->Fill((trackGen.pt() - track.pt())/trackGen.pt()); + numMTDEtlvalidhits++; + } + if ((ETLHit.zside() == 1) && (ETLHit.nDisc() == 1)) { + MTDEtlZposD1 = true; + meETLTrackRPTime_->Fill(track.t0()); + meETLTrackPtRes_->Fill((trackGen.pt() - track.pt())/trackGen.pt()); + numMTDEtlvalidhits++; + } + if ((ETLHit.zside() == 1) && (ETLHit.nDisc() == 2)) { + MTDEtlZposD2 = true; + meETLTrackRPTime_->Fill(track.t0()); + meETLTrackPtRes_->Fill((trackGen.pt() - track.pt())/trackGen.pt()); + numMTDEtlvalidhits++; + } } - } - meTrackNumHits_->Fill(numMTDBtlvalidhits); - - // --- keeping only tracks with last hit in MTD --- - if (MTDBtl == true) { - meBTLTrackEffEtaMtd_->Fill(track.eta()); - meBTLTrackEffPhiMtd_->Fill(track.phi()); - meBTLTrackEffPtMtd_->Fill(track.pt()); - meBTLTrackRPTime_->Fill(track.t0()); - meBTLTrackPtRes_->Fill((trackGen.pt() - track.pt()) / trackGen.pt()); - } - } //loop over (geometrical) BTL tracks - - else { - // --- all ETL tracks (with and without hit in MTD) --- - if ((track.eta() < -trackMinEta_) && (track.eta() > -trackMaxEta_)) { - meETLTrackEffEtaTot_[0]->Fill(track.eta()); - meETLTrackEffPhiTot_[0]->Fill(track.phi()); - meETLTrackEffPtTot_[0]->Fill(track.pt()); - } - - if ((track.eta() > trackMinEta_) && (track.eta() < trackMaxEta_)) { - meETLTrackEffEtaTot_[1]->Fill(track.eta()); - meETLTrackEffPhiTot_[1]->Fill(track.phi()); - meETLTrackEffPtTot_[1]->Fill(track.pt()); - } - bool MTDEtlZnegD1 = false; - bool MTDEtlZnegD2 = false; - bool MTDEtlZposD1 = false; - bool MTDEtlZposD2 = false; - int numMTDEtlvalidhits = 0; - for (const auto hit : track.recHits()) { - if (hit->isValid() == false) - continue; - MTDDetId Hit = hit->geographicalId(); - if ((Hit.det() == 6) && (Hit.subdetId() == 1) && (Hit.mtdSubDetector() == 2)) { - ETLDetId ETLHit = hit->geographicalId(); - - if (topo2Dis) { - if ((ETLHit.zside() == -1) && (ETLHit.nDisc() == 1)) { - MTDEtlZnegD1 = true; - meETLTrackRPTime_->Fill(track.t0()); - meETLTrackPtRes_->Fill((trackGen.pt() - track.pt()) / trackGen.pt()); - numMTDEtlvalidhits++; - } - if ((ETLHit.zside() == -1) && (ETLHit.nDisc() == 2)) { - MTDEtlZnegD2 = true; - meETLTrackRPTime_->Fill(track.t0()); - meETLTrackPtRes_->Fill((trackGen.pt() - track.pt()) / trackGen.pt()); - numMTDEtlvalidhits++; - } - if ((ETLHit.zside() == 1) && (ETLHit.nDisc() == 1)) { - MTDEtlZposD1 = true; - meETLTrackRPTime_->Fill(track.t0()); - meETLTrackPtRes_->Fill((trackGen.pt() - track.pt()) / trackGen.pt()); - numMTDEtlvalidhits++; - } - if ((ETLHit.zside() == 1) && (ETLHit.nDisc() == 2)) { - MTDEtlZposD2 = true; - meETLTrackRPTime_->Fill(track.t0()); - meETLTrackPtRes_->Fill((trackGen.pt() - track.pt()) / trackGen.pt()); - numMTDEtlvalidhits++; - } + if (topo1Dis) { + if (ETLHit.zside() == -1) { + MTDEtlZnegD1 = true; + meETLTrackRPTime_->Fill(track.t0()); + numMTDEtlvalidhits++; } - - if (topo1Dis) { - if (ETLHit.zside() == -1) { - MTDEtlZnegD1 = true; - meETLTrackRPTime_->Fill(track.t0()); - numMTDEtlvalidhits++; - } - if (ETLHit.zside() == 1) { - MTDEtlZposD1 = true; - meETLTrackRPTime_->Fill(track.t0()); - numMTDEtlvalidhits++; - } + if (ETLHit.zside() == 1) { + MTDEtlZposD1 = true; + meETLTrackRPTime_->Fill(track.t0()); + numMTDEtlvalidhits++; } } } - meTrackNumHits_->Fill(-numMTDEtlvalidhits); - - // --- keeping only tracks with last hit in MTD --- - if ((track.eta() < -trackMinEta_) && (track.eta() > -trackMaxEta_)) { - if ((MTDEtlZnegD1 == true) || (MTDEtlZnegD2 == true)) { - meETLTrackEffEtaMtd_[0]->Fill(track.eta()); - meETLTrackEffPhiMtd_[0]->Fill(track.phi()); - meETLTrackEffPtMtd_[0]->Fill(track.pt()); - } + } + meTrackNumHits_->Fill(-numMTDEtlvalidhits); + + // --- keeping only tracks with last hit in MTD --- + if ((track.eta() < -trackMinEta_) && (track.eta() > -trackMaxEta_)) { + if ((MTDEtlZnegD1 == true) || (MTDEtlZnegD2 == true)) { + + meETLTrackEffEtaMtd_[0]->Fill(track.eta()); + meETLTrackEffPhiMtd_[0]->Fill(track.phi()); + meETLTrackEffPtMtd_[0]->Fill(track.pt()); } - if ((track.eta() > trackMinEta_) && (track.eta() < trackMaxEta_)) { - if ((MTDEtlZposD1 == true) || (MTDEtlZposD2 == true)) { - meETLTrackEffEtaMtd_[1]->Fill(track.eta()); - meETLTrackEffPhiMtd_[1]->Fill(track.phi()); - meETLTrackEffPtMtd_[1]->Fill(track.pt()); - } + } + if ((track.eta() > trackMinEta_) && (track.eta() < trackMaxEta_)) { + + if ((MTDEtlZposD1 == true) || (MTDEtlZposD2 == true)) { + meETLTrackEffEtaMtd_[1]->Fill(track.eta()); + meETLTrackEffPhiMtd_[1]->Fill(track.phi()); + meETLTrackEffPtMtd_[1]->Fill(track.pt()); } } - } //RECO MTD tracks - } //RECO GEN tracks loop + } + } //RECO tracks loop // --- Loop over the RECO vertices --- int nv = 0; @@ -290,7 +304,7 @@ void MtdGlobalRecoValidation::analyze(const edm::Event& iEvent, const edm::Event } // ------------ method for histogram booking ------------ -void MtdGlobalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, +void MtdTracksValidation::bookHistograms(DQMStore::IBooker& ibook, edm::Run const& run, edm::EventSetup const& iSetup) { ibook.setCurrentFolder(folder_); @@ -298,8 +312,7 @@ void MtdGlobalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, // histogram booking meBTLTrackRPTime_ = ibook.book1D("TrackBTLRPTime", "Track t0 with respect to R.P.;t0 [ns]", 100, -1, 3); meTrackt0SafePid_ = ibook.book1D("Trackt0SafePID", "Track t0 Safe as stored in TofPid;t0 [ns]", 100, -1, 1); - meTrackSigmat0SafePid_ = - ibook.book1D("TrackSigmat0SafePID", "Sigmat0 Safe as stored in TofPid; #sigma_{t0} [ns]", 100, -0.02, 0.06); + meTrackSigmat0SafePid_ = ibook.book1D("TrackSigmat0SafePID", "Sigmat0 Safe as stored in TofPid; #sigma_{t0} [ns]", 100, -0.02, 0.06); meBTLTrackEffEtaTot_ = ibook.book1D("TrackBTLEffEtaTot", "Track efficiency vs eta (Tot);#eta_{RECO}", 100, -1.6, 1.6); meBTLTrackEffPhiTot_ = ibook.book1D("TrackBTLEffPhiTot", "Track efficiency vs phi (Tot);#phi_{RECO} [rad]", 100, -3.2, 3.2); @@ -308,9 +321,9 @@ void MtdGlobalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, meBTLTrackEffPhiMtd_ = ibook.book1D("TrackBTLEffPhiMtd", "Track efficiency vs phi (Mtd);#phi_{RECO} [rad]", 100, -3.2, 3.2); meBTLTrackEffPtMtd_ = ibook.book1D("TrackBTLEffPtMtd", "Track efficiency vs pt (Mtd);pt_{RECO} [GeV]", 50, 0, 10); - meBTLTrackPtRes_ = - ibook.book1D("TrackBTLPtRes", "Track pT resolution ;pT_{Gentrack}-pT_{MTDtrack}/pT_{Gentrack} ", 100, -0.1, 0.1); - meETLTrackRPTime_ = ibook.book1D("TrackETLRPTime", "Track t0 with respect to R.P.;t0 [ns]", 100, -1, 3); + meBTLTrackPtRes_ = ibook.book1D("TrackBTLPtRes", "Track pT resolution ;pT_{Gentrack}-pT_{MTDtrack}/pT_{Gentrack} ", 100, -0.1, 0.1); + meETLTrackRPTime_ = + ibook.book1D("TrackETLRPTime", "Track t0 with respect to R.P.;t0 [ns]", 100, -1, 3); meETLTrackEffEtaTot_[0] = ibook.book1D("TrackETLEffEtaTotZneg", "Track efficiency vs eta (Tot) (-Z);#eta_{RECO}", 100, -3.2, -1.4); meETLTrackEffEtaTot_[1] = @@ -335,12 +348,13 @@ void MtdGlobalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, ibook.book1D("TrackETLEffPtMtdZneg", "Track efficiency vs pt (Mtd) (-Z);pt_{RECO} [GeV]", 50, 0, 10); meETLTrackEffPtMtd_[1] = ibook.book1D("TrackETLEffPtMtdZpos", "Track efficiency vs pt (Mtd) (+Z);pt_{RECO} [GeV]", 50, 0, 10); - meETLTrackPtRes_ = - ibook.book1D("TrackETLPtRes", "Track pT resolution;pT_{Gentrack}-pT_{MTDtrack}/pT_{Gentrack} ", 100, -0.1, 0.1); + meETLTrackPtRes_ = ibook.book1D("TrackETLPtRes", "Track pT resolution;pT_{Gentrack}-pT_{MTDtrack}/pT_{Gentrack} ", 100, -0.1, 0.1); meTrackNumHits_ = ibook.book1D("TrackNumHits", "Number of valid MTD hits per track ; Number of hits", 10, -5, 5); meTrackMVAQual_ = ibook.book1D("TrackMVAQual", "Track MVA Quality as stored in Value Map ; MVAQual", 100, 0, 1); - meTrackPathLenghtvsEta_ = ibook.bookProfile( - "TrackPathLenghtvsEta", "MTD Track pathlength vs MTD track Eta;|#eta|;Pathlength", 100, 0, 3.2, 100.0, 400.0, "S"); + meTrackPathLenghtvsEta_ = ibook.bookProfile("TrackPathLenghtvsEta", "MTD Track pathlength vs MTD track Eta;|#eta|;Pathlength", 100, 0, 3.2, 100.0, 400.0, "S"); + meFailMVAEta_ = ibook.book1D("TrackFailingMVAEta", "Failing MVA track #eta;|#eta| ", 100, 0, 3.2); + meFailMVAPhi_ = ibook.book1D("TrackFailingMVAPhi", "Failing MVA track #phi;#phi [rad] ", 100, -3.2, 3.2); + meFailMVAPt_ = ibook.book1D("TrackFailingMVAPt", "Failing MVA track pT;pT [GeV]", 50, 0, 10); meVerZ_ = ibook.book1D("VerZ", "RECO Vertex Z;Z_{RECO} [cm]", 180, -18, 18); meVerTime_ = ibook.book1D("VerTime", "RECO Vertex Time;t0 [ns]", 100, -1, 1); meVerNumber_ = ibook.book1D("VerNumber", "RECO Vertex Number: Number of vertices", 100, 0, 500); @@ -348,24 +362,26 @@ void MtdGlobalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ -void MtdGlobalRecoValidation::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { +void MtdTracksValidation::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; - desc.add("folder", "MTD/GlobalReco"); + desc.add("folder", "MTD/Tracks"); desc.add("inputTagG", edm::InputTag("generalTracks", "")); desc.add("inputTagT", edm::InputTag("trackExtenderWithMTD", "")); desc.add("inputTagV", edm::InputTag("offlinePrimaryVertices4D", "")); - desc.add("t0Src", edm::InputTag("trackExtenderWithMTD:generalTrackt0", "")); - desc.add("sigmat0Src", edm::InputTag("trackExtenderWithMTD:generalTracksigmat0", "")); - desc.add("pathLengthSrc", edm::InputTag("trackExtenderWithMTD", "pathLength")); - desc.add("t0SafePID", edm::InputTag("tofPID:t0safe", "")); + desc.add("t0Src", edm::InputTag("trackExtenderWithMTD:generalTrackt0", "")); + desc.add("sigmat0Src", edm::InputTag("trackExtenderWithMTD:generalTracksigmat0", "")); + desc.add("trackAssocSrc", edm::InputTag("trackExtenderWithMTD", "generalTrackassoc")) + ->setComment("Association between General and MTD Extended tracks"); + desc.add("pathLengthSrc", edm::InputTag("trackExtenderWithMTD", "pathLength")); + desc.add("t0SafePID", edm::InputTag("tofPID:t0safe", "")); desc.add("sigmat0SafePID", edm::InputTag("tofPID:sigmat0safe", "")); desc.add("trackMVAQual", edm::InputTag("mtdTrackQualityMVA:mtdQualMVA", "")); - desc.add("trackMinimumEnergy", 1.0); // [GeV] + desc.add("trackMinimumPt", 1.0); // [GeV] desc.add("trackMinimumEta", 1.5); desc.add("trackMaximumEta", 3.2); - descriptions.add("globalReco", desc); + descriptions.add("mtdTracks", desc); } -DEFINE_FWK_MODULE(MtdGlobalRecoValidation); +DEFINE_FWK_MODULE(MtdTracksValidation); diff --git a/Validation/MtdValidation/python/MtdPostProcessor_cff.py b/Validation/MtdValidation/python/MtdPostProcessor_cff.py index 5b1046b957722..5baa321ddbd52 100644 --- a/Validation/MtdValidation/python/MtdPostProcessor_cff.py +++ b/Validation/MtdValidation/python/MtdPostProcessor_cff.py @@ -1,6 +1,6 @@ import FWCore.ParameterSet.Config as cms from Validation.MtdValidation.btlSimHitsPostProcessor_cfi import btlSimHitsPostProcessor -from Validation.MtdValidation.MtdGlobalRecoPostProcessor_cfi import MtdGlobalRecoPostProcessor +from Validation.MtdValidation.MtdTracksPostProcessor_cfi import MtdTracksPostProcessor -mtdValidationPostProcessor = cms.Sequence(btlSimHitsPostProcessor + MtdGlobalRecoPostProcessor) +mtdValidationPostProcessor = cms.Sequence(btlSimHitsPostProcessor + MtdTracksPostProcessor) diff --git a/Validation/MtdValidation/test/mtdValidation_cfg.py b/Validation/MtdValidation/test/mtdValidation_cfg.py index 000cd3fa30394..1a84ec60b0cc0 100644 --- a/Validation/MtdValidation/test/mtdValidation_cfg.py +++ b/Validation/MtdValidation/test/mtdValidation_cfg.py @@ -51,7 +51,7 @@ etlValidation = cms.Sequence(process.etlSimHits + process.etlDigiHits + process.etlLocalReco) # --- Global Validation -process.load("Validation.MtdValidation.globalReco_cfi") +process.load("Validation.MtdValidation.mtdTracks_cfi") process.DQMStore = cms.Service("DQMStore") From afae069d93894c6a34755f162c81e635679663d1 Mon Sep 17 00:00:00 2001 From: Giulia Sorrentino Date: Tue, 23 Mar 2021 13:35:02 +0100 Subject: [PATCH 3/8] Adding MEs for track's time and error --- .../plugins/MtdTracksValidation.cc | 79 ++++++++++++------- 1 file changed, 52 insertions(+), 27 deletions(-) diff --git a/Validation/MtdValidation/plugins/MtdTracksValidation.cc b/Validation/MtdValidation/plugins/MtdTracksValidation.cc index 85094f19fb8ec..2a3e04edec6db 100644 --- a/Validation/MtdValidation/plugins/MtdTracksValidation.cc +++ b/Validation/MtdValidation/plugins/MtdTracksValidation.cc @@ -58,8 +58,12 @@ class MtdTracksValidation : public DQMEDAnalyzer { edm::EDGetTokenT> trackAssocToken_; edm::EDGetTokenT> pathLengthToken_; - edm::EDGetTokenT> t0SafePidToken_; - edm::EDGetTokenT> Sigmat0SafePidToken_; + edm::EDGetTokenT> tmtdToken_; + edm::EDGetTokenT> SigmatmtdToken_; + edm::EDGetTokenT> t0PidToken_; + edm::EDGetTokenT> Sigmat0PidToken_; + edm::EDGetTokenT> t0SafePidToken_; + edm::EDGetTokenT> Sigmat0SafePidToken_; edm::EDGetTokenT> trackMVAQualToken_; MonitorElement* meBTLTrackRPTime_; @@ -80,6 +84,10 @@ class MtdTracksValidation : public DQMEDAnalyzer { MonitorElement* meETLTrackEffPtMtd_[2]; MonitorElement* meETLTrackPtRes_; + MonitorElement* meTracktmtd_; + MonitorElement* meTrackSigmatmtd_; + MonitorElement* meTrackt0Pid_; + MonitorElement* meTrackSigmat0Pid_; MonitorElement* meTrackt0SafePid_; MonitorElement* meTrackSigmat0SafePid_; MonitorElement* meTrackNumHits_; @@ -106,6 +114,10 @@ MtdTracksValidation::MtdTracksValidation(const edm::ParameterSet& iConfig) RecVertexToken_ = consumes>(iConfig.getParameter("inputTagV")); trackAssocToken_ = consumes>(iConfig.getParameter("trackAssocSrc")); pathLengthToken_ = consumes>(iConfig.getParameter("pathLengthSrc")); + tmtdToken_ = consumes>(iConfig.getParameter("t0Src")); + SigmatmtdToken_ = consumes>(iConfig.getParameter("sigmat0Src")); + t0PidToken_ = consumes>(iConfig.getParameter("t0PID")); + Sigmat0PidToken_ = consumes>(iConfig.getParameter("sigmat0PID")); t0SafePidToken_ = consumes>(iConfig.getParameter("t0SafePID")); Sigmat0SafePidToken_ = consumes>(iConfig.getParameter("sigmat0SafePID")); trackMVAQualToken_ = consumes>(iConfig.getParameter("trackMVAQual")); @@ -135,6 +147,10 @@ void MtdTracksValidation::analyze(const edm::Event& iEvent, const edm::EventSetu auto GenRecTrackHandle = makeValid(iEvent.getHandle(GenRecTrackToken_)); auto RecVertexHandle = makeValid(iEvent.getHandle(RecVertexToken_)); + const auto& tMtd = iEvent.get(tmtdToken_); + const auto& SigmatMtd = iEvent.get(SigmatmtdToken_); + const auto& t0Pid = iEvent.get(t0PidToken_); + const auto& Sigmat0Pid = iEvent.get(Sigmat0PidToken_); const auto& t0Safe = iEvent.get(t0SafePidToken_); const auto& Sigmat0Safe = iEvent.get(Sigmat0SafePidToken_); const auto& mtdQualMVA = iEvent.get(trackMVAQualToken_); @@ -144,7 +160,6 @@ void MtdTracksValidation::analyze(const edm::Event& iEvent, const edm::EventSetu unsigned int index = 0; // --- Loop over all RECO tracks --- for (const auto& trackGen : *GenRecTrackHandle) { - const reco::TrackRef trackref(iEvent.getHandle(GenRecTrackToken_), index); index++; @@ -165,6 +180,10 @@ void MtdTracksValidation::analyze(const edm::Event& iEvent, const edm::EventSetu meFailMVAPt_->Fill(trackGen.pt()); } + meTracktmtd_->Fill(tMtd[trackref]); + meTrackSigmatmtd_->Fill(SigmatMtd[trackref]); + meTrackt0Pid_->Fill(t0Pid[trackref]); + meTrackSigmat0Pid_->Fill(Sigmat0Pid[trackref]); meTrackt0SafePid_->Fill(t0Safe[trackref]); meTrackSigmat0SafePid_->Fill(Sigmat0Safe[trackref]); meTrackMVAQual_->Fill(mtdQualMVA[trackref]); @@ -192,14 +211,13 @@ void MtdTracksValidation::analyze(const edm::Event& iEvent, const edm::EventSetu // --- keeping only tracks with last hit in MTD --- if (MTDBtl == true) { - meBTLTrackEffEtaMtd_->Fill(track.eta()); meBTLTrackEffPhiMtd_->Fill(track.phi()); meBTLTrackEffPtMtd_->Fill(track.pt()); meBTLTrackRPTime_->Fill(track.t0()); - meBTLTrackPtRes_->Fill((trackGen.pt() - track.pt())/trackGen.pt()); - } - } //loop over (geometrical) BTL tracks + meBTLTrackPtRes_->Fill((trackGen.pt() - track.pt()) / trackGen.pt()); + } + } //loop over (geometrical) BTL tracks else { // --- all ETL tracks (with and without hit in MTD) --- @@ -231,25 +249,25 @@ void MtdTracksValidation::analyze(const edm::Event& iEvent, const edm::EventSetu if ((ETLHit.zside() == -1) && (ETLHit.nDisc() == 1)) { MTDEtlZnegD1 = true; meETLTrackRPTime_->Fill(track.t0()); - meETLTrackPtRes_->Fill((trackGen.pt() - track.pt())/trackGen.pt()); + meETLTrackPtRes_->Fill((trackGen.pt() - track.pt()) / trackGen.pt()); numMTDEtlvalidhits++; } if ((ETLHit.zside() == -1) && (ETLHit.nDisc() == 2)) { MTDEtlZnegD2 = true; meETLTrackRPTime_->Fill(track.t0()); - meETLTrackPtRes_->Fill((trackGen.pt() - track.pt())/trackGen.pt()); + meETLTrackPtRes_->Fill((trackGen.pt() - track.pt()) / trackGen.pt()); numMTDEtlvalidhits++; } if ((ETLHit.zside() == 1) && (ETLHit.nDisc() == 1)) { MTDEtlZposD1 = true; meETLTrackRPTime_->Fill(track.t0()); - meETLTrackPtRes_->Fill((trackGen.pt() - track.pt())/trackGen.pt()); + meETLTrackPtRes_->Fill((trackGen.pt() - track.pt()) / trackGen.pt()); numMTDEtlvalidhits++; } if ((ETLHit.zside() == 1) && (ETLHit.nDisc() == 2)) { MTDEtlZposD2 = true; meETLTrackRPTime_->Fill(track.t0()); - meETLTrackPtRes_->Fill((trackGen.pt() - track.pt())/trackGen.pt()); + meETLTrackPtRes_->Fill((trackGen.pt() - track.pt()) / trackGen.pt()); numMTDEtlvalidhits++; } } @@ -273,14 +291,12 @@ void MtdTracksValidation::analyze(const edm::Event& iEvent, const edm::EventSetu // --- keeping only tracks with last hit in MTD --- if ((track.eta() < -trackMinEta_) && (track.eta() > -trackMaxEta_)) { if ((MTDEtlZnegD1 == true) || (MTDEtlZnegD2 == true)) { - meETLTrackEffEtaMtd_[0]->Fill(track.eta()); meETLTrackEffPhiMtd_[0]->Fill(track.phi()); meETLTrackEffPtMtd_[0]->Fill(track.pt()); } } if ((track.eta() > trackMinEta_) && (track.eta() < trackMaxEta_)) { - if ((MTDEtlZposD1 == true) || (MTDEtlZposD2 == true)) { meETLTrackEffEtaMtd_[1]->Fill(track.eta()); meETLTrackEffPhiMtd_[1]->Fill(track.phi()); @@ -304,15 +320,11 @@ void MtdTracksValidation::analyze(const edm::Event& iEvent, const edm::EventSetu } // ------------ method for histogram booking ------------ -void MtdTracksValidation::bookHistograms(DQMStore::IBooker& ibook, - edm::Run const& run, - edm::EventSetup const& iSetup) { +void MtdTracksValidation::bookHistograms(DQMStore::IBooker& ibook, edm::Run const& run, edm::EventSetup const& iSetup) { ibook.setCurrentFolder(folder_); // histogram booking meBTLTrackRPTime_ = ibook.book1D("TrackBTLRPTime", "Track t0 with respect to R.P.;t0 [ns]", 100, -1, 3); - meTrackt0SafePid_ = ibook.book1D("Trackt0SafePID", "Track t0 Safe as stored in TofPid;t0 [ns]", 100, -1, 1); - meTrackSigmat0SafePid_ = ibook.book1D("TrackSigmat0SafePID", "Sigmat0 Safe as stored in TofPid; #sigma_{t0} [ns]", 100, -0.02, 0.06); meBTLTrackEffEtaTot_ = ibook.book1D("TrackBTLEffEtaTot", "Track efficiency vs eta (Tot);#eta_{RECO}", 100, -1.6, 1.6); meBTLTrackEffPhiTot_ = ibook.book1D("TrackBTLEffPhiTot", "Track efficiency vs phi (Tot);#phi_{RECO} [rad]", 100, -3.2, 3.2); @@ -321,9 +333,9 @@ void MtdTracksValidation::bookHistograms(DQMStore::IBooker& ibook, meBTLTrackEffPhiMtd_ = ibook.book1D("TrackBTLEffPhiMtd", "Track efficiency vs phi (Mtd);#phi_{RECO} [rad]", 100, -3.2, 3.2); meBTLTrackEffPtMtd_ = ibook.book1D("TrackBTLEffPtMtd", "Track efficiency vs pt (Mtd);pt_{RECO} [GeV]", 50, 0, 10); - meBTLTrackPtRes_ = ibook.book1D("TrackBTLPtRes", "Track pT resolution ;pT_{Gentrack}-pT_{MTDtrack}/pT_{Gentrack} ", 100, -0.1, 0.1); - meETLTrackRPTime_ = - ibook.book1D("TrackETLRPTime", "Track t0 with respect to R.P.;t0 [ns]", 100, -1, 3); + meBTLTrackPtRes_ = + ibook.book1D("TrackBTLPtRes", "Track pT resolution ;pT_{Gentrack}-pT_{MTDtrack}/pT_{Gentrack} ", 100, -0.1, 0.1); + meETLTrackRPTime_ = ibook.book1D("TrackETLRPTime", "Track t0 with respect to R.P.;t0 [ns]", 100, -1, 3); meETLTrackEffEtaTot_[0] = ibook.book1D("TrackETLEffEtaTotZneg", "Track efficiency vs eta (Tot) (-Z);#eta_{RECO}", 100, -3.2, -1.4); meETLTrackEffEtaTot_[1] = @@ -348,10 +360,21 @@ void MtdTracksValidation::bookHistograms(DQMStore::IBooker& ibook, ibook.book1D("TrackETLEffPtMtdZneg", "Track efficiency vs pt (Mtd) (-Z);pt_{RECO} [GeV]", 50, 0, 10); meETLTrackEffPtMtd_[1] = ibook.book1D("TrackETLEffPtMtdZpos", "Track efficiency vs pt (Mtd) (+Z);pt_{RECO} [GeV]", 50, 0, 10); - meETLTrackPtRes_ = ibook.book1D("TrackETLPtRes", "Track pT resolution;pT_{Gentrack}-pT_{MTDtrack}/pT_{Gentrack} ", 100, -0.1, 0.1); + meETLTrackPtRes_ = + ibook.book1D("TrackETLPtRes", "Track pT resolution;pT_{Gentrack}-pT_{MTDtrack}/pT_{Gentrack} ", 100, -0.1, 0.1); + meTracktmtd_ = ibook.book1D("Tracktmtd", "Track time from TrackExtenderWithMTD;tmtd [ns]", 100, -1.5, 1.5); + meTrackSigmatmtd_ = + ibook.book1D("TrackSigmatmtd", "Time Error from TrackExtenderWithMTD; #sigma_{tmtd} [ns]", 100, 0, 0.1); + meTrackt0Pid_ = ibook.book1D("Trackt0Pid", "Track t0 as stored in TofPid;t0 [ns]", 100, -1, 1); + meTrackSigmat0Pid_ = + ibook.book1D("TrackSigmat0Pid", "Sigmat0 as stored in TofPid; #sigma_{t0} [ns]", 100, -0.02, 0.06); + meTrackt0SafePid_ = ibook.book1D("Trackt0SafePID", "Track t0 Safe as stored in TofPid;t0 [ns]", 100, -1, 1); + meTrackSigmat0SafePid_ = + ibook.book1D("TrackSigmat0SafePID", "Sigmat0 Safe as stored in TofPid; #sigma_{t0} [ns]", 100, -0.02, 0.06); meTrackNumHits_ = ibook.book1D("TrackNumHits", "Number of valid MTD hits per track ; Number of hits", 10, -5, 5); meTrackMVAQual_ = ibook.book1D("TrackMVAQual", "Track MVA Quality as stored in Value Map ; MVAQual", 100, 0, 1); - meTrackPathLenghtvsEta_ = ibook.bookProfile("TrackPathLenghtvsEta", "MTD Track pathlength vs MTD track Eta;|#eta|;Pathlength", 100, 0, 3.2, 100.0, 400.0, "S"); + meTrackPathLenghtvsEta_ = ibook.bookProfile( + "TrackPathLenghtvsEta", "MTD Track pathlength vs MTD track Eta;|#eta|;Pathlength", 100, 0, 3.2, 100.0, 400.0, "S"); meFailMVAEta_ = ibook.book1D("TrackFailingMVAEta", "Failing MVA track #eta;|#eta| ", 100, 0, 3.2); meFailMVAPhi_ = ibook.book1D("TrackFailingMVAPhi", "Failing MVA track #phi;#phi [rad] ", 100, -3.2, 3.2); meFailMVAPt_ = ibook.book1D("TrackFailingMVAPt", "Failing MVA track pT;pT [GeV]", 50, 0, 10); @@ -369,13 +392,15 @@ void MtdTracksValidation::fillDescriptions(edm::ConfigurationDescriptions& descr desc.add("inputTagG", edm::InputTag("generalTracks", "")); desc.add("inputTagT", edm::InputTag("trackExtenderWithMTD", "")); desc.add("inputTagV", edm::InputTag("offlinePrimaryVertices4D", "")); - desc.add("t0Src", edm::InputTag("trackExtenderWithMTD:generalTrackt0", "")); - desc.add("sigmat0Src", edm::InputTag("trackExtenderWithMTD:generalTracksigmat0", "")); + desc.add("t0Src", edm::InputTag("trackExtenderWithMTD:generalTrackt0", "")); + desc.add("sigmat0Src", edm::InputTag("trackExtenderWithMTD:generalTracksigmat0", "")); desc.add("trackAssocSrc", edm::InputTag("trackExtenderWithMTD", "generalTrackassoc")) ->setComment("Association between General and MTD Extended tracks"); - desc.add("pathLengthSrc", edm::InputTag("trackExtenderWithMTD", "pathLength")); - desc.add("t0SafePID", edm::InputTag("tofPID:t0safe", "")); + desc.add("pathLengthSrc", edm::InputTag("trackExtenderWithMTD", "pathLength")); + desc.add("t0SafePID", edm::InputTag("tofPID:t0safe", "")); desc.add("sigmat0SafePID", edm::InputTag("tofPID:sigmat0safe", "")); + desc.add("sigmat0PID", edm::InputTag("tofPID:sigmat0", "")); + desc.add("t0PID", edm::InputTag("tofPID:t0", "")); desc.add("trackMVAQual", edm::InputTag("mtdTrackQualityMVA:mtdQualMVA", "")); desc.add("trackMinimumPt", 1.0); // [GeV] desc.add("trackMinimumEta", 1.5); From f5c759dca576505d20e175d4f3cc6a92f8fce60c Mon Sep 17 00:00:00 2001 From: Giulia Sorrentino Date: Tue, 23 Mar 2021 16:50:03 +0100 Subject: [PATCH 4/8] Update LocalOccupancy plot and removing MEs for non MTD tracks --- .../MtdValidation/plugins/BtlLocalRecoValidation.cc | 2 +- .../MtdValidation/plugins/MtdTracksValidation.cc | 13 ------------- 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/Validation/MtdValidation/plugins/BtlLocalRecoValidation.cc b/Validation/MtdValidation/plugins/BtlLocalRecoValidation.cc index 5b587ca9fb638..e7e8516fe1aa4 100644 --- a/Validation/MtdValidation/plugins/BtlLocalRecoValidation.cc +++ b/Validation/MtdValidation/plugins/BtlLocalRecoValidation.cc @@ -199,7 +199,7 @@ void BtlLocalRecoValidation::analyze(const edm::Event& iEvent, const edm::EventS meOccupancy_->Fill(global_point.z(), global_point.phi()); if (LocalPosDebug_) { - meLocalOccupancy_->Fill(local_point.x(), local_point.y()); + meLocalOccupancy_->Fill(local_point.x() + recHit.position(), local_point.y()); meHitXlocal_->Fill(local_point.x()); meHitYlocal_->Fill(local_point.y()); meHitZlocal_->Fill(local_point.z()); diff --git a/Validation/MtdValidation/plugins/MtdTracksValidation.cc b/Validation/MtdValidation/plugins/MtdTracksValidation.cc index 2a3e04edec6db..9424880193a4a 100644 --- a/Validation/MtdValidation/plugins/MtdTracksValidation.cc +++ b/Validation/MtdValidation/plugins/MtdTracksValidation.cc @@ -94,10 +94,6 @@ class MtdTracksValidation : public DQMEDAnalyzer { MonitorElement* meTrackMVAQual_; MonitorElement* meTrackPathLenghtvsEta_; - MonitorElement* meFailMVAEta_; - MonitorElement* meFailMVAPhi_; - MonitorElement* meFailMVAPt_; - MonitorElement* meVerNumber_; MonitorElement* meVerZ_; MonitorElement* meVerTime_; @@ -174,12 +170,6 @@ void MtdTracksValidation::analyze(const edm::Event& iEvent, const edm::EventSetu if (track.pt() < trackMinEnergy_) continue; - if (mtdQualMVA[trackref] == -1) { - meFailMVAEta_->Fill(std::fabs(trackGen.eta())); - meFailMVAPhi_->Fill(trackGen.phi()); - meFailMVAPt_->Fill(trackGen.pt()); - } - meTracktmtd_->Fill(tMtd[trackref]); meTrackSigmatmtd_->Fill(SigmatMtd[trackref]); meTrackt0Pid_->Fill(t0Pid[trackref]); @@ -375,9 +365,6 @@ void MtdTracksValidation::bookHistograms(DQMStore::IBooker& ibook, edm::Run cons meTrackMVAQual_ = ibook.book1D("TrackMVAQual", "Track MVA Quality as stored in Value Map ; MVAQual", 100, 0, 1); meTrackPathLenghtvsEta_ = ibook.bookProfile( "TrackPathLenghtvsEta", "MTD Track pathlength vs MTD track Eta;|#eta|;Pathlength", 100, 0, 3.2, 100.0, 400.0, "S"); - meFailMVAEta_ = ibook.book1D("TrackFailingMVAEta", "Failing MVA track #eta;|#eta| ", 100, 0, 3.2); - meFailMVAPhi_ = ibook.book1D("TrackFailingMVAPhi", "Failing MVA track #phi;#phi [rad] ", 100, -3.2, 3.2); - meFailMVAPt_ = ibook.book1D("TrackFailingMVAPt", "Failing MVA track pT;pT [GeV]", 50, 0, 10); meVerZ_ = ibook.book1D("VerZ", "RECO Vertex Z;Z_{RECO} [cm]", 180, -18, 18); meVerTime_ = ibook.book1D("VerTime", "RECO Vertex Time;t0 [ns]", 100, -1, 1); meVerNumber_ = ibook.book1D("VerNumber", "RECO Vertex Number: Number of vertices", 100, 0, 500); From 080966144c53124962d0371117701ba5e257c0bf Mon Sep 17 00:00:00 2001 From: Giulia Sorrentino Date: Wed, 24 Mar 2021 15:03:32 +0100 Subject: [PATCH 5/8] Adding monitoring of the BTL rechits longitudinal position and fixing axis label --- .../plugins/BtlLocalRecoValidation.cc | 51 ++++++++++++++----- .../plugins/EtlLocalRecoValidation.cc | 16 ++---- 2 files changed, 44 insertions(+), 23 deletions(-) diff --git a/Validation/MtdValidation/plugins/BtlLocalRecoValidation.cc b/Validation/MtdValidation/plugins/BtlLocalRecoValidation.cc index e7e8516fe1aa4..b5278350fbb70 100644 --- a/Validation/MtdValidation/plugins/BtlLocalRecoValidation.cc +++ b/Validation/MtdValidation/plugins/BtlLocalRecoValidation.cc @@ -105,6 +105,11 @@ class BtlLocalRecoValidation : public DQMEDAnalyzer { MonitorElement* meTimeRes_; MonitorElement* meEnergyRes_; + + MonitorElement* meLongPosPull_; + MonitorElement* meLongPosPullvsE_; + MonitorElement* meLongPosPullvsEta_; + MonitorElement* meTPullvsE_; MonitorElement* meTPullvsEta_; @@ -220,6 +225,7 @@ void BtlLocalRecoValidation::analyze(const edm::Event& iEvent, const edm::EventS // Resolution histograms if (m_btlSimHits.count(detId.rawId()) == 1 && m_btlSimHits[detId.rawId()].energy > hitMinEnergy_) { + float longpos_res = recHit.position() - convertMmToCm(m_btlSimHits[detId.rawId()].x_local); float time_res = recHit.time() - m_btlSimHits[detId.rawId()].time; float energy_res = recHit.energy() - m_btlSimHits[detId.rawId()].energy; @@ -233,6 +239,10 @@ void BtlLocalRecoValidation::analyze(const edm::Event& iEvent, const edm::EventS meTimeRes_->Fill(time_res / m_btlSimHits[detId.rawId()].time); meEnergyRes_->Fill(energy_res / m_btlSimHits[detId.rawId()].energy); + meLongPosPull_->Fill(longpos_res / recHit.positionError()); + meLongPosPullvsEta_->Fill(fabs(global_point_sim.eta()), longpos_res / recHit.positionError()); + meLongPosPullvsE_->Fill(m_btlSimHits[detId.rawId()].energy, longpos_res / recHit.positionError()); + meTPullvsEta_->Fill(fabs(global_point_sim.eta()), time_res / recHit.timeError()); meTPullvsE_->Fill(m_btlSimHits[detId.rawId()].energy, time_res / recHit.timeError()); } @@ -318,18 +328,35 @@ void BtlLocalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, meHitLongPos_ = ibook.book1D("BtlLongPos", "BTL RECO hits longitudinal position;long. pos._{RECO}", 100, -10, 10); meHitLongPosErr_ = ibook.book1D("BtlLongPosErr", "BTL RECO hits longitudinal position error; long. pos. error_{RECO}", 100, -1, 1); - meTimeRes_ = ibook.book1D("BtlTimeRes", "BTL time resolution;T_{RECO}-T_{SIM}/T_{SIM} [ns]", 100, -0.5, 0.5); - meEnergyRes_ = ibook.book1D("BtlEnergyRes", "BTL energy resolution;E_{RECO}-E_{SIM}/E_{SIM} [MeV]", 100, -0.5, 0.5); - meTPullvsE_ = ibook.bookProfile("BtlTPullvsE", - "BTL time pull vs E;E_{SIM} [MeV];T_{RECO}-T_{SIM}/#sigma_T_{RECO} [ns]", - 20, - 0., - 20., - -0.8, - 0.8, - "S"); + meTimeRes_ = ibook.book1D("BtlTimeRes", "BTL time resolution;T_{RECO}-T_{SIM}/T_{SIM}", 100, -0.5, 0.5); + meEnergyRes_ = ibook.book1D("BtlEnergyRes", "BTL energy resolution;E_{RECO}-E_{SIM}/E_{SIM}", 100, -0.5, 0.5); + meLongPosPull_ = ibook.book1D("BtlLongPosPull", + "BTL longitudinal position pull;X^{loc}_{RECO}-X^{loc}_{SIM}/#sigma_{xloc_{RECO}}", + 100, + -5.5, + 5.5); + meLongPosPullvsE_ = ibook.bookProfile( + "BtlLongposPullvsE", + "BTL longitudinal position pull vs E;E_{SIM} [MeV];X^{loc}_{RECO}-X^{loc}_{SIM}/#sigma_{xloc_{RECO}}", + 20, + 0., + 20., + -1.5, + 1.5, + "S"); + meLongPosPullvsEta_ = ibook.bookProfile( + "BtlLongposPullvsEta", + "BTL longitudinal position pull vs #eta;|#eta_{RECO}|;X^{loc}_{RECO}-X^{loc}_{SIM}/#sigma_{xloc_{RECO}}", + 32, + 0, + 1.55, + -1.5, + 1.5, + "S"); + meTPullvsE_ = ibook.bookProfile( + "BtlTPullvsE", "BTL time pull vs E;E_{SIM} [MeV];T_{RECO}-T_{SIM}/#sigma_{T_{RECO}}", 20, 0., 20., -0.8, 0.8, "S"); meTPullvsEta_ = ibook.bookProfile("BtlTPullvsEta", - "BTL time pull vs #eta;|#eta_{RECO}|;T_{RECO}-T_{SIM}/#sigma_T_{RECO} [ns]", + "BTL time pull vs #eta;|#eta_{RECO}|;T_{RECO}-T_{SIM}/#sigma_{T_{RECO}}", 32, 0, 1.55, @@ -354,7 +381,7 @@ void BtlLocalRecoValidation::fillDescriptions(edm::ConfigurationDescriptions& de desc.add("simHitsTag", edm::InputTag("mix", "g4SimHitsFastTimerHitsBarrel")); desc.add("recCluTag", edm::InputTag("mtdClusters", "FTLBarrel")); desc.add("hitMinimumEnergy", 1.); // [MeV] - desc.add("LocalPositionDebug", false); + desc.add("LocalPositionDebug", true); descriptions.add("btlLocalReco", desc); } diff --git a/Validation/MtdValidation/plugins/EtlLocalRecoValidation.cc b/Validation/MtdValidation/plugins/EtlLocalRecoValidation.cc index fb65c367b5927..e13d15b586ee2 100644 --- a/Validation/MtdValidation/plugins/EtlLocalRecoValidation.cc +++ b/Validation/MtdValidation/plugins/EtlLocalRecoValidation.cc @@ -487,8 +487,8 @@ void EtlLocalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, meHitEta_[2] = ibook.book1D( "EtlHitEtaZposD1", "ETL RECO hits #eta (+Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO}", 100, 1.56, 3.2); meHitEta_[3] = ibook.book1D("EtlHitEtaZposD2", "ETL RECO hits #eta (+Z, Second Disk);#eta_{RECO}", 100, 1.56, 3.2); - meTimeRes_ = ibook.book1D("EtlTimeRes", "ETL time resolution;T_{RECO}-T_{SIM}/T_{SIM} [ns]", 100, -0.5, 0.5); - meEnergyRes_ = ibook.book1D("EtlEnergyRes", "ETL energy resolution;E_{RECO}-E_{SIM}/E_{SIM} [MeV]", 100, -0.5, 0.5); + meTimeRes_ = ibook.book1D("EtlTimeRes", "ETL time resolution;T_{RECO}-T_{SIM}/T_{SIM}", 100, -0.5, 0.5); + meEnergyRes_ = ibook.book1D("EtlEnergyRes", "ETL energy resolution;E_{RECO}-E_{SIM}/E_{SIM}", 100, -0.5, 0.5); meHitTvsE_[0] = ibook.bookProfile( "EtlHitTvsEZnegD1", "ETL RECO time vs energy (-Z, Single(topo1D)/First(topo2D) Disk);E_{RECO} [MeV];ToA_{RECO} [ns]", @@ -639,16 +639,10 @@ void EtlLocalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, 3.2, 0., 100.); - meTPullvsE_ = ibook.bookProfile("EtlTPullvsE", - "ETL time pull vs E;E_{SIM} [MeV];T_{RECO}-T_{SIM}/#sigma_T_{RECO} [ns]", - 20, - 0., - 2., - -0.8, - 0.8, - "S"); + meTPullvsE_ = ibook.bookProfile( + "EtlTPullvsE", "ETL time pull vs E;E_{SIM} [MeV];T_{RECO}-T_{SIM}/#sigma_{T_{RECO}}", 20, 0., 2., -0.8, 0.8, "S"); meTPullvsEta_ = ibook.bookProfile("EtlTPullvsEta", - "ETL time pull vs #eta;|#eta_{RECO}|;T_{RECO}-T_{SIM}/#sigma_T_{RECO} [ns]", + "ETL time pull vs #eta;|#eta_{RECO}|;T_{RECO}-T_{SIM}/#sigma_{T_{RECO}}", 26, 1.65, 3.0, From 1af8dad1eb2a8a8dbf0ae01a5375177ce1a9713c Mon Sep 17 00:00:00 2001 From: Giulia Sorrentino Date: Wed, 24 Mar 2021 15:09:30 +0100 Subject: [PATCH 6/8] minor fix: restoring correct value of LocalPositionDebug flag --- Validation/MtdValidation/plugins/BtlLocalRecoValidation.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Validation/MtdValidation/plugins/BtlLocalRecoValidation.cc b/Validation/MtdValidation/plugins/BtlLocalRecoValidation.cc index b5278350fbb70..9050b9ccc4950 100644 --- a/Validation/MtdValidation/plugins/BtlLocalRecoValidation.cc +++ b/Validation/MtdValidation/plugins/BtlLocalRecoValidation.cc @@ -381,7 +381,7 @@ void BtlLocalRecoValidation::fillDescriptions(edm::ConfigurationDescriptions& de desc.add("simHitsTag", edm::InputTag("mix", "g4SimHitsFastTimerHitsBarrel")); desc.add("recCluTag", edm::InputTag("mtdClusters", "FTLBarrel")); desc.add("hitMinimumEnergy", 1.); // [MeV] - desc.add("LocalPositionDebug", true); + desc.add("LocalPositionDebug", false); descriptions.add("btlLocalReco", desc); } From 1f1606372e6be78a9958bc5197b91fbb5a88938e Mon Sep 17 00:00:00 2001 From: Giulia Sorrentino Date: Thu, 25 Mar 2021 11:24:16 +0100 Subject: [PATCH 7/8] Moving fabs to std::abs --- Validation/MtdValidation/plugins/BtlLocalRecoValidation.cc | 4 ++-- Validation/MtdValidation/plugins/EtlLocalRecoValidation.cc | 2 +- Validation/MtdValidation/plugins/MtdTracksValidation.cc | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Validation/MtdValidation/plugins/BtlLocalRecoValidation.cc b/Validation/MtdValidation/plugins/BtlLocalRecoValidation.cc index 9050b9ccc4950..4569af450946d 100644 --- a/Validation/MtdValidation/plugins/BtlLocalRecoValidation.cc +++ b/Validation/MtdValidation/plugins/BtlLocalRecoValidation.cc @@ -240,10 +240,10 @@ void BtlLocalRecoValidation::analyze(const edm::Event& iEvent, const edm::EventS meEnergyRes_->Fill(energy_res / m_btlSimHits[detId.rawId()].energy); meLongPosPull_->Fill(longpos_res / recHit.positionError()); - meLongPosPullvsEta_->Fill(fabs(global_point_sim.eta()), longpos_res / recHit.positionError()); + meLongPosPullvsEta_->Fill(std::abs(global_point_sim.eta()), longpos_res / recHit.positionError()); meLongPosPullvsE_->Fill(m_btlSimHits[detId.rawId()].energy, longpos_res / recHit.positionError()); - meTPullvsEta_->Fill(fabs(global_point_sim.eta()), time_res / recHit.timeError()); + meTPullvsEta_->Fill(std::abs(global_point_sim.eta()), time_res / recHit.timeError()); meTPullvsE_->Fill(m_btlSimHits[detId.rawId()].energy, time_res / recHit.timeError()); } diff --git a/Validation/MtdValidation/plugins/EtlLocalRecoValidation.cc b/Validation/MtdValidation/plugins/EtlLocalRecoValidation.cc index e13d15b586ee2..ef3f95fe44e80 100644 --- a/Validation/MtdValidation/plugins/EtlLocalRecoValidation.cc +++ b/Validation/MtdValidation/plugins/EtlLocalRecoValidation.cc @@ -271,7 +271,7 @@ void EtlLocalRecoValidation::analyze(const edm::Event& iEvent, const edm::EventS meTimeRes_->Fill(time_res / m_etlSimHits[idet][detId.rawId()].time); meEnergyRes_->Fill(energy_res / m_etlSimHits[idet][detId.rawId()].energy); - meTPullvsEta_->Fill(fabs(global_point.eta()), time_res / recHit.timeError()); + meTPullvsEta_->Fill(std::abs(global_point.eta()), time_res / recHit.timeError()); meTPullvsE_->Fill(m_etlSimHits[idet][detId.rawId()].energy, time_res / recHit.timeError()); } } diff --git a/Validation/MtdValidation/plugins/MtdTracksValidation.cc b/Validation/MtdValidation/plugins/MtdTracksValidation.cc index 9424880193a4a..6bd7448e30eca 100644 --- a/Validation/MtdValidation/plugins/MtdTracksValidation.cc +++ b/Validation/MtdValidation/plugins/MtdTracksValidation.cc @@ -178,9 +178,9 @@ void MtdTracksValidation::analyze(const edm::Event& iEvent, const edm::EventSetu meTrackSigmat0SafePid_->Fill(Sigmat0Safe[trackref]); meTrackMVAQual_->Fill(mtdQualMVA[trackref]); - meTrackPathLenghtvsEta_->Fill(std::fabs(track.eta()), pathLength[mtdTrackref]); + meTrackPathLenghtvsEta_->Fill(std::abs(track.eta()), pathLength[mtdTrackref]); - if (fabs(track.eta()) < trackMinEta_) { + if (std::abs(track.eta()) < trackMinEta_) { // --- all BTL tracks (with and without hit in MTD) --- meBTLTrackEffEtaTot_->Fill(track.eta()); meBTLTrackEffPhiTot_->Fill(track.phi()); From 65147b920b59a12598dc4f757b51582c1bf8e282 Mon Sep 17 00:00:00 2001 From: Giulia Sorrentino Date: Fri, 26 Mar 2021 18:09:17 +0100 Subject: [PATCH 8/8] Update with Fabio's comments and additional MEs --- .../plugins/BtlLocalRecoValidation.cc | 11 +-- .../plugins/EtlLocalRecoValidation.cc | 24 +++++-- .../plugins/MtdTracksValidation.cc | 70 ++++++++++++------- 3 files changed, 71 insertions(+), 34 deletions(-) diff --git a/Validation/MtdValidation/plugins/BtlLocalRecoValidation.cc b/Validation/MtdValidation/plugins/BtlLocalRecoValidation.cc index 4569af450946d..1297a95dc5e98 100644 --- a/Validation/MtdValidation/plugins/BtlLocalRecoValidation.cc +++ b/Validation/MtdValidation/plugins/BtlLocalRecoValidation.cc @@ -114,6 +114,7 @@ class BtlLocalRecoValidation : public DQMEDAnalyzer { MonitorElement* meTPullvsEta_; MonitorElement* meCluTime_; + MonitorElement* meCluTimeError_; MonitorElement* meCluEnergy_; MonitorElement* meCluPhi_; MonitorElement* meCluEta_; @@ -236,8 +237,8 @@ void BtlLocalRecoValidation::analyze(const edm::Event& iEvent, const edm::EventS topo.pixelToModuleLocalPoint(local_point_sim, detId.row(topo.nrows()), detId.column(topo.nrows())); const auto& global_point_sim = thedet->toGlobal(local_point_sim); - meTimeRes_->Fill(time_res / m_btlSimHits[detId.rawId()].time); - meEnergyRes_->Fill(energy_res / m_btlSimHits[detId.rawId()].energy); + meTimeRes_->Fill(time_res); + meEnergyRes_->Fill(energy_res); meLongPosPull_->Fill(longpos_res / recHit.positionError()); meLongPosPullvsEta_->Fill(std::abs(global_point_sim.eta()), longpos_res / recHit.positionError()); @@ -276,6 +277,7 @@ void BtlLocalRecoValidation::analyze(const edm::Event& iEvent, const edm::EventS meCluEnergy_->Fill(cluster.energy()); meCluTime_->Fill(cluster.time()); + meCluTimeError_->Fill(cluster.timeError()); meCluPhi_->Fill(global_point.phi()); meCluEta_->Fill(global_point.eta()); meCluZvsPhi_->Fill(global_point.z(), global_point.phi()); @@ -328,8 +330,8 @@ void BtlLocalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, meHitLongPos_ = ibook.book1D("BtlLongPos", "BTL RECO hits longitudinal position;long. pos._{RECO}", 100, -10, 10); meHitLongPosErr_ = ibook.book1D("BtlLongPosErr", "BTL RECO hits longitudinal position error; long. pos. error_{RECO}", 100, -1, 1); - meTimeRes_ = ibook.book1D("BtlTimeRes", "BTL time resolution;T_{RECO}-T_{SIM}/T_{SIM}", 100, -0.5, 0.5); - meEnergyRes_ = ibook.book1D("BtlEnergyRes", "BTL energy resolution;E_{RECO}-E_{SIM}/E_{SIM}", 100, -0.5, 0.5); + meTimeRes_ = ibook.book1D("BtlTimeRes", "BTL time resolution;T_{RECO}-T_{SIM}", 100, -0.5, 0.5); + meEnergyRes_ = ibook.book1D("BtlEnergyRes", "BTL energy resolution;E_{RECO}-E_{SIM}", 100, -0.5, 0.5); meLongPosPull_ = ibook.book1D("BtlLongPosPull", "BTL longitudinal position pull;X^{loc}_{RECO}-X^{loc}_{SIM}/#sigma_{xloc_{RECO}}", 100, @@ -364,6 +366,7 @@ void BtlLocalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, 0.8, "S"); meCluTime_ = ibook.book1D("BtlCluTime", "BTL cluster time ToA;ToA [ns]", 250, 0, 25); + meCluTimeError_ = ibook.book1D("BtlCluTimeError", "BTL cluster time error;#sigma_{t} [ns]", 100, 0, 0.1); meCluEnergy_ = ibook.book1D("BtlCluEnergy", "BTL cluster energy;E_{RECO} [MeV]", 100, 0, 20); meCluPhi_ = ibook.book1D("BtlCluPhi", "BTL cluster #phi;#phi_{RECO} [rad]", 144, -3.2, 3.2); meCluEta_ = ibook.book1D("BtlCluEta", "BTL cluster #eta;#eta_{RECO}", 100, -1.55, 1.55); diff --git a/Validation/MtdValidation/plugins/EtlLocalRecoValidation.cc b/Validation/MtdValidation/plugins/EtlLocalRecoValidation.cc index ef3f95fe44e80..d63af90f6208f 100644 --- a/Validation/MtdValidation/plugins/EtlLocalRecoValidation.cc +++ b/Validation/MtdValidation/plugins/EtlLocalRecoValidation.cc @@ -94,6 +94,7 @@ class EtlLocalRecoValidation : public DQMEDAnalyzer { MonitorElement* meHitTvsEta_[4]; MonitorElement* meCluTime_[4]; + MonitorElement* meCluTimeError_[4]; MonitorElement* meCluEnergy_[4]; MonitorElement* meCluPhi_[4]; MonitorElement* meCluEta_[4]; @@ -268,8 +269,8 @@ void EtlLocalRecoValidation::analyze(const edm::Event& iEvent, const edm::EventS float time_res = recHit.time() - m_etlSimHits[idet][detId.rawId()].time; float energy_res = recHit.energy() - m_etlSimHits[idet][detId.rawId()].energy; - meTimeRes_->Fill(time_res / m_etlSimHits[idet][detId.rawId()].time); - meEnergyRes_->Fill(energy_res / m_etlSimHits[idet][detId.rawId()].energy); + meTimeRes_->Fill(time_res); + meEnergyRes_->Fill(energy_res); meTPullvsEta_->Fill(std::abs(global_point.eta()), time_res / recHit.timeError()); meTPullvsE_->Fill(m_etlSimHits[idet][detId.rawId()].energy, time_res / recHit.timeError()); @@ -346,6 +347,7 @@ void EtlLocalRecoValidation::analyze(const edm::Event& iEvent, const edm::EventS meCluEnergy_[idet]->Fill(cluster.energy()); meCluTime_[idet]->Fill(cluster.time()); + meCluTimeError_[idet]->Fill(cluster.timeError()); meCluPhi_[idet]->Fill(global_point.phi()); meCluEta_[idet]->Fill(global_point.eta()); meCluOccupancy_[idet]->Fill(global_point.x(), global_point.y(), weight); @@ -487,8 +489,8 @@ void EtlLocalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, meHitEta_[2] = ibook.book1D( "EtlHitEtaZposD1", "ETL RECO hits #eta (+Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO}", 100, 1.56, 3.2); meHitEta_[3] = ibook.book1D("EtlHitEtaZposD2", "ETL RECO hits #eta (+Z, Second Disk);#eta_{RECO}", 100, 1.56, 3.2); - meTimeRes_ = ibook.book1D("EtlTimeRes", "ETL time resolution;T_{RECO}-T_{SIM}/T_{SIM}", 100, -0.5, 0.5); - meEnergyRes_ = ibook.book1D("EtlEnergyRes", "ETL energy resolution;E_{RECO}-E_{SIM}/E_{SIM}", 100, -0.5, 0.5); + meTimeRes_ = ibook.book1D("EtlTimeRes", "ETL time resolution;T_{RECO}-T_{SIM}", 100, -0.5, 0.5); + meEnergyRes_ = ibook.book1D("EtlEnergyRes", "ETL energy resolution;E_{RECO}-E_{SIM}", 100, -0.5, 0.5); meHitTvsE_[0] = ibook.bookProfile( "EtlHitTvsEZnegD1", "ETL RECO time vs energy (-Z, Single(topo1D)/First(topo2D) Disk);E_{RECO} [MeV];ToA_{RECO} [ns]", @@ -655,6 +657,20 @@ void EtlLocalRecoValidation::bookHistograms(DQMStore::IBooker& ibook, meCluTime_[2] = ibook.book1D("EtlCluTimeZposD1", "ETL cluster ToA (+Z, Single(topo1D)/First(topo2D) Disk);ToA [ns]", 250, 0, 25); meCluTime_[3] = ibook.book1D("EtlCluTimeZposD2", "ETL cluster ToA (+Z, Second Disk);ToA [ns]", 250, 0, 25); + meCluTimeError_[0] = ibook.book1D("EtlCluTimeErrosZnegD1", + "ETL cluster time error (-Z, Single(topo1D)/First(topo2D) Disk);#sigma_{t} [ns]", + 100, + 0, + 0.1); + meCluTimeError_[1] = + ibook.book1D("EtlCluTimeErrorZnegD2", "ETL cluster time error (-Z, Second Disk);#sigma_{t} [ns]", 100, 0, 0.1); + meCluTimeError_[2] = ibook.book1D("EtlCluTimeErrorZposD1", + "ETL cluster time error (+Z, Single(topo1D)/First(topo2D) Disk);#sigma_{t} [ns]", + 100, + 0, + 0.1); + meCluTimeError_[3] = + ibook.book1D("EtlCluTimeErrorZposD2", "ETL cluster time error (+Z, Second Disk);#sigma_{t} [ns]", 100, 0, 0.1); meCluEnergy_[0] = ibook.book1D( "EtlCluEnergyZnegD1", "ETL cluster energy (-Z, Single(topo1D)/First(topo2D) Disk);E_{RECO} [MeV]", 100, 0, 10); meCluEnergy_[1] = diff --git a/Validation/MtdValidation/plugins/MtdTracksValidation.cc b/Validation/MtdValidation/plugins/MtdTracksValidation.cc index 6bd7448e30eca..875cdac29d667 100644 --- a/Validation/MtdValidation/plugins/MtdTracksValidation.cc +++ b/Validation/MtdValidation/plugins/MtdTracksValidation.cc @@ -47,7 +47,7 @@ class MtdTracksValidation : public DQMEDAnalyzer { // ------------ member data ------------ const std::string folder_; - const float trackMinEnergy_; + const float trackMinPt_; const float trackMinEta_; const float trackMaxEta_; @@ -60,6 +60,8 @@ class MtdTracksValidation : public DQMEDAnalyzer { edm::EDGetTokenT> tmtdToken_; edm::EDGetTokenT> SigmatmtdToken_; + edm::EDGetTokenT> t0SrcToken_; + edm::EDGetTokenT> Sigmat0SrcToken_; edm::EDGetTokenT> t0PidToken_; edm::EDGetTokenT> Sigmat0PidToken_; edm::EDGetTokenT> t0SafePidToken_; @@ -85,7 +87,8 @@ class MtdTracksValidation : public DQMEDAnalyzer { MonitorElement* meETLTrackPtRes_; MonitorElement* meTracktmtd_; - MonitorElement* meTrackSigmatmtd_; + MonitorElement* meTrackt0Src_; + MonitorElement* meTrackSigmat0Src_; MonitorElement* meTrackt0Pid_; MonitorElement* meTrackSigmat0Pid_; MonitorElement* meTrackt0SafePid_; @@ -102,7 +105,7 @@ class MtdTracksValidation : public DQMEDAnalyzer { // ------------ constructor and destructor -------------- MtdTracksValidation::MtdTracksValidation(const edm::ParameterSet& iConfig) : folder_(iConfig.getParameter("folder")), - trackMinEnergy_(iConfig.getParameter("trackMinimumPt")), + trackMinPt_(iConfig.getParameter("trackMinimumPt")), trackMinEta_(iConfig.getParameter("trackMinimumEta")), trackMaxEta_(iConfig.getParameter("trackMaximumEta")) { GenRecTrackToken_ = consumes(iConfig.getParameter("inputTagG")); @@ -110,8 +113,10 @@ MtdTracksValidation::MtdTracksValidation(const edm::ParameterSet& iConfig) RecVertexToken_ = consumes>(iConfig.getParameter("inputTagV")); trackAssocToken_ = consumes>(iConfig.getParameter("trackAssocSrc")); pathLengthToken_ = consumes>(iConfig.getParameter("pathLengthSrc")); - tmtdToken_ = consumes>(iConfig.getParameter("t0Src")); - SigmatmtdToken_ = consumes>(iConfig.getParameter("sigmat0Src")); + tmtdToken_ = consumes>(iConfig.getParameter("tmtd")); + SigmatmtdToken_ = consumes>(iConfig.getParameter("sigmatmtd")); + t0SrcToken_ = consumes>(iConfig.getParameter("t0Src")); + Sigmat0SrcToken_ = consumes>(iConfig.getParameter("sigmat0Src")); t0PidToken_ = consumes>(iConfig.getParameter("t0PID")); Sigmat0PidToken_ = consumes>(iConfig.getParameter("sigmat0PID")); t0SafePidToken_ = consumes>(iConfig.getParameter("t0SafePID")); @@ -145,6 +150,8 @@ void MtdTracksValidation::analyze(const edm::Event& iEvent, const edm::EventSetu const auto& tMtd = iEvent.get(tmtdToken_); const auto& SigmatMtd = iEvent.get(SigmatmtdToken_); + const auto& t0Src = iEvent.get(t0SrcToken_); + const auto& Sigmat0Src = iEvent.get(Sigmat0SrcToken_); const auto& t0Pid = iEvent.get(t0PidToken_); const auto& Sigmat0Pid = iEvent.get(Sigmat0PidToken_); const auto& t0Safe = iEvent.get(t0SafePidToken_); @@ -167,11 +174,18 @@ void MtdTracksValidation::analyze(const edm::Event& iEvent, const edm::EventSetu const reco::TrackRef mtdTrackref = reco::TrackRef(iEvent.getHandle(RecTrackToken_), trackAssoc[trackref]); const reco::Track track = *mtdTrackref; - if (track.pt() < trackMinEnergy_) + if (track.pt() < trackMinPt_) continue; - meTracktmtd_->Fill(tMtd[trackref]); - meTrackSigmatmtd_->Fill(SigmatMtd[trackref]); + meTracktmtd_->Fill(tMtd[mtdTrackref]); + if (std::round(SigmatMtd[mtdTrackref] - Sigmat0Pid[trackref]) != 0) { + LogWarning("mtdTracks") << "TimeError associated to refitted track is different from TimeError stored in tofPID " + "sigmat0 ValueMap: this should not happen"; + } + + meTrackt0Src_->Fill(t0Src[trackref]); + meTrackSigmat0Src_->Fill(Sigmat0Src[trackref]); + meTrackt0Pid_->Fill(t0Pid[trackref]); meTrackSigmat0Pid_->Fill(Sigmat0Pid[trackref]); meTrackt0SafePid_->Fill(t0Safe[trackref]); @@ -352,15 +366,17 @@ void MtdTracksValidation::bookHistograms(DQMStore::IBooker& ibook, edm::Run cons ibook.book1D("TrackETLEffPtMtdZpos", "Track efficiency vs pt (Mtd) (+Z);pt_{RECO} [GeV]", 50, 0, 10); meETLTrackPtRes_ = ibook.book1D("TrackETLPtRes", "Track pT resolution;pT_{Gentrack}-pT_{MTDtrack}/pT_{Gentrack} ", 100, -0.1, 0.1); - meTracktmtd_ = ibook.book1D("Tracktmtd", "Track time from TrackExtenderWithMTD;tmtd [ns]", 100, -1.5, 1.5); - meTrackSigmatmtd_ = - ibook.book1D("TrackSigmatmtd", "Time Error from TrackExtenderWithMTD; #sigma_{tmtd} [ns]", 100, 0, 0.1); + + meTracktmtd_ = ibook.book1D("Tracktmtd", "Track time from TrackExtenderWithMTD;tmtd [ns]", 150, 1, 16); + meTrackt0Src_ = ibook.book1D("Trackt0Src", "Track time from TrackExtenderWithMTD;t0Src [ns]", 100, -1.5, 1.5); + meTrackSigmat0Src_ = + ibook.book1D("TrackSigmat0Src", "Time Error from TrackExtenderWithMTD; #sigma_{t0Src} [ns]", 100, 0, 0.1); + meTrackt0Pid_ = ibook.book1D("Trackt0Pid", "Track t0 as stored in TofPid;t0 [ns]", 100, -1, 1); - meTrackSigmat0Pid_ = - ibook.book1D("TrackSigmat0Pid", "Sigmat0 as stored in TofPid; #sigma_{t0} [ns]", 100, -0.02, 0.06); + meTrackSigmat0Pid_ = ibook.book1D("TrackSigmat0Pid", "Sigmat0 as stored in TofPid; #sigma_{t0} [ns]", 100, 0, 0.1); meTrackt0SafePid_ = ibook.book1D("Trackt0SafePID", "Track t0 Safe as stored in TofPid;t0 [ns]", 100, -1, 1); meTrackSigmat0SafePid_ = - ibook.book1D("TrackSigmat0SafePID", "Sigmat0 Safe as stored in TofPid; #sigma_{t0} [ns]", 100, -0.02, 0.06); + ibook.book1D("TrackSigmat0SafePID", "Sigmat0 Safe as stored in TofPid; #sigma_{t0} [ns]", 100, 0, 0.1); meTrackNumHits_ = ibook.book1D("TrackNumHits", "Number of valid MTD hits per track ; Number of hits", 10, -5, 5); meTrackMVAQual_ = ibook.book1D("TrackMVAQual", "Track MVA Quality as stored in Value Map ; MVAQual", 100, 0, 1); meTrackPathLenghtvsEta_ = ibook.bookProfile( @@ -376,19 +392,21 @@ void MtdTracksValidation::fillDescriptions(edm::ConfigurationDescriptions& descr edm::ParameterSetDescription desc; desc.add("folder", "MTD/Tracks"); - desc.add("inputTagG", edm::InputTag("generalTracks", "")); - desc.add("inputTagT", edm::InputTag("trackExtenderWithMTD", "")); - desc.add("inputTagV", edm::InputTag("offlinePrimaryVertices4D", "")); - desc.add("t0Src", edm::InputTag("trackExtenderWithMTD:generalTrackt0", "")); - desc.add("sigmat0Src", edm::InputTag("trackExtenderWithMTD:generalTracksigmat0", "")); - desc.add("trackAssocSrc", edm::InputTag("trackExtenderWithMTD", "generalTrackassoc")) + desc.add("inputTagG", edm::InputTag("generalTracks")); + desc.add("inputTagT", edm::InputTag("trackExtenderWithMTD")); + desc.add("inputTagV", edm::InputTag("offlinePrimaryVertices4D")); + desc.add("tmtd", edm::InputTag("trackExtenderWithMTD:tmtd")); + desc.add("sigmatmtd", edm::InputTag("trackExtenderWithMTD:sigmatmtd")); + desc.add("t0Src", edm::InputTag("trackExtenderWithMTD:generalTrackt0")); + desc.add("sigmat0Src", edm::InputTag("trackExtenderWithMTD:generalTracksigmat0")); + desc.add("trackAssocSrc", edm::InputTag("trackExtenderWithMTD:generalTrackassoc")) ->setComment("Association between General and MTD Extended tracks"); - desc.add("pathLengthSrc", edm::InputTag("trackExtenderWithMTD", "pathLength")); - desc.add("t0SafePID", edm::InputTag("tofPID:t0safe", "")); - desc.add("sigmat0SafePID", edm::InputTag("tofPID:sigmat0safe", "")); - desc.add("sigmat0PID", edm::InputTag("tofPID:sigmat0", "")); - desc.add("t0PID", edm::InputTag("tofPID:t0", "")); - desc.add("trackMVAQual", edm::InputTag("mtdTrackQualityMVA:mtdQualMVA", "")); + desc.add("pathLengthSrc", edm::InputTag("trackExtenderWithMTD:pathLength")); + desc.add("t0SafePID", edm::InputTag("tofPID:t0safe")); + desc.add("sigmat0SafePID", edm::InputTag("tofPID:sigmat0safe")); + desc.add("sigmat0PID", edm::InputTag("tofPID:sigmat0")); + desc.add("t0PID", edm::InputTag("tofPID:t0")); + desc.add("trackMVAQual", edm::InputTag("mtdTrackQualityMVA:mtdQualMVA")); desc.add("trackMinimumPt", 1.0); // [GeV] desc.add("trackMinimumEta", 1.5); desc.add("trackMaximumEta", 3.2);