Skip to content

Commit b055a3b

Browse files
authored
Merge pull request #47340 from jyoti299/UnassociatedTracks
MtdValidation : Add monitoring of unassociated tracks
2 parents 5f9f4ab + a9594f9 commit b055a3b

File tree

1 file changed

+66
-2
lines changed

1 file changed

+66
-2
lines changed

Validation/MtdValidation/plugins/Primary4DVertexValidation.cc

Lines changed: 66 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@
3232
#include "SimDataFormats/TrackingAnalysis/interface/TrackingParticleFwd.h"
3333
#include "SimDataFormats/TrackingAnalysis/interface/TrackingVertexContainer.h"
3434

35+
#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h"
36+
#include "TrackingTools/Records/interface/TransientTrackRecord.h"
37+
#include "RecoVertex/PrimaryVertexProducer/interface/HITrackFilterForPVFinding.h"
3538
// Fastjet
3639
#include <fastjet/internal/base.hh>
3740
#include "fastjet/PseudoJet.hh"
@@ -257,6 +260,8 @@ class Primary4DVertexValidation : public DQMEDAnalyzer {
257260

258261
// ----------member data ---------------------------
259262

263+
const edm::ESGetToken<TransientTrackBuilder, TransientTrackRecord> theTTBToken;
264+
TrackFilterForPVFindingBase* theTrackFilter;
260265
const std::string folder_;
261266
static constexpr unsigned int NOT_MATCHED = 66666;
262267
static constexpr double simUnit_ = 1e9; // sim time in s while reco time in ns
@@ -289,7 +294,6 @@ class Primary4DVertexValidation : public DQMEDAnalyzer {
289294
bool use_only_charged_tracks_;
290295
bool optionalPlots_;
291296
bool use3dNoTime_;
292-
293297
const double minProbHeavy_;
294298
const double trackweightTh_;
295299
const double mvaTh_;
@@ -300,6 +304,7 @@ class Primary4DVertexValidation : public DQMEDAnalyzer {
300304

301305
edm::EDGetTokenT<std::vector<PileupSummaryInfo>> vecPileupSummaryInfoToken_;
302306

307+
edm::EDGetTokenT<reco::TrackCollection> trkToken;
303308
edm::EDGetTokenT<TrackingParticleCollection> trackingParticleCollectionToken_;
304309
edm::EDGetTokenT<TrackingVertexCollection> trackingVertexCollectionToken_;
305310
edm::EDGetTokenT<reco::SimToRecoCollection> simToRecoAssociationToken_;
@@ -328,6 +333,8 @@ class Primary4DVertexValidation : public DQMEDAnalyzer {
328333
edm::ESGetToken<HepPDT::ParticleDataTable, edm::DefaultRecord> pdtToken_;
329334

330335
// histogram declaration
336+
MonitorElement* meUnAssocTracks_;
337+
MonitorElement* meFractionUnAssocTracks_;
331338
MonitorElement* meTrackEffPtTot_;
332339
MonitorElement* meTrackMatchedTPEffPtTot_;
333340
MonitorElement* meTrackMatchedTPEffPtMtd_;
@@ -523,7 +530,8 @@ class Primary4DVertexValidation : public DQMEDAnalyzer {
523530

524531
// constructors and destructor
525532
Primary4DVertexValidation::Primary4DVertexValidation(const edm::ParameterSet& iConfig)
526-
: folder_(iConfig.getParameter<std::string>("folder")),
533+
: theTTBToken(esConsumes(edm::ESInputTag("", "TransientTrackBuilder"))),
534+
folder_(iConfig.getParameter<std::string>("folder")),
527535
use_only_charged_tracks_(iConfig.getParameter<bool>("useOnlyChargedTracks")),
528536
optionalPlots_(iConfig.getUntrackedParameter<bool>("optionalPlots")),
529537
use3dNoTime_(iConfig.getParameter<bool>("use3dNoTime")),
@@ -532,6 +540,7 @@ Primary4DVertexValidation::Primary4DVertexValidation(const edm::ParameterSet& iC
532540
mvaTh_(iConfig.getParameter<double>("mvaTh")),
533541
pdtToken_(esConsumes<HepPDT::ParticleDataTable, edm::DefaultRecord>()) {
534542
vecPileupSummaryInfoToken_ = consumes<std::vector<PileupSummaryInfo>>(edm::InputTag(std::string("addPileupInfo")));
543+
trkToken = consumes<reco::TrackCollection>(iConfig.getParameter<edm::InputTag>("TrackLabel"));
535544
trackingParticleCollectionToken_ =
536545
consumes<TrackingParticleCollection>(iConfig.getParameter<edm::InputTag>("SimTag"));
537546
trackingVertexCollectionToken_ = consumes<TrackingVertexCollection>(iConfig.getParameter<edm::InputTag>("SimTag"));
@@ -558,6 +567,16 @@ Primary4DVertexValidation::Primary4DVertexValidation(const edm::ParameterSet& iC
558567
probPiToken_ = consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("probPi"));
559568
probKToken_ = consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("probK"));
560569
probPToken_ = consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("probP"));
570+
std::string trackSelectionAlgorithm =
571+
iConfig.getParameter<edm::ParameterSet>("TkFilterParameters").getParameter<std::string>("algorithm");
572+
if (trackSelectionAlgorithm == "filter") {
573+
theTrackFilter = new TrackFilterForPVFinding(iConfig.getParameter<edm::ParameterSet>("TkFilterParameters"));
574+
} else if (trackSelectionAlgorithm == "filterWithThreshold") {
575+
theTrackFilter = new HITrackFilterForPVFinding(iConfig.getParameter<edm::ParameterSet>("TkFilterParameters"));
576+
} else {
577+
edm::LogWarning("Primary4DVertexValidation")
578+
<< "unknown track selection algorithm: " + trackSelectionAlgorithm << std::endl;
579+
}
561580
}
562581

563582
Primary4DVertexValidation::~Primary4DVertexValidation() {}
@@ -570,6 +589,8 @@ void Primary4DVertexValidation::bookHistograms(DQMStore::IBooker& ibook,
570589
edm::EventSetup const& iSetup) {
571590
ibook.setCurrentFolder(folder_);
572591
// --- histograms booking
592+
meUnAssocTracks_ = ibook.book1D("UnAssocTracks", "Unassociated tracks", 160, 0.5, 4.5);
593+
meFractionUnAssocTracks_ = ibook.book1D("FractionUnAssocTracks", "Fraction Unassociated tracks", 160, 0.0, 1.);
573594
meTrackEffPtTot_ = ibook.book1D("EffPtTot", "Pt of tracks associated to LV; track pt [GeV] ", 110, 0., 11.);
574595
meTrackEffEtaTot_ = ibook.book1D("EffEtaTot", "Eta of tracks associated to LV; track eta ", 66, 0., 3.3);
575596
meTrackMatchedTPEffPtTot_ =
@@ -2020,10 +2041,17 @@ void Primary4DVertexValidation::analyze(const edm::Event& iEvent, const edm::Eve
20202041
else
20212042
edm::LogWarning("Primary4DVertexValidation") << "recoToSimH is not valid";
20222043

2044+
reco::BeamSpot beamSpot;
20232045
edm::Handle<reco::BeamSpot> BeamSpotH;
20242046
iEvent.getByToken(RecBeamSpotToken_, BeamSpotH);
20252047
if (!BeamSpotH.isValid())
20262048
edm::LogWarning("Primary4DVertexValidation") << "BeamSpotH is not valid";
2049+
beamSpot = *BeamSpotH;
2050+
2051+
edm::Handle<reco::TrackCollection> tks;
2052+
iEvent.getByToken(trkToken, tks);
2053+
const auto& theB = &iSetup.getData(theTTBToken);
2054+
std::vector<reco::TransientTrack> t_tks;
20272055

20282056
std::vector<simPrimaryVertex> simpv; // a list of simulated primary MC vertices
20292057
simpv = getSimPVs(TVCollectionH);
@@ -2061,6 +2089,35 @@ void Primary4DVertexValidation::analyze(const edm::Event& iEvent, const edm::Eve
20612089
// I have simPV and recoPV collections
20622090
matchReco2Sim(recopv, simpv, sigmat0Safe, mtdQualMVA, BeamSpotH);
20632091

2092+
t_tks = (*theB).build(tks, beamSpot, t0Safe, sigmat0Safe);
2093+
2094+
// track filter
2095+
std::vector<reco::TransientTrack>&& seltks = theTrackFilter->select(t_tks);
2096+
2097+
int unassociatedCount = 0;
2098+
for (std::vector<reco::TransientTrack>::const_iterator itk = seltks.begin(); itk != seltks.end(); itk++) {
2099+
reco::TrackBaseRef trackref = (*itk).trackBaseRef();
2100+
bool isAssociated = false;
2101+
for (unsigned int iv = 0; iv < recopv.size(); iv++) {
2102+
const reco::Vertex* vertex = recopv.at(iv).recVtx;
2103+
for (auto iTrack = vertex->tracks_begin(); iTrack != vertex->tracks_end(); ++iTrack) {
2104+
if (*iTrack == trackref) {
2105+
isAssociated = true;
2106+
break;
2107+
}
2108+
}
2109+
if (isAssociated)
2110+
break;
2111+
}
2112+
2113+
if (!isAssociated) {
2114+
unassociatedCount++;
2115+
}
2116+
}
2117+
double fraction = double(unassociatedCount) / (seltks.size());
2118+
meUnAssocTracks_->Fill(log10(unassociatedCount));
2119+
meFractionUnAssocTracks_->Fill(fraction);
2120+
20642121
// Loop on tracks
20652122
for (unsigned int iv = 0; iv < recopv.size(); iv++) {
20662123
if (recopv.at(iv).ndof > selNdof_) {
@@ -2752,6 +2809,7 @@ void Primary4DVertexValidation::fillDescriptions(edm::ConfigurationDescriptions&
27522809

27532810
desc.add<std::string>("folder", "MTD/Vertices");
27542811
desc.add<edm::InputTag>("TPtoRecoTrackAssoc", edm::InputTag("trackingParticleRecoTrackAsssociation"));
2812+
desc.add<edm::InputTag>("TrackLabel", edm::InputTag("generalTracks"));
27552813
desc.add<edm::InputTag>("mtdTracks", edm::InputTag("trackExtenderWithMTD"));
27562814
desc.add<edm::InputTag>("SimTag", edm::InputTag("mix", "MergedTrackTruth"));
27572815
desc.add<edm::InputTag>("offlineBS", edm::InputTag("offlineBeamSpot"));
@@ -2780,6 +2838,12 @@ void Primary4DVertexValidation::fillDescriptions(edm::ConfigurationDescriptions&
27802838
desc.add<double>("trackweightTh", 0.5);
27812839
desc.add<double>("mvaTh", 0.8);
27822840
desc.add<double>("minProbHeavy", 0.75);
2841+
{
2842+
edm::ParameterSetDescription psd0;
2843+
HITrackFilterForPVFinding::fillPSetDescription(psd0); // extension of TrackFilterForPVFinding
2844+
desc.add<edm::ParameterSetDescription>("TkFilterParameters", psd0);
2845+
}
2846+
27832847
descriptions.add("vertices4DValid", desc);
27842848
}
27852849

0 commit comments

Comments
 (0)