Skip to content

Commit c9fcfd7

Browse files
committed
Validation unassociated tracks
1 parent 24690bd commit c9fcfd7

File tree

1 file changed

+71
-11
lines changed

1 file changed

+71
-11
lines changed

Validation/MtdValidation/plugins/Primary4DVertexValidation.cc

Lines changed: 71 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@
3131
#include "SimDataFormats/Associations/interface/TrackToTrackingParticleAssociator.h"
3232
#include "SimDataFormats/TrackingAnalysis/interface/TrackingParticleFwd.h"
3333
#include "SimDataFormats/TrackingAnalysis/interface/TrackingVertexContainer.h"
34-
34+
#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h"
35+
#include "TrackingTools/Records/interface/TransientTrackRecord.h"
36+
#include "RecoVertex/PrimaryVertexProducer/interface/HITrackFilterForPVFinding.h"
3537
// Fastjet
3638
#include <fastjet/internal/base.hh>
3739
#include "fastjet/PseudoJet.hh"
@@ -256,7 +258,8 @@ class Primary4DVertexValidation : public DQMEDAnalyzer {
256258
const bool trkRecSel(const reco::TrackBase&);
257259

258260
// ----------member data ---------------------------
259-
261+
const edm::ESGetToken<TransientTrackBuilder, TransientTrackRecord> theTTBToken;
262+
TrackFilterForPVFindingBase* theTrackFilter;
260263
const std::string folder_;
261264
static constexpr unsigned int NOT_MATCHED = 66666;
262265
static constexpr double simUnit_ = 1e9; // sim time in s while reco time in ns
@@ -289,7 +292,7 @@ class Primary4DVertexValidation : public DQMEDAnalyzer {
289292
bool use_only_charged_tracks_;
290293
bool optionalPlots_;
291294
bool use3dNoTime_;
292-
295+
293296
const double minProbHeavy_;
294297
const double trackweightTh_;
295298
const double mvaTh_;
@@ -299,7 +302,7 @@ class Primary4DVertexValidation : public DQMEDAnalyzer {
299302
edm::EDGetTokenT<reco::TrackCollection> RecTrackToken_;
300303

301304
edm::EDGetTokenT<std::vector<PileupSummaryInfo>> vecPileupSummaryInfoToken_;
302-
305+
edm::EDGetTokenT<reco::TrackCollection> trkToken;
303306
edm::EDGetTokenT<TrackingParticleCollection> trackingParticleCollectionToken_;
304307
edm::EDGetTokenT<TrackingVertexCollection> trackingVertexCollectionToken_;
305308
edm::EDGetTokenT<reco::SimToRecoCollection> simToRecoAssociationToken_;
@@ -328,6 +331,8 @@ class Primary4DVertexValidation : public DQMEDAnalyzer {
328331
edm::ESGetToken<HepPDT::ParticleDataTable, edm::DefaultRecord> pdtToken_;
329332

330333
// histogram declaration
334+
MonitorElement* meUnAssocTracks_;
335+
MonitorElement* meFractionUnAssocTracks_;
331336
MonitorElement* meTrackEffPtTot_;
332337
MonitorElement* meTrackMatchedTPEffPtTot_;
333338
MonitorElement* meTrackMatchedTPEffPtMtd_;
@@ -523,7 +528,8 @@ class Primary4DVertexValidation : public DQMEDAnalyzer {
523528

524529
// constructors and destructor
525530
Primary4DVertexValidation::Primary4DVertexValidation(const edm::ParameterSet& iConfig)
526-
: folder_(iConfig.getParameter<std::string>("folder")),
531+
: theTTBToken(esConsumes(edm::ESInputTag("", "TransientTrackBuilder"))),
532+
folder_(iConfig.getParameter<std::string>("folder")),
527533
use_only_charged_tracks_(iConfig.getParameter<bool>("useOnlyChargedTracks")),
528534
optionalPlots_(iConfig.getUntrackedParameter<bool>("optionalPlots")),
529535
use3dNoTime_(iConfig.getParameter<bool>("use3dNoTime")),
@@ -532,6 +538,7 @@ Primary4DVertexValidation::Primary4DVertexValidation(const edm::ParameterSet& iC
532538
mvaTh_(iConfig.getParameter<double>("mvaTh")),
533539
pdtToken_(esConsumes<HepPDT::ParticleDataTable, edm::DefaultRecord>()) {
534540
vecPileupSummaryInfoToken_ = consumes<std::vector<PileupSummaryInfo>>(edm::InputTag(std::string("addPileupInfo")));
541+
trkToken = consumes<reco::TrackCollection>(iConfig.getParameter<edm::InputTag>("TrackLabel"));
535542
trackingParticleCollectionToken_ =
536543
consumes<TrackingParticleCollection>(iConfig.getParameter<edm::InputTag>("SimTag"));
537544
trackingVertexCollectionToken_ = consumes<TrackingVertexCollection>(iConfig.getParameter<edm::InputTag>("SimTag"));
@@ -558,6 +565,15 @@ Primary4DVertexValidation::Primary4DVertexValidation(const edm::ParameterSet& iC
558565
probPiToken_ = consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("probPi"));
559566
probKToken_ = consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("probK"));
560567
probPToken_ = consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("probP"));
568+
std::string trackSelectionAlgorithm =
569+
iConfig.getParameter<edm::ParameterSet>("TkFilterParameters").getParameter<std::string>("algorithm");
570+
if (trackSelectionAlgorithm == "filter") {
571+
theTrackFilter = new TrackFilterForPVFinding(iConfig.getParameter<edm::ParameterSet>("TkFilterParameters"));
572+
} else if (trackSelectionAlgorithm == "filterWithThreshold") {
573+
theTrackFilter = new HITrackFilterForPVFinding(iConfig.getParameter<edm::ParameterSet>("TkFilterParameters"));
574+
} else {
575+
edm::LogWarning("MVATrainingNtuple: unknown track selection algorithm: " + trackSelectionAlgorithm);
576+
}
561577
}
562578

563579
Primary4DVertexValidation::~Primary4DVertexValidation() {}
@@ -570,6 +586,8 @@ void Primary4DVertexValidation::bookHistograms(DQMStore::IBooker& ibook,
570586
edm::EventSetup const& iSetup) {
571587
ibook.setCurrentFolder(folder_);
572588
// --- histograms booking
589+
meUnAssocTracks_ = ibook.book1D("UnAssocTracks", "Unassociated tracks", 160, 0.5, 4.5);
590+
meFractionUnAssocTracks_ = ibook.book1D("FractionUnAssocTracks", "Fraction Unassociated tracks", 160, 0.0, 1.);
573591
meTrackEffPtTot_ = ibook.book1D("EffPtTot", "Pt of tracks associated to LV; track pt [GeV] ", 110, 0., 11.);
574592
meTrackEffEtaTot_ = ibook.book1D("EffEtaTot", "Eta of tracks associated to LV; track eta ", 66, 0., 3.3);
575593
meTrackMatchedTPEffPtTot_ =
@@ -669,11 +687,11 @@ void Primary4DVertexValidation::bookHistograms(DQMStore::IBooker& ibook,
669687
mePUvsRealV_ =
670688
ibook.bookProfile("PUvsReal", "#PU vertices vs #real matched vertices;#PU;#real ", 100, 0, 300, 100, 0, 200);
671689
mePUvsFakeV_ =
672-
ibook.bookProfile("PUvsFake", "#PU vertices vs #fake matched vertices;#PU;#fake ", 100, 0, 300, 100, 0, 20);
690+
ibook.bookProfile("PUvsFake", "#PU vertices vs #fake matched vertices;#PU;#fake ", 100, 0, 300, 300, 0, 300);
673691
mePUvsOtherFakeV_ = ibook.bookProfile(
674-
"PUvsOtherFake", "#PU vertices vs #other fake matched vertices;#PU;#other fake ", 100, 0, 300, 100, 0, 20);
692+
"PUvsOtherFake", "#PU vertices vs #other fake matched vertices;#PU;#other fake ", 100, 0, 300, 300, 0, 300);
675693
mePUvsSplitV_ =
676-
ibook.bookProfile("PUvsSplit", "#PU vertices vs #split matched vertices;#PU;#split ", 100, 0, 300, 100, 0, 20);
694+
ibook.bookProfile("PUvsSplit", "#PU vertices vs #split matched vertices;#PU;#split ", 100, 0, 300, 300, 0, 300);
677695
meMatchQual_ = ibook.book1D("MatchQuality", "RECO-SIM vertex match quality; ", 8, 0, 8.);
678696
meDeltaZrealreal_ = ibook.book1D("DeltaZrealreal", "#Delta Z real-real; |#Delta Z (r-r)| [cm]", 100, 0, 0.5);
679697
meDeltaZfakefake_ = ibook.book1D("DeltaZfakefake", "#Delta Z fake-fake; |#Delta Z (f-f)| [cm]", 100, 0, 0.5);
@@ -704,7 +722,7 @@ void Primary4DVertexValidation::bookHistograms(DQMStore::IBooker& ibook,
704722
meSimPVZ_ = ibook.book1D("simPVZ", "#Sim vertices/10 mm", 30, -15., 15.);
705723
meSimPVT_ = ibook.book1D("simPVT", "#Sim vertices/50 ps", 30, -0.75, 0.75);
706724
meSimPVTvsZ_ = ibook.bookProfile("simPVTvsZ", "PV Time vs Z", 30, -15., 15., 30, -0.75, 0.75);
707-
725+
708726
meVtxTrackMult_ = ibook.book1D("VtxTrackMult", "Log10(Vertex track multiplicity)", 80, 0.5, 2.5);
709727
meVtxTrackW_ = ibook.book1D("VtxTrackW", "Vertex track weight (all)", 50, 0., 1.);
710728
meVtxTrackWnt_ = ibook.book1D("VtxTrackWnt", "Vertex track Wnt", 50, 0., 1.);
@@ -1476,7 +1494,7 @@ void Primary4DVertexValidation::observablesFromJets(const std::vector<reco::Trac
14761494
fjInputs_.clear();
14771495
size_t countScale0 = 0;
14781496
for (size_t i = 0; i < reco_Tracks.size(); i++) {
1479-
const auto& recotr = reco_Tracks[i];
1497+
const auto recotr = reco_Tracks[i];
14801498
const auto mass = mass_Tracks[i];
14811499
float scale = 1.;
14821500
if (recotr.charge() == 0) {
@@ -2019,11 +2037,17 @@ void Primary4DVertexValidation::analyze(const edm::Event& iEvent, const edm::Eve
20192037
r2s_ = recoToSimH.product();
20202038
else
20212039
edm::LogWarning("Primary4DVertexValidation") << "recoToSimH is not valid";
2022-
2040+
reco::BeamSpot beamSpot;
20232041
edm::Handle<reco::BeamSpot> BeamSpotH;
20242042
iEvent.getByToken(RecBeamSpotToken_, BeamSpotH);
20252043
if (!BeamSpotH.isValid())
20262044
edm::LogWarning("Primary4DVertexValidation") << "BeamSpotH is not valid";
2045+
beamSpot = *BeamSpotH;
2046+
2047+
edm::Handle<reco::TrackCollection> tks;
2048+
iEvent.getByToken(trkToken, tks);
2049+
const auto& theB = &iSetup.getData(theTTBToken);
2050+
std::vector<reco::TransientTrack> t_tks;
20272051

20282052
std::vector<simPrimaryVertex> simpv; // a list of simulated primary MC vertices
20292053
simpv = getSimPVs(TVCollectionH);
@@ -2061,6 +2085,34 @@ void Primary4DVertexValidation::analyze(const edm::Event& iEvent, const edm::Eve
20612085
// I have simPV and recoPV collections
20622086
matchReco2Sim(recopv, simpv, sigmat0Safe, mtdQualMVA, BeamSpotH);
20632087

2088+
t_tks = (*theB).build(tks, beamSpot, t0Safe, sigmat0Safe);
2089+
2090+
// track filter
2091+
std::vector<reco::TransientTrack>&& seltks = theTrackFilter->select(t_tks);
2092+
2093+
int unassociatedCount = 0;
2094+
for (std::vector<reco::TransientTrack>::const_iterator itk = seltks.begin(); itk != seltks.end(); itk++) {
2095+
reco::TrackBaseRef trackref = (*itk).trackBaseRef();
2096+
bool isAssociated = false;
2097+
for (unsigned int iv = 0; iv < recopv.size(); iv++) {
2098+
const reco::Vertex* vertex = recopv.at(iv).recVtx;
2099+
for (auto iTrack = vertex->tracks_begin(); iTrack != vertex->tracks_end(); ++iTrack) {
2100+
if (*iTrack == trackref) {
2101+
isAssociated = true;
2102+
break;
2103+
}
2104+
}
2105+
if (isAssociated) break;
2106+
}
2107+
2108+
if (!isAssociated) {
2109+
unassociatedCount++;
2110+
}
2111+
}
2112+
double fraction = double(unassociatedCount)/(seltks.size());
2113+
meUnAssocTracks_->Fill(log10(unassociatedCount));
2114+
meFractionUnAssocTracks_->Fill(fraction);
2115+
20642116
// Loop on tracks
20652117
for (unsigned int iv = 0; iv < recopv.size(); iv++) {
20662118
if (recopv.at(iv).ndof > selNdof_) {
@@ -2633,6 +2685,7 @@ void Primary4DVertexValidation::analyze(const edm::Event& iEvent, const edm::Eve
26332685
LogTrace("Primary4DVertexValidation") << "is_fake: " << fake;
26342686
LogTrace("Primary4DVertexValidation") << "split_from: " << split;
26352687
LogTrace("Primary4DVertexValidation") << "other fake: " << other_fake;
2688+
std::cout<<" Fake: "<<fake<<" Real: "<<real <<" other fake: "<<other_fake<<" split: "<<split<<std::endl;
26362689
mePUvsRealV_->Fill(simpv.size(), real);
26372690
mePUvsFakeV_->Fill(simpv.size(), fake);
26382691
mePUvsOtherFakeV_->Fill(simpv.size(), other_fake);
@@ -2752,6 +2805,7 @@ void Primary4DVertexValidation::fillDescriptions(edm::ConfigurationDescriptions&
27522805

27532806
desc.add<std::string>("folder", "MTD/Vertices");
27542807
desc.add<edm::InputTag>("TPtoRecoTrackAssoc", edm::InputTag("trackingParticleRecoTrackAsssociation"));
2808+
desc.add<edm::InputTag>("TrackLabel", edm::InputTag("generalTracks"));
27552809
desc.add<edm::InputTag>("mtdTracks", edm::InputTag("trackExtenderWithMTD"));
27562810
desc.add<edm::InputTag>("SimTag", edm::InputTag("mix", "MergedTrackTruth"));
27572811
desc.add<edm::InputTag>("offlineBS", edm::InputTag("offlineBeamSpot"));
@@ -2780,6 +2834,12 @@ void Primary4DVertexValidation::fillDescriptions(edm::ConfigurationDescriptions&
27802834
desc.add<double>("trackweightTh", 0.5);
27812835
desc.add<double>("mvaTh", 0.8);
27822836
desc.add<double>("minProbHeavy", 0.75);
2837+
{
2838+
edm::ParameterSetDescription psd0;
2839+
HITrackFilterForPVFinding::fillPSetDescription(psd0); // extension of TrackFilterForPVFinding
2840+
desc.add<edm::ParameterSetDescription>("TkFilterParameters", psd0);
2841+
}
2842+
27832843
descriptions.add("vertices4DValid", desc);
27842844
}
27852845

0 commit comments

Comments
 (0)