Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MTD Validation: add efficiency plots for correct reco match #47008

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 82 additions & 1 deletion Validation/MtdValidation/plugins/MtdTracksHarvester.cc
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,17 @@ class MtdTracksHarvester : public DQMEDHarvester {
MonitorElement* meBTLTPPtMatchEff_;
MonitorElement* meBTLTPEtaMatchEff_;
MonitorElement* meETLTPPtSelEff_;
MonitorElement* meBTLTPPtCorrectMatchEff_;
MonitorElement* meBTLTPEtaCorrectMatchEff_;
MonitorElement* meETLTPEtaSelEff_;
MonitorElement* meETLTPPtMatchEff_;
MonitorElement* meETLTPEtaMatchEff_;
MonitorElement* meETLTPPtMatchEff2_;
MonitorElement* meETLTPEtaMatchEff2_;
MonitorElement* meETLTPPtCorrectMatchEff_;
MonitorElement* meETLTPEtaCorrectMatchEff_;
MonitorElement* meETLTPPtCorrectMatchEff2_;
MonitorElement* meETLTPEtaCorrectMatchEff2_;

// - BTL track-mtd matching efficiencies
MonitorElement* meBTLTPmtdDirectEtaSelEff_;
Expand Down Expand Up @@ -187,6 +193,8 @@ void MtdTracksHarvester::dqmEndJob(DQMStore::IBooker& ibook, DQMStore::IGetter&
MonitorElement* meETLTrackMatchedTPEtaTot = igetter.get(folder_ + "ETLTrackMatchedTPEtaTot");
MonitorElement* meETLTrackMatchedTPEtaMtd = igetter.get(folder_ + "ETLTrackMatchedTPEtaMtd");
MonitorElement* meETLTrackMatchedTPEta2Mtd = igetter.get(folder_ + "ETLTrackMatchedTPEta2Mtd");
MonitorElement* meETLTrackMatchedTPPtMtdCorrect = igetter.get(folder_ + "ETLTrackMatchedTPPtMtdCorrect");
MonitorElement* meETLTrackMatchedTPEtaMtdCorrect = igetter.get(folder_ + "ETLTrackMatchedTPEtaMtdCorrect");

//
MonitorElement* meBTLTrackMatchedTPmtdDirectEta = igetter.get(folder_ + "BTLTrackMatchedTPmtdDirectEta");
Expand Down Expand Up @@ -268,7 +276,7 @@ void MtdTracksHarvester::dqmEndJob(DQMStore::IBooker& ibook, DQMStore::IGetter&
!meBTLTrackMatchedTPPtTot || !meBTLTrackMatchedTPPtMtd || !meBTLTrackMatchedTPEtaTot ||
!meBTLTrackMatchedTPEtaMtd || !meETLTrackMatchedTPPtTot || !meETLTrackMatchedTPPtMtd ||
!meETLTrackMatchedTPPt2Mtd || !meETLTrackMatchedTPEtaTot || !meETLTrackMatchedTPEtaMtd ||
!meETLTrackMatchedTPEta2Mtd ||
!meETLTrackMatchedTPEta2Mtd || !meETLTrackMatchedTPPtMtdCorrect || !meETLTrackMatchedTPEtaMtdCorrect ||

!meBTLTrackMatchedTPmtdDirectEta || !meBTLTrackMatchedTPmtdDirectPt || !meBTLTrackMatchedTPmtdOtherEta ||
!meBTLTrackMatchedTPmtdOtherPt || !meBTLTrackMatchedTPnomtdEta || !meBTLTrackMatchedTPnomtdPt ||
Expand Down Expand Up @@ -468,6 +476,42 @@ void MtdTracksHarvester::dqmEndJob(DQMStore::IBooker& ibook, DQMStore::IGetter&
meBTLTPEtaMatchEff_->getTH1()->SetMinimum(0.);
computeEfficiency1D(meBTLTrackMatchedTPEtaMtd, meBTLTrackMatchedTPEtaTot, meBTLTPEtaMatchEff_);

// -- BTL fraction of tracks with time and correct reco match
meBTLTPPtCorrectMatchEff_ =
ibook.book1D("BTLTPPtCorrectMatchEff",
"Track matched to TP efficiency for correct reco match VS Pt;Pt [GeV];Efficiency",
meBTLTrackMatchedTPPtMtd->getNbinsX(),
meBTLTrackMatchedTPPtMtd->getTH1()->GetXaxis()->GetXmin(),
meBTLTrackMatchedTPPtMtd->getTH1()->GetXaxis()->GetXmax());
meBTLTPPtCorrectMatchEff_->getTH1()->SetMinimum(0.);
MonitorElement* meBTLTrackMatchedTPPtMtdCorrect =
ibook.book1D("BTLTrackMatchedTPPtMtdCorrect",
"Pt of tracks matched to TP with correct reco match; Pt [GeV];Efficiency",
meBTLTrackMatchedTPPtMtd->getNbinsX(),
meBTLTrackMatchedTPPtMtd->getTH1()->GetXaxis()->GetXmin(),
meBTLTrackMatchedTPPtMtd->getTH1()->GetXaxis()->GetXmax());
meBTLTrackMatchedTPPtMtdCorrect->getTH1F()->Add(meBTLTrackMatchedTPmtdDirectCorrectAssocPt->getTH1F(),
meBTLTrackMatchedTPmtdOtherCorrectAssocPt->getTH1F());
computeEfficiency1D(meBTLTrackMatchedTPPtMtdCorrect, meBTLTrackMatchedTPPtMtd, meBTLTPPtCorrectMatchEff_);

meBTLTPEtaCorrectMatchEff_ =
ibook.book1D("BTLTPEtaCorrectMatchEff",
"Track matched to TP efficiency for correct reco match VS Eta;Eta;Efficiency",
meBTLTrackMatchedTPEtaMtd->getNbinsX(),
meBTLTrackMatchedTPEtaMtd->getTH1()->GetXaxis()->GetXmin(),
meBTLTrackMatchedTPEtaMtd->getTH1()->GetXaxis()->GetXmax());
meBTLTPEtaCorrectMatchEff_->getTH1()->SetMinimum(0.);
MonitorElement* meBTLTrackMatchedTPEtaMtdCorrect =
ibook.book1D("BTLTrackMatchedTPEtaMtdCorrect",
"Eta of tracks matched to TP with correct reco match; Eta [GeV];Efficiency",
meBTLTrackMatchedTPEtaMtd->getNbinsX(),
meBTLTrackMatchedTPEtaMtd->getTH1()->GetXaxis()->GetXmin(),
meBTLTrackMatchedTPEtaMtd->getTH1()->GetXaxis()->GetXmax());
meBTLTrackMatchedTPEtaMtdCorrect->getTH1F()->Add(meBTLTrackMatchedTPmtdDirectCorrectAssocEta->getTH1F(),
meBTLTrackMatchedTPmtdOtherCorrectAssocEta->getTH1F());
computeEfficiency1D(meBTLTrackMatchedTPEtaMtdCorrect, meBTLTrackMatchedTPEtaMtd, meBTLTPEtaCorrectMatchEff_);

// -- ETL
meETLTPPtSelEff_ = ibook.book1D("ETLTPPtSelEff",
"Track selected efficiency TP VS Pt;Pt [GeV];Efficiency",
meETLTrackPtTot->getNbinsX(),
Expand Down Expand Up @@ -516,6 +560,43 @@ void MtdTracksHarvester::dqmEndJob(DQMStore::IBooker& ibook, DQMStore::IGetter&
meETLTPEtaMatchEff2_->getTH1()->SetMinimum(0.);
computeEfficiency1D(meETLTrackMatchedTPEta2Mtd, meETLTrackMatchedTPEtaTot, meETLTPEtaMatchEff2_);

//-- ETL fraction of tracks with time and correct reco match
meETLTPPtCorrectMatchEff_ =
ibook.book1D("ETLTPPtCorrectMatchEff",
"Track matched to TP efficiency with correct reco match VS Pt;Pt [GeV];Efficiency",
meETLTrackMatchedTPPtMtd->getNbinsX(),
meETLTrackMatchedTPPtMtd->getTH1()->GetXaxis()->GetXmin(),
meETLTrackMatchedTPPtMtd->getTH1()->GetXaxis()->GetXmax());
meETLTPPtCorrectMatchEff_->getTH1()->SetMinimum(0.);
computeEfficiency1D(meETLTrackMatchedTPPtMtdCorrect, meETLTrackMatchedTPPtMtd, meETLTPPtCorrectMatchEff_);

meETLTPEtaCorrectMatchEff_ =
ibook.book1D("ETLTPEtaCorrectMatchEff",
"Track matched to TP efficiency with correct reco match VS Eta;Eta;Efficiency",
meETLTrackMatchedTPEtaMtd->getNbinsX(),
meETLTrackMatchedTPEtaMtd->getTH1()->GetXaxis()->GetXmin(),
meETLTrackMatchedTPEtaMtd->getTH1()->GetXaxis()->GetXmax());
meETLTPEtaCorrectMatchEff_->getTH1()->SetMinimum(0.);
computeEfficiency1D(meETLTrackMatchedTPEtaMtdCorrect, meETLTrackMatchedTPEtaMtd, meETLTPEtaCorrectMatchEff_);

meETLTPPtCorrectMatchEff2_ =
ibook.book1D("ETLTPPtCorrectMatchEff2",
"Track matched to TP efficiency with correct reco match (2 hits) VS Pt;Pt [GeV];Efficiency",
meETLTrackMatchedTPPt2Mtd->getNbinsX(),
meETLTrackMatchedTPPt2Mtd->getTH1()->GetXaxis()->GetXmin(),
meETLTrackMatchedTPPt2Mtd->getTH1()->GetXaxis()->GetXmax());
meETLTPPtCorrectMatchEff2_->getTH1()->SetMinimum(0.);
computeEfficiency1D(meETLTrackMatchedTPmtd2CorrectAssocPt, meETLTrackMatchedTPPt2Mtd, meETLTPPtCorrectMatchEff2_);

meETLTPEtaCorrectMatchEff2_ =
ibook.book1D("ETLTPEtaCorrectMatchEff2",
"Track matched to TP efficiency with correct reco match (2 hits) VS Eta;Eta;Efficiency",
meETLTrackMatchedTPEta2Mtd->getNbinsX(),
meETLTrackMatchedTPEta2Mtd->getTH1()->GetXaxis()->GetXmin(),
meETLTrackMatchedTPEta2Mtd->getTH1()->GetXaxis()->GetXmax());
meETLTPEtaCorrectMatchEff2_->getTH1()->SetMinimum(0.);
computeEfficiency1D(meETLTrackMatchedTPmtd2CorrectAssocEta, meETLTrackMatchedTPEta2Mtd, meETLTPEtaCorrectMatchEff2_);

// == Track-cluster matching efficiencies based on mc truth
// -- BTL
meBTLTPmtdDirectEtaSelEff_ = ibook.book1D("BTLTPmtdDirectEtaSelEff",
Expand Down
22 changes: 21 additions & 1 deletion Validation/MtdValidation/plugins/MtdTracksValidation.cc
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,8 @@ class MtdTracksValidation : public DQMEDAnalyzer {
MonitorElement* meETLTrackMatchedTPPtMtd_;
MonitorElement* meETLTrackMatchedTPEta2Mtd_;
MonitorElement* meETLTrackMatchedTPPt2Mtd_;
MonitorElement* meETLTrackMatchedTPEtaMtdCorrect_;
MonitorElement* meETLTrackMatchedTPPtMtdCorrect_;

MonitorElement* meTracktmtd_;
MonitorElement* meTrackt0Src_;
Expand Down Expand Up @@ -749,7 +751,8 @@ void MtdTracksValidation::analyze(const edm::Event& iEvent, const edm::EventSetu
});
// Find the first direct hit in time
directSimClusIt = std::find_if(simClustersRefs.begin(), simClustersRefs.end(), [](const auto& simCluster) {
return simCluster->trackIdOffset() == 0;
MTDDetId mtddetid = simCluster->detIds_and_rows().front().first;
return (mtddetid.mtdSubDetector() == 1 && simCluster->trackIdOffset() == 0);
});
// Check if TP has direct or other sim cluster for BTL
for (const auto& simClusterRef : simClustersRefs) {
Expand Down Expand Up @@ -882,6 +885,11 @@ void MtdTracksValidation::analyze(const edm::Event& iEvent, const edm::EventSetu
} // == end BTL
// == ETL
else {
// -- Track matched to TP with reco hits (one or two) correctly matched
if ((ETLdisc1 && isTPmtdCorrectETLD1) || (ETLdisc2 && isTPmtdCorrectETLD2)) {
meETLTrackMatchedTPEtaMtdCorrect_->Fill(std::abs(trackGen.eta()));
meETLTrackMatchedTPPtMtdCorrect_->Fill(trackGen.pt());
}
// -- Track matched to TP with sim hit in one etl layer
if (isTPmtdETLD1 || isTPmtdETLD2) { // at least one hit (D1 or D2 or both)
meETLTrackMatchedTPmtd1Eta_->Fill(std::abs(trackGen.eta()));
Expand Down Expand Up @@ -1436,12 +1444,24 @@ void MtdTracksValidation::bookHistograms(DQMStore::IBooker& ibook, edm::Run cons
ibook.book1D("ETLTrackMatchedTPEtaTot", "Eta of tracks matched to TP; track eta ", 30, 1.5, 3.0);
meETLTrackMatchedTPEtaMtd_ = ibook.book1D(
"ETLTrackMatchedTPEtaMtd", "Eta of tracks matched to TP with time (>=1 ETL hit); track eta ", 30, 1.5, 3.0);
meETLTrackMatchedTPEtaMtdCorrect_ =
ibook.book1D("ETLTrackMatchedTPEtaMtdCorrect",
"Eta of tracks matched to TP with time (>=1 ETL hit), correct reco match; track eta ",
30,
1.5,
3.0);
meETLTrackMatchedTPEta2Mtd_ = ibook.book1D(
"ETLTrackMatchedTPEta2Mtd", "Eta of tracks matched to TP with time (2 ETL hits); track eta ", 30, 1.5, 3.0);
meETLTrackMatchedTPPtTot_ =
ibook.book1D("ETLTrackMatchedTPPtTot", "Pt of tracks matched to TP; track pt [GeV] ", 50, 0., 10.);
meETLTrackMatchedTPPtMtd_ = ibook.book1D(
"ETLTrackMatchedTPPtMtd", "Pt of tracks matched to TP with time (>=1 ETL hit); track pt [GeV] ", 50, 0., 10.);
meETLTrackMatchedTPPtMtdCorrect_ =
ibook.book1D("ETLTrackMatchedTPPtMtdCorrect",
"Pt of tracks matched to TP with time (>=1 ETL hit), correct reco match; track pt [GeV] ",
50,
0.,
10.);
meETLTrackMatchedTPPt2Mtd_ = ibook.book1D(
"ETLTrackMatchedTPPt2Mtd", "Pt of tracks matched to TP with time (2 ETL hits); track pt [GeV] ", 50, 0., 10.);

Expand Down