Skip to content

Commit 090d315

Browse files
authored
Merge pull request #47997 from Tizianop6/VertexValidationPlots_MVASel
Vertex time reconstruction: added a flag whether to use MVA selection. MTD Primary Vertex Validation: added plots to check PID perfomance and track time assingment.
2 parents 22b859d + fbe2054 commit 090d315

File tree

3 files changed

+199
-3
lines changed

3 files changed

+199
-3
lines changed

RecoVertex/PrimaryVertexProducer/interface/VertexTimeAlgorithmFromTracksPID.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class VertexTimeAlgorithmFromTracksPID : public VertexTimeAlgorithmBase {
4242
double const probProton_;
4343
double const Tstart_;
4444
double const coolingFactor_;
45+
bool const useMVAVtxTime_;
4546

4647
edm::ValueMap<float> trackMTDTimes_;
4748
edm::ValueMap<float> trackMTDTimeErrors_;

RecoVertex/PrimaryVertexProducer/src/VertexTimeAlgorithmFromTracksPID.cc

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ VertexTimeAlgorithmFromTracksPID::VertexTimeAlgorithmFromTracksPID(edm::Paramete
3232
probKaon_(iConfig.getParameter<double>("probKaon")),
3333
probProton_(iConfig.getParameter<double>("probProton")),
3434
Tstart_(iConfig.getParameter<double>("Tstart")),
35-
coolingFactor_(iConfig.getParameter<double>("coolingFactor")) {}
35+
coolingFactor_(iConfig.getParameter<double>("coolingFactor")),
36+
useMVAVtxTime_(iConfig.getParameter<bool>("useMVAVtxTime")) {}
3637

3738
void VertexTimeAlgorithmFromTracksPID::fillPSetDescription(edm::ParameterSetDescription& iDesc) {
3839
VertexTimeAlgorithmBase::fillPSetDescription(iDesc);
@@ -65,6 +66,7 @@ void VertexTimeAlgorithmFromTracksPID::fillPSetDescription(edm::ParameterSetDesc
6566

6667
iDesc.add<double>("Tstart", 256.)->setComment("DA initial temperature T");
6768
iDesc.add<double>("coolingFactor", 0.5)->setComment("DA cooling factor");
69+
iDesc.add<bool>("useMVAVtxTime", true)->setComment("Use MVA quality selection for vertex time calculation");
6870
}
6971

7072
void VertexTimeAlgorithmFromTracksPID::setEvent(edm::Event& iEvent, edm::EventSetup const&) {
@@ -105,8 +107,7 @@ bool VertexTimeAlgorithmFromTracksPID::vertexTime(float& vtxTime,
105107
auto const trkWeight = vtx.trackWeight(trk);
106108
if (trkWeight > minTrackVtxWeight_) {
107109
auto const trkTimeQuality = trackMTDTimeQualities_[trk.trackBaseRef()];
108-
109-
if (trkTimeQuality >= minTrackTimeQuality_) {
110+
if (!useMVAVtxTime_ || (useMVAVtxTime_ && trkTimeQuality >= minTrackTimeQuality_)) {
110111
auto const trkTime = trackMTDTimes_[trk.trackBaseRef()];
111112
auto const trkTimeError = trackMTDTimeErrors_[trk.trackBaseRef()];
112113

Validation/MtdValidation/plugins/Primary4DVertexValidation.cc

Lines changed: 194 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -530,6 +530,38 @@ class Primary4DVertexValidation : public DQMEDAnalyzer {
530530
MonitorElement* meEndcapTruePAsPi_;
531531
MonitorElement* meEndcapTruePAsK_;
532532
MonitorElement* meEndcapTruePAsP_;
533+
534+
// Histograms for study of no PID tracks
535+
536+
//Time residual
537+
MonitorElement* meTrackTimeResCorrectPID_;
538+
MonitorElement* meTrackTimeResWrongPID_;
539+
MonitorElement* meTrackTimeResNoPID_;
540+
MonitorElement* meNoPIDTrackTimeResNoPIDType_[3];
541+
MonitorElement* meTrackTimeResNoPIDtruePi_;
542+
MonitorElement* meTrackTimeResNoPIDtrueK_;
543+
MonitorElement* meTrackTimeResNoPIDtrueP_;
544+
545+
//Time pull
546+
MonitorElement* meTrackTimePullCorrectPID_;
547+
MonitorElement* meTrackTimePullWrongPID_;
548+
MonitorElement* meTrackTimePullNoPID_;
549+
MonitorElement* meNoPIDTrackTimePullNoPIDType_[3];
550+
MonitorElement* meTrackTimePullNoPIDtruePi_;
551+
MonitorElement* meTrackTimePullNoPIDtrueK_;
552+
MonitorElement* meTrackTimePullNoPIDtrueP_;
553+
554+
//Sigma
555+
MonitorElement* meTrackTimeSigmaCorrectPID_;
556+
MonitorElement* meTrackTimeSigmaWrongPID_;
557+
MonitorElement* meTrackTimeSigmaNoPID_;
558+
MonitorElement* meNoPIDTrackSigmaNoPIDType_[3];
559+
560+
//MVA
561+
MonitorElement* meTrackMVACorrectPID_;
562+
MonitorElement* meTrackMVAWrongPID_;
563+
MonitorElement* meTrackMVANoPID_;
564+
MonitorElement* meNoPIDTrackMVANoPIDType_[3];
533565
};
534566

535567
// constructors and destructor
@@ -1207,6 +1239,118 @@ void Primary4DVertexValidation::bookHistograms(DQMStore::IBooker& ibook,
12071239
-1.,
12081240
1.,
12091241
"s");
1242+
1243+
meTrackTimeResCorrectPID_ = ibook.book1D(
1244+
"TrackTimeResCorrectPID", "Time residual of tracks with correct PID; t_{rec} - t_{sim} [ns]; ", 100, -5., 5.);
1245+
1246+
meTrackTimeResWrongPID_ = ibook.book1D(
1247+
"TrackTimeResWrongPID", "Time residual of tracks with wrong PID; t_{rec} - t_{sim} [ns]; ", 100, -5., 5.);
1248+
meTrackTimeResNoPID_ = ibook.book1D(
1249+
"TrackTimeResNoPID", "Time residual of tracks with no PID; t_{rec} - t_{sim} [ns]; ", 100, -5., 5.);
1250+
meTrackTimeResNoPIDtruePi_ = ibook.book1D(
1251+
"TrackTimeResNoPIDtruePi", "Time residual of no PID tracks, true Pi; t_{rec} - t_{sim} [ns]; ", 100, -5., 5.);
1252+
1253+
meTrackTimeResNoPIDtrueK_ = ibook.book1D(
1254+
"TrackTimeResNoPIDtrueK", "Time residual of no PID tracks, true K; t_{rec} - t_{sim} [ns]; ", 100, -5., 5.);
1255+
meTrackTimeResNoPIDtrueP_ = ibook.book1D(
1256+
"TrackTimeResNoPIDtrueP", "Time residual of no PID tracks, true P; t_{rec} - t_{sim} [ns]; ", 100, -5., 5.);
1257+
1258+
meNoPIDTrackTimeResNoPIDType_[0] =
1259+
ibook.book1D("NoPIDTrackTimeResNoPIDType1",
1260+
"Time residual of no PID tracks, no PID type 1; t_{rec} - t_{sim} [ns];",
1261+
100,
1262+
-5.,
1263+
5.);
1264+
1265+
meNoPIDTrackTimeResNoPIDType_[1] =
1266+
ibook.book1D("NoPIDTrackTimeResNoPIDType2",
1267+
"Time residual of no PID tracks, no PID type 2; t_{rec} - t_{sim} [ns];",
1268+
100,
1269+
-5.,
1270+
5.);
1271+
meNoPIDTrackTimeResNoPIDType_[2] =
1272+
ibook.book1D("NoPIDTrackTimeResNoPIDType3",
1273+
"Time residual of no PID tracks, no PID type 3; t_{rec} - t_{sim} [ns];",
1274+
100,
1275+
-5.,
1276+
5.);
1277+
1278+
meTrackTimePullCorrectPID_ =
1279+
ibook.book1D("TrackTimePullCorrectPID",
1280+
"Time pull of tracks with correct PID; (t_{rec} - t_{sim})/#sigma_{t rec}; ",
1281+
100,
1282+
-10.,
1283+
10.);
1284+
1285+
meTrackTimePullWrongPID_ = ibook.book1D("TrackTimePullWrongPID",
1286+
"Time pull of tracks with wrong PID; (t_{rec} - t_{sim})/#sigma_{t rec}; ",
1287+
100,
1288+
-10.,
1289+
10.);
1290+
meTrackTimePullNoPID_ = ibook.book1D(
1291+
"TrackTimePullNoPID", "Time pull of tracks with no PID; (t_{rec} - t_{sim})/#sigma_{t rec}; ", 100, -10., 10.);
1292+
1293+
meTrackTimePullNoPIDtruePi_ =
1294+
ibook.book1D("TrackTimePullNoPIDtruePi",
1295+
"Time pull of no PID tracks, true Pi; (t_{rec} - t_{sim})/#sigma_{t rec}; ",
1296+
100,
1297+
-10.,
1298+
10.);
1299+
meTrackTimePullNoPIDtrueK_ =
1300+
ibook.book1D("TrackTimePullNoPIDtrueK",
1301+
"Time pull of no PID tracks, true K; (t_{rec} - t_{sim})/#sigma_{t rec}; ",
1302+
100,
1303+
-10.,
1304+
10.);
1305+
meTrackTimePullNoPIDtrueP_ =
1306+
ibook.book1D("TrackTimePullNoPIDtrueP",
1307+
"Time pull of no PID tracks, true P; (t_{rec} - t_{sim})/#sigma_{t rec}; ",
1308+
100,
1309+
-10.,
1310+
10.);
1311+
1312+
meNoPIDTrackTimePullNoPIDType_[0] =
1313+
ibook.book1D("NoPIDTrackTimePullNoPIDType1",
1314+
"Time pull of no PID tracks, no PID type 1; (t_{rec} - t_{sim})/#sigma_{t rec}; ",
1315+
100,
1316+
-10.,
1317+
10.);
1318+
meNoPIDTrackTimePullNoPIDType_[1] =
1319+
ibook.book1D("NoPIDTrackTimePullNoPIDType2",
1320+
"Time pull of no PID tracks, no PID type 2; (t_{rec} - t_{sim})/#sigma_{t rec}; ",
1321+
100,
1322+
-10.,
1323+
10.);
1324+
meNoPIDTrackTimePullNoPIDType_[2] =
1325+
ibook.book1D("NoPIDTrackTimePullNoPIDType3",
1326+
"Time pull of no PID tracks, no PID type 3; (t_{rec} - t_{sim})/#sigma_{t rec}; ",
1327+
100,
1328+
-10.,
1329+
10.);
1330+
1331+
meTrackTimeSigmaCorrectPID_ = ibook.book1D(
1332+
"TrackTimeSigmaCorrectPID", "Time sigma of tracks with correct PID; #sigma_{t0Safe} [ns]; ", 100, 0., 4.);
1333+
meTrackTimeSigmaWrongPID_ = ibook.book1D(
1334+
"TrackTimeSigmaWrongPID", "Time sigma of tracks with wrong PID; #sigma_{t0Safe} [ns]; ", 100, 0., 4.);
1335+
meTrackTimeSigmaNoPID_ =
1336+
ibook.book1D("TrackTimeSigmaNoPID", "Time sigma of tracks with no PID; #sigma_{t0Safe} [ns]; ", 100, 0., 4.);
1337+
meNoPIDTrackSigmaNoPIDType_[0] = ibook.book1D(
1338+
"NoPIDTrackSigmaNoPIDType1", "Time sigma of no PID tracks, no PID type 1; #sigma_{t0Safe} [ns]; ", 100, 0., 4.);
1339+
meNoPIDTrackSigmaNoPIDType_[1] = ibook.book1D(
1340+
"NoPIDTrackSigmaNoPIDType2", "Time sigma of no PID tracks, no PID type 2; #sigma_{t0Safe} [ns]; ", 100, 0., 4.);
1341+
meNoPIDTrackSigmaNoPIDType_[2] = ibook.book1D(
1342+
"NoPIDTrackSigmaNoPIDType3", "Time sigma of no PID tracks, no PID type 3; #sigma_{t0Safe} [ns]; ", 100, 0., 4.);
1343+
meTrackMVACorrectPID_ =
1344+
ibook.book1D("TrackMVACorrectPID", "MVA of tracks with correct PID; MVA score; ", 100, 0., 1.);
1345+
1346+
meTrackMVAWrongPID_ = ibook.book1D("TrackMVAWrongPID", "MVA of tracks with wrong PID; MVA score; ", 100, 0., 1.);
1347+
meTrackMVANoPID_ = ibook.book1D("TrackMVANoPID", "MVA of tracks with no PID; MVA score; ", 100, 0., 1.);
1348+
meNoPIDTrackMVANoPIDType_[0] =
1349+
ibook.book1D("NoPIDTrackMVANoPIDType1", "MVA of no PID tracks, no PID type 1; MVA score; ", 100, 0., 1.);
1350+
meNoPIDTrackMVANoPIDType_[1] =
1351+
ibook.book1D("NoPIDTrackMVANoPIDType2", "MVA of no PID tracks, no PID type 2; MVA score; ", 100, 0., 1.);
1352+
meNoPIDTrackMVANoPIDType_[2] =
1353+
ibook.book1D("NoPIDTrackMVANoPIDType3", "MVA of no PID tracks, no PID type 3; MVA score; ", 100, 0., 1.);
12101354
}
12111355

12121356
// some tests
@@ -2429,6 +2573,56 @@ void Primary4DVertexValidation::analyze(const edm::Event& iEvent, const edm::Eve
24292573
meTrackResTot_->Fill(t0Safe[*iTrack] - tsim);
24302574
meTrackPullTot_->Fill((t0Safe[*iTrack] - tsim) / sigmat0Safe[*iTrack]);
24312575
meTrackZposResTot_->Fill(dZ);
2576+
if (selectRecoTrk && optionalPlots_) {
2577+
unsigned int no_PIDtype = 0;
2578+
bool no_PID, is_Pi, is_K, is_P;
2579+
isParticle(*iTrack, sigmat0, sigmat0Safe, probPi, probK, probP, no_PIDtype, no_PID, is_Pi, is_K, is_P);
2580+
if (no_PID) {
2581+
meTrackTimeResNoPID_->Fill(t0Safe[*iTrack] - tsim);
2582+
meTrackTimePullNoPID_->Fill((t0Safe[*iTrack] - tsim) / sigmat0Safe[*iTrack]);
2583+
meTrackTimeSigmaNoPID_->Fill(sigmat0Safe[*iTrack]);
2584+
meTrackMVANoPID_->Fill(mtdQualMVA[(*iTrack)]);
2585+
if (no_PIDtype == 1) {
2586+
meNoPIDTrackTimeResNoPIDType_[0]->Fill(t0Safe[*iTrack] - tsim);
2587+
meNoPIDTrackTimePullNoPIDType_[0]->Fill((t0Safe[*iTrack] - tsim) / sigmat0Safe[*iTrack]);
2588+
meNoPIDTrackSigmaNoPIDType_[0]->Fill(sigmat0Safe[*iTrack]);
2589+
meNoPIDTrackMVANoPIDType_[0]->Fill(mtdQualMVA[(*iTrack)]);
2590+
} else if (no_PIDtype == 2) {
2591+
meNoPIDTrackTimeResNoPIDType_[1]->Fill(t0Safe[*iTrack] - tsim);
2592+
meNoPIDTrackTimePullNoPIDType_[1]->Fill((t0Safe[*iTrack] - tsim) / sigmat0Safe[*iTrack]);
2593+
meNoPIDTrackSigmaNoPIDType_[1]->Fill(sigmat0Safe[*iTrack]);
2594+
meNoPIDTrackMVANoPIDType_[1]->Fill(mtdQualMVA[(*iTrack)]);
2595+
} else if (no_PIDtype == 3) {
2596+
meNoPIDTrackTimeResNoPIDType_[2]->Fill(t0Safe[*iTrack] - tsim);
2597+
meNoPIDTrackTimePullNoPIDType_[2]->Fill((t0Safe[*iTrack] - tsim) / sigmat0Safe[*iTrack]);
2598+
meNoPIDTrackSigmaNoPIDType_[2]->Fill(sigmat0Safe[*iTrack]);
2599+
meNoPIDTrackMVANoPIDType_[2]->Fill(mtdQualMVA[(*iTrack)]);
2600+
}
2601+
if (std::abs((*tp_info)->pdgId()) == 211) {
2602+
meTrackTimeResNoPIDtruePi_->Fill(t0Safe[*iTrack] - tsim);
2603+
meTrackTimePullNoPIDtruePi_->Fill((t0Safe[*iTrack] - tsim) / sigmat0Safe[*iTrack]);
2604+
} else if (std::abs((*tp_info)->pdgId()) == 321) {
2605+
meTrackTimeResNoPIDtrueK_->Fill(t0Safe[*iTrack] - tsim);
2606+
meTrackTimePullNoPIDtrueK_->Fill((t0Safe[*iTrack] - tsim) / sigmat0Safe[*iTrack]);
2607+
} else if (std::abs((*tp_info)->pdgId()) == 2212) {
2608+
meTrackTimeResNoPIDtrueP_->Fill(t0Safe[*iTrack] - tsim);
2609+
meTrackTimePullNoPIDtrueP_->Fill((t0Safe[*iTrack] - tsim) / sigmat0Safe[*iTrack]);
2610+
}
2611+
} else if ((is_Pi && std::abs((*tp_info)->pdgId()) == 211) ||
2612+
(is_K && std::abs((*tp_info)->pdgId()) == 321) ||
2613+
(is_P && std::abs((*tp_info)->pdgId()) == 2212)) {
2614+
meTrackTimeResCorrectPID_->Fill(t0Safe[*iTrack] - tsim);
2615+
meTrackTimePullCorrectPID_->Fill((t0Safe[*iTrack] - tsim) / sigmat0Safe[*iTrack]);
2616+
meTrackTimeSigmaCorrectPID_->Fill(sigmat0Safe[*iTrack]);
2617+
meTrackMVACorrectPID_->Fill(mtdQualMVA[(*iTrack)]);
2618+
} else {
2619+
meTrackTimeResWrongPID_->Fill(t0Safe[*iTrack] - tsim);
2620+
meTrackTimePullWrongPID_->Fill((t0Safe[*iTrack] - tsim) / sigmat0Safe[*iTrack]);
2621+
meTrackTimeSigmaWrongPID_->Fill(sigmat0Safe[*iTrack]);
2622+
meTrackMVAWrongPID_->Fill(mtdQualMVA[(*iTrack)]);
2623+
}
2624+
}
2625+
24322626
if ((*iTrack)->p() <= 2) {
24332627
meTrackResLowPTot_->Fill(t0Safe[*iTrack] - tsim);
24342628
meTrackPullLowPTot_->Fill((t0Safe[*iTrack] - tsim) / sigmat0Safe[*iTrack]);

0 commit comments

Comments
 (0)