CMS 3D CMS Logo

PFDisplacedVertexCandidateProducer.cc
Go to the documentation of this file.
1 
23 
25 public:
27 
29 
30  void produce(edm::Event&, const edm::EventSetup&) override;
31  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
32 
33 private:
36 
40 
42 
44  bool verbose_;
45 
48 };
49 
52 
55  // The track collection use for the fitting. May be any collection.
56  // The only condition is that it shall contain the hit pattern information
57  desc.add<edm::InputTag>("trackCollection", {"generalTracks"});
58  // verbosity
59  desc.addUntracked<bool>("verbose", false);
60  // Debug flag
61  desc.addUntracked<bool>("debug", false);
62  // maximum dca distance for two tracks to be linked
63  desc.add<double>("dcaCut", 0.5);
64  // minimum distance of secondary vertex with respect to the primary
65  desc.add<double>("primaryVertexCut", 1.8);
66  // maximum distance between the DCA Point and the inner hit of the track
67  // not used for the moment
68  desc.add<double>("dcaPInnerHitCut", 1000.0);
69  // Primary vertex information used for dxy calculation
70  desc.add<edm::InputTag>("mainVertexLabel", {"offlinePrimaryVertices", ""});
71  desc.add<edm::InputTag>("offlineBeamSpotLabel", {"offlineBeamSpot", ""});
72  // Tracks preselection to reduce the combinatorics in PFDisplacedVertexCandidates
73  // this cuts are repeated then in a smarter way in the PFDisplacedVertexFinder
74  // be sure you are consistent between them.
75  {
77  // selection parameters for secondary tracks
78  pset.add<double>("nChi2_max", 5.);
79  pset.add<double>("pt_min", 0.2);
80  // if the tracks is not a good candidate to be a secondary (dxy cut) restrict in minimal pt
81  // this cut reduce drastically the combinatorics. It is very useful to reduce the
82  // PFDisplacedVertex timing
83  pset.add<double>("pt_min_prim", 0.8);
84  pset.add<double>("dxy", 0.2);
85  pset.add<double>("qoverpError_max", 1.0e+7);
86 
87  desc.add<edm::ParameterSetDescription>("tracksSelectorParameters", pset);
88  }
89  descriptions.add("particleFlowDisplacedVertexCandidate", desc);
90 }
91 
92 using namespace std;
93 using namespace edm;
94 
96  : magneticFieldToken_(esConsumes()) {
97  // --- Setup input collection names --- //
98  inputTagTracks_ = consumes<reco::TrackCollection>(iConfig.getParameter<InputTag>("trackCollection"));
99 
100  inputTagMainVertex_ = consumes<reco::VertexCollection>(iConfig.getParameter<InputTag>("mainVertexLabel"));
101 
102  inputTagBeamSpot_ = consumes<reco::BeamSpot>(iConfig.getParameter<InputTag>("offlineBeamSpotLabel"));
103 
104  verbose_ = iConfig.getUntrackedParameter<bool>("verbose");
105 
106  bool debug = iConfig.getUntrackedParameter<bool>("debug");
107 
108  // ------ Algo Parameters ------ //
109 
110  // Distance of minimal approach below which
111  // two tracks are considered as linked together
112  double dcaCut = iConfig.getParameter<double>("dcaCut");
113 
114  // Do not reconstruct vertices wich are
115  // too close to the beam pipe
116  double primaryVertexCut = iConfig.getParameter<double>("primaryVertexCut");
117 
118  //maximum distance between the DCA Point and the inner hit of the track
119  double dcaPInnerHitCut = iConfig.getParameter<double>("dcaPInnerHitCut");
120 
121  edm::ParameterSet ps_trk = iConfig.getParameter<edm::ParameterSet>("tracksSelectorParameters");
122 
123  // Collection to be produced
124  produces<reco::PFDisplacedVertexCandidateCollection>();
125 
126  // Vertex Finder parameters -----------------------------------
128  pfDisplacedVertexCandidateFinder_.setParameters(dcaCut, primaryVertexCut, dcaPInnerHitCut, ps_trk);
129 }
130 
132 
134  LogDebug("PFDisplacedVertexCandidateProducer")
135  << "START event: " << iEvent.id().event() << " in run " << iEvent.id().run() << endl;
136 
137  // Prepare and fill useful event information for the Finder
138  auto const& theMagField = &iSetup.getData(magneticFieldToken_);
139 
142 
143  Handle<reco::VertexCollection> mainVertexHandle;
144  iEvent.getByToken(inputTagMainVertex_, mainVertexHandle);
145 
146  Handle<reco::BeamSpot> beamSpotHandle;
147  iEvent.getByToken(inputTagBeamSpot_, beamSpotHandle);
148 
149  pfDisplacedVertexCandidateFinder_.setPrimaryVertex(mainVertexHandle, beamSpotHandle);
151 
152  // Run the finder
154 
155  if (verbose_) {
156  ostringstream str;
159  LogInfo("PFDisplacedVertexCandidateProducer") << str.str() << endl;
160  }
161 
162  std::unique_ptr<reco::PFDisplacedVertexCandidateCollection> pOutputDisplacedVertexCandidateCollection(
164 
165  iEvent.put(std::move(pOutputDisplacedVertexCandidateCollection));
166 
167  LogDebug("PFDisplacedVertexCandidateProducer")
168  << "STOP event: " << iEvent.id().event() << " in run " << iEvent.id().run() << endl;
169 }
void setInput(const edm::Handle< reco::TrackCollection > &trackh, const MagneticField *magField)
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
edm::EDGetTokenT< reco::TrackCollection > inputTagTracks_
Reco Tracks used to spot the nuclear interactions.
void setPrimaryVertex(edm::Handle< reco::VertexCollection > mainVertexHandle, edm::Handle< reco::BeamSpot > beamSpotHandle)
PFDisplacedVertexCandidateFinder pfDisplacedVertexCandidateFinder_
Displaced Vertex Candidates finder.
T getUntrackedParameter(std::string const &, T const &) const
edm::EDGetTokenT< reco::BeamSpot > inputTagBeamSpot_
int iEvent
Definition: GenABIO.cc:224
void setDebug(bool debug)
sets debug printout flag
void setParameters(double dcaCut, double primaryVertexCut, double dcaPInnerHitCut, const edm::ParameterSet &ps_trk)
---—— Set different algo parameters —— ///
edm::EDGetTokenT< reco::VertexCollection > inputTagMainVertex_
Input tag for main vertex to cut of dxy of secondary tracks.
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
void produce(edm::Event &, const edm::EventSetup &) override
trackCollection
Definition: JetHT_cfg.py:51
Log< level::Info, false > LogInfo
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > magneticFieldToken_
#define debug
Definition: HDRShower.cc:19
void add(std::string const &label, ParameterSetDescription const &psetDescription)
HLT enums.
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
void findDisplacedVertexCandidates()
-----— Main function which find vertices -----— ///
std::unique_ptr< reco::PFDisplacedVertexCandidateCollection > transferVertexCandidates()
#define str(s)
def move(src, dest)
Definition: eostools.py:511
#define LogDebug(id)