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

Vertex reconstruction: code re-organization + vertex time computation #43592

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
12 changes: 4 additions & 8 deletions Alignment/OfflineValidation/plugins/PrimaryVertexValidation.cc
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,9 @@
#include "Geometry/TrackerGeometryBuilder/interface/PixelTopologyMap.h"
#include "Geometry/Records/interface/TrackerTopologyRcd.h"
#include "RecoVertex/PrimaryVertexProducer/interface/TrackFilterForPVFinding.h"
#include "RecoVertex/PrimaryVertexProducer/interface/HITrackFilterForPVFinding.h"
#include "RecoVertex/PrimaryVertexProducer/interface/DAClusterizerInZ_vect.h"
#include "RecoVertex/PrimaryVertexProducer/interface/DAClusterizerInZ.h"
#include "RecoVertex/PrimaryVertexProducer/interface/DAClusterizerInZT_vect.h"
#include "RecoVertex/PrimaryVertexProducer/interface/GapClusterizerInZ.h"
#include "RecoVertex/VertexPrimitives/interface/TransientVertex.h"
#include "TrackingTools/TransientTrack/interface/TransientTrack.h"
Expand Down Expand Up @@ -120,11 +121,6 @@ PrimaryVertexValidation::PrimaryVertexValidation(const edm::ParameterSet& iConfi
theTrackClusterizer_ =
std::make_unique<GapClusterizerInZ>(iConfig.getParameter<edm::ParameterSet>("TkClusParameters")
.getParameter<edm::ParameterSet>("TkGapClusParameters"));
} else if (clusteringAlgorithm == "DA") {
theTrackClusterizer_ =
std::make_unique<DAClusterizerInZ>(iConfig.getParameter<edm::ParameterSet>("TkClusParameters")
.getParameter<edm::ParameterSet>("TkDAClusParameters"));
// provide the vectorized version of the clusterizer, if supported by the build
} else if (clusteringAlgorithm == "DA_vect") {
theTrackClusterizer_ =
std::make_unique<DAClusterizerInZ_vect>(iConfig.getParameter<edm::ParameterSet>("TkClusParameters")
Expand Down Expand Up @@ -3700,15 +3696,15 @@ void PrimaryVertexValidation::fillDescriptions(edm::ConfigurationDescriptions& d
// track filtering
edm::ParameterSetDescription psd0;
TrackFilterForPVFinding::fillPSetDescription(psd0);
psd0.add<int>("numTracksThreshold", 0); // HI only
HITrackFilterForPVFinding::fillPSetDescription(psd0); // HI only
desc.add<edm::ParameterSetDescription>("TkFilterParameters", psd0);

// PV Clusterization
{
edm::ParameterSetDescription psd0;
{
edm::ParameterSetDescription psd1;
DAClusterizerInZ_vect::fillPSetDescription(psd1);
DAClusterizerInZT_vect::fillPSetDescription(psd1);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why is this change necessary here? The clusterizer in ZT is never used in this module.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@mmusich
here it is necessary to update the PSet to the one of the ZT clusterizer, which contains all the parameters of both Z and ZT clusterizers, because otherwise the tests of the PVValidation were failing. The error was caused by the missing parameters in the config.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This happens because you import here DA_vectParameters

from RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi import DA_vectParameters

which is defined as:

DA_vectParameters = cms.PSet(primaryVertexProducer.TkClusParameters.clone())

and is auto-generated by

DAClusterizerInZT_vect::fillPSetDescription(psd1);

This is assuming that all use-cases of DA_vectParameters are actually using the ZT-clusterizer (which is not the case).
I think it would be clearer to create two PSet-s instead: one with the full (Z-T) set of parameters and one with only the ones strictly needed by the clusterizer in z.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

given #43592 (comment), I gather this (admittedly minor) point will be followed up in a subsequent PR.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@mmusich @mandrenguyen I have opened #43787 to track this residual issue

psd0.add<edm::ParameterSetDescription>("TkDAClusParameters", psd1);

edm::ParameterSetDescription psd2;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@
)

## MM 04.05.2017 (use settings as in: https://github.com/cms-sw/cmssw/pull/18330)
from RecoVertex.PrimaryVertexProducer.TkClusParameters_cff import DA_vectParameters
from RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi import DA_vectParameters
DAClusterizationParams = DA_vectParameters.clone()

GapClusterizationParams = cms.PSet(algorithm = cms.string('gap'),
Expand Down
2 changes: 1 addition & 1 deletion Alignment/OfflineValidation/test/PVValidation_TEMPL_cfg.py
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ def customiseKinksAndBows(process):
)

## MM 04.05.2017 (use settings as in: https://github.com/cms-sw/cmssw/pull/18330)
from RecoVertex.PrimaryVertexProducer.TkClusParameters_cff import DA_vectParameters
from RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi import DA_vectParameters
DAClusterizationParams = DA_vectParameters.clone()

GapClusterizationParams = cms.PSet(algorithm = cms.string('gap'),
Expand Down
2 changes: 1 addition & 1 deletion Alignment/OfflineValidation/test/PVValidation_T_cfg.py
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ def customiseKinksAndBows(process):
)

## MM 04.05.2017 (use settings as in: https://github.com/cms-sw/cmssw/pull/18330)
from RecoVertex.PrimaryVertexProducer.TkClusParameters_cff import DA_vectParameters
from RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi import DA_vectParameters
DAClusterizationParams = DA_vectParameters.clone()

GapClusterizationParams = cms.PSet(algorithm = cms.string('gap'),
Expand Down
2 changes: 1 addition & 1 deletion Alignment/OfflineValidation/test/testG4Refitter_cfg.py
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@
)

## MM 04.05.2017 (use settings as in: https://github.com/cms-sw/cmssw/pull/18330)
from RecoVertex.PrimaryVertexProducer.TkClusParameters_cff import DA_vectParameters
from RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi import DA_vectParameters
DAClusterizationParams = DA_vectParameters.clone()

####################################################################
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,7 @@ class RefitType(Enum):
)

## MM 04.05.2017 (use settings as in: https://github.com/cms-sw/cmssw/pull/18330)
from RecoVertex.PrimaryVertexProducer.TkClusParameters_cff import DA_vectParameters
from RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi import DA_vectParameters
DAClusterizationParams = DA_vectParameters.clone()

GapClusterizationParams = cms.PSet(algorithm = cms.string('gap'),
Expand Down
2 changes: 1 addition & 1 deletion Alignment/OfflineValidation/test/test_all_Phase2_cfg.py
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,7 @@ class RefitType(Enum):
)

## MM 04.05.2017 (use settings as in: https://github.com/cms-sw/cmssw/pull/18330)
from RecoVertex.PrimaryVertexProducer.TkClusParameters_cff import DA_vectParameters
from RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi import DA_vectParameters
DAClusterizationParams = DA_vectParameters.clone()

GapClusterizationParams = cms.PSet(algorithm = cms.string('gap'),
Expand Down
2 changes: 1 addition & 1 deletion Alignment/OfflineValidation/test/test_all_cfg.py
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,7 @@ class RefitType(Enum):
)

## MM 04.05.2017 (use settings as in: https://github.com/cms-sw/cmssw/pull/18330)
from RecoVertex.PrimaryVertexProducer.TkClusParameters_cff import DA_vectParameters
from RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi import DA_vectParameters
DAClusterizationParams = DA_vectParameters.clone()

GapClusterizationParams = cms.PSet(algorithm = cms.string('gap'),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import FWCore.ParameterSet.Config as cms

# Modifier to enable the use of the MVA selection on
# tracks for the 4D vertex reco

vertex4DTrackSelMVA = cms.Modifier()
54 changes: 43 additions & 11 deletions RecoMTD/TimingIDTools/plugins/TOFPIDProducer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,18 @@ class TOFPIDProducer : public edm::stream::EDProducer<> {
edm::EDGetTokenT<edm::ValueMap<float>> tofkToken_;
edm::EDGetTokenT<edm::ValueMap<float>> tofpToken_;
edm::EDGetTokenT<reco::VertexCollection> vtxsToken_;
double vtxMaxSigmaT_;
double maxDz_;
double maxDtSignificance_;
double minProbHeavy_;
double fixedT0Error_;
edm::EDGetTokenT<edm::ValueMap<float>> trackMTDTimeQualityToken_;
const double vtxMaxSigmaT_;
const double maxDz_;
const double maxDtSignificance_;
const double minProbHeavy_;
const double fixedT0Error_;
const double probPion_;
const double probKaon_;
const double probProton_;
const double minTrackTimeQuality_;
const bool MVASel_;
const bool vertexReassignment_;
};

TOFPIDProducer::TOFPIDProducer(const ParameterSet& iConfig)
Expand All @@ -65,11 +72,19 @@ TOFPIDProducer::TOFPIDProducer(const ParameterSet& iConfig)
tofkToken_(consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("tofkSrc"))),
tofpToken_(consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("tofpSrc"))),
vtxsToken_(consumes<reco::VertexCollection>(iConfig.getParameter<edm::InputTag>("vtxsSrc"))),
trackMTDTimeQualityToken_(
consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("trackMTDTimeQualityVMapTag"))),
vtxMaxSigmaT_(iConfig.getParameter<double>("vtxMaxSigmaT")),
maxDz_(iConfig.getParameter<double>("maxDz")),
maxDtSignificance_(iConfig.getParameter<double>("maxDtSignificance")),
minProbHeavy_(iConfig.getParameter<double>("minProbHeavy")),
fixedT0Error_(iConfig.getParameter<double>("fixedT0Error")) {
fixedT0Error_(iConfig.getParameter<double>("fixedT0Error")),
probPion_(iConfig.getParameter<double>("probPion")),
probKaon_(iConfig.getParameter<double>("probKaon")),
probProton_(iConfig.getParameter<double>("probProton")),
minTrackTimeQuality_(iConfig.getParameter<double>("minTrackTimeQuality")),
MVASel_(iConfig.getParameter<bool>("MVASel")),
vertexReassignment_(iConfig.getParameter<bool>("vertexReassignment")) {
produces<edm::ValueMap<float>>(t0Name);
produces<edm::ValueMap<float>>(sigmat0Name);
produces<edm::ValueMap<float>>(t0safeName);
Expand Down Expand Up @@ -97,6 +112,8 @@ void TOFPIDProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptio
->setComment("Input ValueMap for track tof as proton");
desc.add<edm::InputTag>("vtxsSrc", edm::InputTag("unsortedOfflinePrimaryVertices4DwithPID"))
->setComment("Input primary vertex collection");
desc.add<edm::InputTag>("trackMTDTimeQualityVMapTag", edm::InputTag("mtdTrackQualityMVA:mtdQualMVA"))
->setComment("Track MVA quality value");
desc.add<double>("vtxMaxSigmaT", 0.025)
->setComment("Maximum primary vertex time uncertainty for use in particle id [ns]");
desc.add<double>("maxDz", 0.1)
Expand All @@ -107,6 +124,12 @@ void TOFPIDProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptio
desc.add<double>("minProbHeavy", 0.75)
->setComment("Minimum probability for a particle to be a kaon or proton before reassigning the timestamp");
desc.add<double>("fixedT0Error", 0.)->setComment("Use a fixed T0 uncertainty [ns]");
desc.add<double>("probPion", 1.)->setComment("A priori probability pions");
desc.add<double>("probKaon", 1.)->setComment("A priori probability kaons");
desc.add<double>("probProton", 1.)->setComment("A priori probability for protons");
desc.add<double>("minTrackTimeQuality", 0.8)->setComment("Minimum MVA Quality selection on tracks");
desc.add<bool>("MVASel", false)->setComment("Use MVA Quality selection");
desc.add<bool>("vertexReassignment", true)->setComment("Track-vertex reassignment");

descriptions.add("tofPIDProducer", desc);
}
Expand Down Expand Up @@ -142,6 +165,8 @@ void TOFPIDProducer::produce(edm::Event& ev, const edm::EventSetup& es) {

const auto& vtxs = ev.get(vtxsToken_);

const auto& trackMVAQualIn = ev.get(trackMTDTimeQualityToken_);

//output value maps (PID probabilities and recalculated time at beamline)
std::vector<float> t0OutRaw;
std::vector<float> sigmat0OutRaw;
Expand All @@ -165,7 +190,9 @@ void TOFPIDProducer::produce(edm::Event& ev, const edm::EventSetup& es) {
float prob_k = -1.;
float prob_p = -1.;

if (sigmat0 > 0.) {
float trackMVAQual = trackMVAQualIn[trackref];

if (sigmat0 > 0. && (!MVASel_ || (MVASel_ && trackMVAQual >= minTrackTimeQuality_))) {
double rsigmazsq = 1. / track.dzError() / track.dzError();
double rsigmat = 1. / sigmatmtd;

Expand Down Expand Up @@ -239,7 +266,12 @@ void TOFPIDProducer::produce(edm::Event& ev, const edm::EventSetup& es) {
double chisqmin_k = std::numeric_limits<double>::max();
double chisqmin_p = std::numeric_limits<double>::max();
//loop through vertices and check for better matches
for (const reco::Vertex& vtx : vtxs) {
for (unsigned int ivtx = 0; ivtx < vtxs.size(); ++ivtx) {
const reco::Vertex& vtx = vtxs[ivtx];
if (!vertexReassignment_) {
if (ivtx != (unsigned int)vtxidx)
continue;
}
if (!(vtx.tError() > 0. && vtx.tError() < vtxMaxSigmaT_)) {
continue;
}
Expand Down Expand Up @@ -283,9 +315,9 @@ void TOFPIDProducer::produce(edm::Event& ev, const edm::EventSetup& es) {

//compute PID probabilities
//*TODO* deal with heavier nucleons and/or BSM case here?
double rawprob_pi = exp(-0.5 * chisqmin_pi);
double rawprob_k = exp(-0.5 * chisqmin_k);
double rawprob_p = exp(-0.5 * chisqmin_p);
double rawprob_pi = probPion_ * exp(-0.5 * chisqmin_pi);
double rawprob_k = probKaon_ * exp(-0.5 * chisqmin_k);
double rawprob_p = probProton_ * exp(-0.5 * chisqmin_p);

double normprob = 1. / (rawprob_pi + rawprob_k + rawprob_p);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,7 @@
'keep *_offlinePrimaryVertices4DWithBS__*',
'keep *_trackTimeValueMapProducer_*_*' ]

_phase2_tktiming_layer_RecoVertexEventContent = [ 'keep *_offlinePrimaryVertices4DnoPID__*',
'keep *_offlinePrimaryVertices4DnoPIDWithBS__*',
'keep *_tofPID_*_*']
_phase2_tktiming_layer_RecoVertexEventContent = [ 'keep *_tofPID_*_*']
phase2_timing.toModify( RecoVertexAOD,
outputCommands = RecoVertexAOD.outputCommands + _phase2_tktiming_RecoVertexEventContent)
phase2_timing_layer.toModify( RecoVertexAOD,
Expand Down
15 changes: 5 additions & 10 deletions RecoVertex/Configuration/python/RecoVertex_cff.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,15 +45,11 @@
from RecoVertex.Configuration.RecoVertex_phase2_timing_cff import (tpClusterProducer ,
quickTrackAssociatorByHits ,
trackTimeValueMapProducer ,
unsortedOfflinePrimaryVertices4DnoPID ,
trackWithVertexRefSelectorBeforeSorting4DnoPID ,
trackRefsForJetsBeforeSorting4DnoPID ,
offlinePrimaryVertices4DnoPID ,
offlinePrimaryVertices4DnoPIDWithBS,
unsortedOfflinePrimaryVertices4DwithPID ,
offlinePrimaryVertices4DwithPID ,
offlinePrimaryVertices4DwithPIDWithBS,
tofPID,
tofPID3D,
tofPID4DnoPID,
unsortedOfflinePrimaryVertices4D,
trackWithVertexRefSelectorBeforeSorting4D,
Expand All @@ -73,11 +69,7 @@
)

_phase2_tktiming_layer_vertexrecoTask = cms.Task( _phase2_tktiming_vertexrecoTask.copy() ,
unsortedOfflinePrimaryVertices4DnoPID ,
trackWithVertexRefSelectorBeforeSorting4DnoPID ,
trackRefsForJetsBeforeSorting4DnoPID ,
offlinePrimaryVertices4DnoPID ,
offlinePrimaryVertices4DnoPIDWithBS,
tofPID3D,
tofPID,
tofPID4DnoPID,
)
Expand All @@ -93,3 +85,6 @@
phase2_timing_layer.toModify(offlinePrimaryVertices4D, vertices = "unsortedOfflinePrimaryVertices4D", particles = "trackRefsForJetsBeforeSorting4D")
phase2_timing_layer.toModify(offlinePrimaryVertices4DWithBS, vertices = "unsortedOfflinePrimaryVertices4D:WithBS", particles = "trackRefsForJetsBeforeSorting4D")

from Configuration.ProcessModifiers.vertex4DTrackSelMVA_cff import vertex4DTrackSelMVA
vertex4DTrackSelMVA.toModify(unsortedOfflinePrimaryVertices4D, useMVACut = True)
vertex4DTrackSelMVA.toModify(unsortedOfflinePrimaryVertices4DwithPID, useMVACut = True)
45 changes: 18 additions & 27 deletions RecoVertex/Configuration/python/RecoVertex_phase2_timing_cff.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,19 @@
import FWCore.ParameterSet.Config as cms
from RecoVertex.Configuration.RecoVertex_cff import unsortedOfflinePrimaryVertices, trackWithVertexRefSelector, trackRefsForJets, sortedPrimaryVertices, offlinePrimaryVertices, offlinePrimaryVerticesWithBS,vertexrecoTask

from RecoVertex.PrimaryVertexProducer.TkClusParameters_cff import DA2D_vectParameters

unsortedOfflinePrimaryVertices4D = unsortedOfflinePrimaryVertices.clone(
TkClusParameters = DA2D_vectParameters,
TkClusParameters = dict(
algorithm = "DA2D_vect",
TkDAClusParameters = dict(
Tmin = 4.0,
Tpurge = 4.0,
Tstop = 2.0
),
),
TrackTimesLabel = cms.InputTag("trackTimeValueMapProducer","generalTracksConfigurableFlatResolutionModel"),
TrackTimeResosLabel = cms.InputTag("trackTimeValueMapProducer","generalTracksConfigurableFlatResolutionModelResolution"),
vertexCollections = {0: dict(vertexTimeParameters = cms.PSet( algorithm = cms.string('legacy4D'))),
1: dict(vertexTimeParameters = cms.PSet( algorithm = cms.string('legacy4D')))}
)
trackWithVertexRefSelectorBeforeSorting4D = trackWithVertexRefSelector.clone(
vertexTag = "unsortedOfflinePrimaryVertices4D",
Expand All @@ -27,28 +34,6 @@
vertices = "unsortedOfflinePrimaryVertices4D:WithBS"
)

unsortedOfflinePrimaryVertices4DnoPID = unsortedOfflinePrimaryVertices4D.clone(
TrackTimesLabel = "trackExtenderWithMTD:generalTrackt0",
TrackTimeResosLabel = "trackExtenderWithMTD:generalTracksigmat0"
)
trackWithVertexRefSelectorBeforeSorting4DnoPID = trackWithVertexRefSelector.clone(
vertexTag = "unsortedOfflinePrimaryVertices4DnoPID",
ptMax = 9e99,
ptErrorCut = 9e99
)
trackRefsForJetsBeforeSorting4DnoPID = trackRefsForJets.clone(
src = "trackWithVertexRefSelectorBeforeSorting4DnoPID"
)
offlinePrimaryVertices4DnoPID = offlinePrimaryVertices4D.clone(
vertices = "unsortedOfflinePrimaryVertices4DnoPID",
particles = "trackRefsForJetsBeforeSorting4DnoPID",
trackTimeTag = "trackExtenderWithMTD:generalTrackt0",
trackTimeResoTag = "trackExtenderWithMTD:generalTracksigmat0"
)
offlinePrimaryVertices4DnoPIDWithBS=offlinePrimaryVertices4DnoPID.clone(
vertices = "unsortedOfflinePrimaryVertices4DnoPID:WithBS"
)

unsortedOfflinePrimaryVertices4DwithPID = unsortedOfflinePrimaryVertices4D.clone(
TrackTimesLabel = "tofPID4DnoPID:t0safe",
TrackTimeResosLabel = "tofPID4DnoPID:sigmat0safe"
Expand Down Expand Up @@ -76,9 +61,15 @@
from SimTracker.TrackAssociation.trackTimeValueMapProducer_cfi import trackTimeValueMapProducer
from RecoMTD.TimingIDTools.tofPIDProducer_cfi import tofPIDProducer

tofPID4DnoPID=tofPIDProducer.clone(vtxsSrc='unsortedOfflinePrimaryVertices4DnoPID')
tofPID4DnoPID=tofPIDProducer.clone(vtxsSrc='unsortedOfflinePrimaryVertices')
tofPID=tofPIDProducer.clone()
tofPID3D=tofPIDProducer.clone(vtxsSrc='unsortedOfflinePrimaryVertices')

from Configuration.Eras.Modifier_phase2_timing_layer_cff import phase2_timing_layer
phase2_timing_layer.toModify(tofPID, vtxsSrc='unsortedOfflinePrimaryVertices4D')
phase2_timing_layer.toModify(tofPID, vtxsSrc='unsortedOfflinePrimaryVertices4D', vertexReassignment=False)
phase2_timing_layer.toModify(tofPID3D, vertexReassignment=False)
phase2_timing_layer.toModify(unsortedOfflinePrimaryVertices,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this violates the rules of applying modifiers, modules can be modified only in the files where they are defined

vertexCollections = {0: dict(vertexTimeParameters = cms.PSet( algorithm = cms.string('fromTracksPID'))),
1: dict(vertexTimeParameters = cms.PSet( algorithm = cms.string('fromTracksPID')))}
)

Loading