CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Private Member Functions | Private Attributes | Friends
PFDisplacedVertexCandidateFinder Class Reference

#include <PFDisplacedVertexCandidateFinder.h>

Public Types

typedef reco::PFDisplacedVertexCandidateCollection::const_iterator IBC
 
typedef std::list< reco::TrackBaseRef >::iterator IE
 
typedef std::list< reco::TrackBaseRef >::const_iterator IEC
 
typedef std::vector< bool > Mask
 Mask used to spot if a track is free or not. More...
 

Public Member Functions

void findDisplacedVertexCandidates ()
 -----— Main function which find vertices -----— /// More...
 
 PFDisplacedVertexCandidateFinder ()
 
void setDebug (bool debug)
 sets debug printout flag More...
 
void setInput (const edm::Handle< reco::TrackCollection > &trackh, const MagneticField *magField)
 
void setParameters (double dcaCut, double primaryVertexCut, double dcaPInnerHitCut, const edm::ParameterSet &ps_trk)
 ---—— Set different algo parameters —— /// More...
 
void setPrimaryVertex (edm::Handle< reco::VertexCollection > mainVertexHandle, edm::Handle< reco::BeamSpot > beamSpotHandle)
 
std::unique_ptr< reco::PFDisplacedVertexCandidateCollectiontransferVertexCandidates ()
 
const std::unique_ptr< reco::PFDisplacedVertexCandidateCollection > & vertexCandidates () const
 
 ~PFDisplacedVertexCandidateFinder ()
 

Private Member Functions

IE associate (IE next, IE last, reco::PFDisplacedVertexCandidate &tempVertexCandidate)
 --—— Different steps of the finder algorithm --—— /// More...
 
GlobalTrajectoryParameters getGlobalTrajectoryParameters (const reco::Track *) const
 --—— TOOLS --—— // More...
 
bool goodPtResolution (const reco::TrackBaseRef &trackref) const
 Quality Criterion on the Pt resolution to select a Track. More...
 
bool isSelected (const reco::TrackBaseRef &trackref)
 
void link (const reco::TrackBaseRef &el1, const reco::TrackBaseRef &el2, double &dist, GlobalPoint &crossing_point, reco::PFDisplacedVertexCandidate::VertexLinkTest &linktest)
 Check whether 2 elements are linked and fill the link parameters. More...
 
void packLinks (reco::PFDisplacedVertexCandidate &vertexCandidate)
 

Private Attributes

double dcaCut_
 –— Algo parameters for the vertex finder -— /// More...
 
double dcaPInnerHitCut2_
 Maximum distance between the DCA Point and the inner hit of the track. More...
 
bool debug_
 if true, debug printouts activated More...
 
double dxy_
 
std::list< reco::TrackBaseRefeventTracks_
 The track refs. More...
 
std::vector< GlobalTrajectoryParameterseventTrackTrajectories_
 
const MagneticFieldmagField_
 
double nChi2_max_
 
double primaryVertexCut2_
 Do not reconstruct vertices wich are too close to the beam pipe. More...
 
double pt_min_
 
double pt_min_prim_
 
math::XYZPoint pvtx_
 
TwoTrackMinimumDistance theMinimum_
 
edm::soa::PtEtaPhiTable track_table_
 
Mask trackMask_
 
std::unique_ptr< reco::PFDisplacedVertexCandidateCollectionvertexCandidates_
 -----— Members -----— /// More...
 
unsigned vertexCandidatesSize_
 

Friends

std::ostream & operator<< (std::ostream &, const PFDisplacedVertexCandidateFinder &)
 

Detailed Description

Definition at line 26 of file PFDisplacedVertexCandidateFinder.h.

Member Typedef Documentation

◆ IBC

typedef reco::PFDisplacedVertexCandidateCollection::const_iterator PFDisplacedVertexCandidateFinder::IBC

Definition at line 37 of file PFDisplacedVertexCandidateFinder.h.

◆ IE

Definition at line 35 of file PFDisplacedVertexCandidateFinder.h.

◆ IEC

typedef std::list<reco::TrackBaseRef>::const_iterator PFDisplacedVertexCandidateFinder::IEC

Definition at line 36 of file PFDisplacedVertexCandidateFinder.h.

◆ Mask

typedef std::vector<bool> PFDisplacedVertexCandidateFinder::Mask

Mask used to spot if a track is free or not.

Definition at line 33 of file PFDisplacedVertexCandidateFinder.h.

Constructor & Destructor Documentation

◆ PFDisplacedVertexCandidateFinder()

PFDisplacedVertexCandidateFinder::PFDisplacedVertexCandidateFinder ( )

Definition at line 18 of file PFDisplacedVertexCandidateFinder.cc.

20  dcaCut_(1000),
21  primaryVertexCut2_(0.0),
22  dcaPInnerHitCut2_(1000.0),
25  debug_(false),
26  magField_(nullptr) {}
std::vector< PFDisplacedVertexCandidate > PFDisplacedVertexCandidateCollection
collection of PFDisplacedVertexCandidate objects
double dcaCut_
–— Algo parameters for the vertex finder -— ///
std::unique_ptr< reco::PFDisplacedVertexCandidateCollection > vertexCandidates_
-----— Members -----— ///
double primaryVertexCut2_
Do not reconstruct vertices wich are too close to the beam pipe.
double dcaPInnerHitCut2_
Maximum distance between the DCA Point and the inner hit of the track.
bool debug_
if true, debug printouts activated

◆ ~PFDisplacedVertexCandidateFinder()

PFDisplacedVertexCandidateFinder::~PFDisplacedVertexCandidateFinder ( )

Definition at line 28 of file PFDisplacedVertexCandidateFinder.cc.

References eventTracks_, and LogDebug.

28  {
29  LogDebug("PFDisplacedVertexCandidateFinder")
30  << "~PFDisplacedVertexCandidateFinder - number of remaining elements: " << eventTracks_.size();
31 }
std::list< reco::TrackBaseRef > eventTracks_
The track refs.
#define LogDebug(id)

Member Function Documentation

◆ associate()

PFDisplacedVertexCandidateFinder::IE PFDisplacedVertexCandidateFinder::associate ( IE  next,
IE  last,
reco::PFDisplacedVertexCandidate tempVertexCandidate 
)
private

--—— Different steps of the finder algorithm --—— ///

Recursive procedure to associate tracks together

Definition at line 111 of file PFDisplacedVertexCandidateFinder.cc.

References reco::PFDisplacedVertexCandidate::addElement(), reco::PFDisplacedVertexCandidate::elements(), eventTracks_, mps_fire::i, dqmdumpme::last, link(), LogDebug, LogTrace, GetRecoTauVFromDQM_MC_cff::next, trackMask_, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by findDisplacedVertexCandidates().

112  {
113  LogDebug("PFDisplacedVertexCandidateFinder") << "== Start the association procedure ==";
114 
115  if (last != eventTracks_.end()) {
116  double dist = -1;
117  GlobalPoint crossingPoint(0, 0, 0);
119  link(*last, *next, dist, crossingPoint, linktest);
120 
121  if (dist < -0.5) {
122  LogDebug("PFDisplacedVertexCandidateFinder") << "link failed";
123 
124  return ++next; // association failed
125  } else {
126  // add next element to the current pflowblock
127  LogDebug("PFDisplacedVertexCandidateFinder")
128  << "adding element " << (*next).key() << " to PFDisplacedVertexCandidate with "
129  << tempVertexCandidate.elements().size() << " elements";
130  tempVertexCandidate.addElement((*next));
131  trackMask_[(*next).key()] = false;
132 
133  LogDebug("PFDisplacedVertexCandidateFinder")
134  << "link parameters "
135  << " *next = " << (*next).key() << " *last = " << (*last).key() << " dist = " << crossingPoint
136  << " P.x = " << crossingPoint.x() << " P.y = " << crossingPoint.y() << " P.z = " << crossingPoint.z();
137  }
138  } else {
139  // add next element to this eflowblock
140  LogDebug("PFDisplacedVertexCandidateFinder") << "adding to block element " << (*next).key();
141  tempVertexCandidate.addElement((*next));
142  trackMask_[(*next).key()] = false;
143  }
144 
145  // recursive call: associate next and other unused elements
146 #ifdef EDM_ML_DEBUG
147  for (unsigned i = 0; i < trackMask_.size(); i++)
148  LogTrace("PFDisplacedVertexCandidateFinder") << " Mask[" << i << "] = " << trackMask_[i];
149 #endif
150 
151  for (IE ie = eventTracks_.begin(); ie != eventTracks_.end();) {
152  if (ie == last || ie == next) {
153  ++ie;
154  continue;
155  }
156 
157  // *ie already included to a block
158  if (!trackMask_[(*ie).key()]) {
159  ++ie;
160  continue;
161  }
162 
163  LogDebug("PFDisplacedVertexCandidateFinder") << "calling associate " << (*next).key() << " & " << (*ie).key();
164  ie = associate(next, ie, tempVertexCandidate);
165  }
166 
167  LogDebug("PFDisplacedVertexCandidateFinder") << "**** removing element ";
168 
169  IE iteratorToNextFreeElement = eventTracks_.erase(next);
170 
171  LogDebug("PFDisplacedVertexCandidateFinder") << "== End the association procedure ==";
172 
173  return iteratorToNextFreeElement;
174 }
void addElement(const TrackBaseRef)
add a track Reference to the current Candidate
IE associate(IE next, IE last, reco::PFDisplacedVertexCandidate &tempVertexCandidate)
--—— Different steps of the finder algorithm --—— ///
std::list< reco::TrackBaseRef > eventTracks_
The track refs.
#define LogTrace(id)
void link(const reco::TrackBaseRef &el1, const reco::TrackBaseRef &el2, double &dist, GlobalPoint &crossing_point, reco::PFDisplacedVertexCandidate::VertexLinkTest &linktest)
Check whether 2 elements are linked and fill the link parameters.
std::list< reco::TrackBaseRef >::iterator IE
const std::vector< TrackBaseRef > & elements() const
#define LogDebug(id)

◆ findDisplacedVertexCandidates()

void PFDisplacedVertexCandidateFinder::findDisplacedVertexCandidates ( )

-----— Main function which find vertices -----— ///

Definition at line 82 of file PFDisplacedVertexCandidateFinder.cc.

References associate(), reco::PFDisplacedVertexCandidate::elements(), eventTracks_, reco::PFDisplacedVertexCandidate::isValid(), LogDebug, packLinks(), vertexCandidates_, and vertexCandidatesSize_.

Referenced by PFDisplacedVertexCandidateProducer::produce().

82  {
83  LogDebug("PFDisplacedVertexCandidateFinder") << "========= Start Finding Displaced Vertex Candidates =========";
84 
85  // The vertexCandidates have not been passed to the event, and need to be cleared
86  if (vertexCandidates_.get())
87  vertexCandidates_->clear();
88  else
89  vertexCandidates_ = std::make_unique<PFDisplacedVertexCandidateCollection>();
90 
92  for (IE ie = eventTracks_.begin(); ie != eventTracks_.end();) {
93  // Run the recursive procedure to find all tracks link together
94  // In one blob called Candidate
95 
96  PFDisplacedVertexCandidate tempVertexCandidate;
97 
98  ie = associate(eventTracks_.end(), ie, tempVertexCandidate);
99  LogDebug("PFDisplacedVertexCandidateFinder") << "elements=" << tempVertexCandidate.elements().size();
100 
101  // Build remaining links in current block
102  if (tempVertexCandidate.isValid()) {
103  packLinks(tempVertexCandidate);
104  vertexCandidates_->push_back(tempVertexCandidate);
105  }
106  }
107 
108  LogDebug("PFDisplacedVertexCandidateFinder") << "========= End Finding Displaced Vertex Candidates =========";
109 }
A block of tracks linked together.
IE associate(IE next, IE last, reco::PFDisplacedVertexCandidate &tempVertexCandidate)
--—— Different steps of the finder algorithm --—— ///
bool isValid() const
A Vertex Candidate is valid if it has at least two tracks.
std::list< reco::TrackBaseRef > eventTracks_
The track refs.
std::list< reco::TrackBaseRef >::iterator IE
std::unique_ptr< reco::PFDisplacedVertexCandidateCollection > vertexCandidates_
-----— Members -----— ///
const std::vector< TrackBaseRef > & elements() const
void packLinks(reco::PFDisplacedVertexCandidate &vertexCandidate)
#define LogDebug(id)

◆ getGlobalTrajectoryParameters()

GlobalTrajectoryParameters PFDisplacedVertexCandidateFinder::getGlobalTrajectoryParameters ( const reco::Track track) const
private

--—— TOOLS --—— //

Allows to calculate the helix aproximation for a given track which may be then extrapolated to any point.

Definition at line 299 of file PFDisplacedVertexCandidateFinder.cc.

References magField_, position, and HLT_2023v11_cff::track.

Referenced by setInput().

299  {
300  const GlobalPoint position(track->vx(), track->vy(), track->vz());
301 
302  const GlobalVector momentum(track->momentum().x(), track->momentum().y(), track->momentum().z());
303 
304  GlobalTrajectoryParameters gtp(position, momentum, track->charge(), magField_);
305 
306  return gtp;
307 }
static int position[264][3]
Definition: ReadPGInfo.cc:289

◆ goodPtResolution()

bool PFDisplacedVertexCandidateFinder::goodPtResolution ( const reco::TrackBaseRef trackref) const
private

Quality Criterion on the Pt resolution to select a Track.

Definition at line 310 of file PFDisplacedVertexCandidateFinder.cc.

References funct::abs(), PVValHelper::dxy, reco::TrackBase::dxy(), dxy_, LogDebug, nChi2_max_, reco::TrackBase::normalizedChi2(), DiDispStaMuonMonitor_cfi::pt, reco::TrackBase::pt(), pt_min_, pt_min_prim_, reco::TrackBase::ptError(), and pvtx_.

Referenced by isSelected().

310  {
311  double nChi2 = trackref->normalizedChi2();
312  double pt = trackref->pt();
313  double dpt = trackref->ptError();
314  double dxy = trackref->dxy(pvtx_);
315 
316  double pt_error = dpt / pt * 100;
317 
318  LogDebug("PFDisplacedVertexCandidateFinder")
319  << " PFDisplacedVertexFinder: PFrecTrack->Track Pt= " << pt << " dPt/Pt = " << pt_error << "% nChi2 = " << nChi2;
320  if (nChi2 > nChi2_max_ || pt < pt_min_) {
321  LogDebug("PFDisplacedVertexCandidateFinder") << " PFBlockAlgo: skip badly measured or low pt track"
322  << " nChi2_cut = " << 5 << " pt_cut = " << 0.2;
323  return false;
324  }
325  // cout << "dxy = " << dxy << endl;
326  if (std::abs(dxy) < dxy_ && pt < pt_min_prim_)
327  return false;
328  // if (fabs(dxy) < 0.2 && pt < 0.8) return false;
329 
330  return true;
331 }
double ptError() const
error on Pt (set to 1000 TeV if charge==0 for safety)
Definition: TrackBase.h:754
double pt() const
track transverse momentum
Definition: TrackBase.h:637
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double normalizedChi2() const
chi-squared divided by n.d.o.f. (or chi-squared * 1e6 if n.d.o.f. is zero)
Definition: TrackBase.h:593
double dxy() const
dxy parameter. (This is the transverse impact parameter w.r.t. to (0,0,0) ONLY if refPoint is close t...
Definition: TrackBase.h:608
#define LogDebug(id)

◆ isSelected()

bool PFDisplacedVertexCandidateFinder::isSelected ( const reco::TrackBaseRef trackref)
inlineprivate

A function which gather the information if a track is available for vertexing

Definition at line 103 of file PFDisplacedVertexCandidateFinder.h.

References goodPtResolution().

Referenced by setInput().

103 { return goodPtResolution(trackref); }
bool goodPtResolution(const reco::TrackBaseRef &trackref) const
Quality Criterion on the Pt resolution to select a Track.

◆ link()

void PFDisplacedVertexCandidateFinder::link ( const reco::TrackBaseRef el1,
const reco::TrackBaseRef el2,
double &  dist,
GlobalPoint crossing_point,
reco::PFDisplacedVertexCandidate::VertexLinkTest linktest 
)
private

Check whether 2 elements are linked and fill the link parameters.

Definition at line 176 of file PFDisplacedVertexCandidateFinder.cc.

References funct::abs(), TwoTrackMinimumDistance::calculate(), TwoTrackMinimumDistance::crossingPoint(), dcaCut_, SiPixelRawToDigiRegional_cfi::deltaPhi, TwoTrackMinimumDistance::distance(), HLT_2023v11_cff::eta1, HLT_2023v11_cff::eta2, eventTrackTrajectories_, edm::RefToBase< T >::key(), LogDebug, primaryVertexCut2_, HLT_2023v11_cff::pt1, HLT_2023v11_cff::pt2, theMinimum_, track_table_, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by associate(), and packLinks().

180  {
181  using namespace edm::soa::col;
182  const auto iel1 = el1.key();
183  const auto iel2 = el2.key();
184  const auto pt1 = track_table_.get<Pt>(iel1);
185  const auto pt2 = track_table_.get<Pt>(iel2);
186  const auto eta1 = track_table_.get<Eta>(iel1);
187  const auto eta2 = track_table_.get<Eta>(iel2);
188  const auto phi1 = track_table_.get<Phi>(iel1);
189  const auto phi2 = track_table_.get<Phi>(iel2);
190 
191  if (std::abs(eta1 - eta2) > 1) {
192  dist = -1;
193  return;
194  }
195  if (pt1 > 2 && pt2 > 2 && std::abs(::deltaPhi(phi1, phi2)) > 1) {
196  dist = -1;
197  return;
198  }
199 
202 
203  // Closest approach
204  theMinimum_.calculate(gt1, gt2);
205 
206  // Fill the parameters
207  dist = theMinimum_.distance();
208  LogDebug("PFDisplacedVertexCandidateFinder") << "link iel1=" << iel1 << " iel2=" << iel2 << " dist=" << dist;
209  crossingPoint = theMinimum_.crossingPoint();
210 
211  vertexLinkTest = PFDisplacedVertexCandidate::LINKTEST_DCA; //rechit by default
212 
213  // Check if the link test fails
214  if (dist > dcaCut_) {
215  dist = -1;
216  return;
217  }
218 
219  // Check if the closses approach point is too close to the primary vertex/beam pipe
220  double rho2 = crossingPoint.x() * crossingPoint.x() + crossingPoint.y() * crossingPoint.y();
221 
222  if (rho2 < primaryVertexCut2_) {
223  dist = -1;
224  return;
225  }
226 
227  // Check if the closses approach point is out of range of the tracker
228 
229  double tob_rho_limit2 = 10000;
230  double tec_z_limit = 270;
231 
232  if (rho2 > tob_rho_limit2) {
233  dist = -1;
234  return;
235  }
236  if (std::abs(crossingPoint.z()) > tec_z_limit) {
237  dist = -1;
238  return;
239  }
240 
241  return;
242 
243  /*
244  // Check if the inner hit of one of the tracks is not too far away from the vertex
245  double dx = el1->innerPosition().x()-P.x();
246  double dy = el1->innerPosition().y()-P.y();
247  double dz = el1->innerPosition().z()-P.z();
248  double dist2 = dx*dx+dy*dy+dz*dz;
249 
250  if (dist2 > dcaPInnerHitCut2_) {
251  dist = -1;
252  if (debug_) cout << "track " << el1.key() << " dist to vertex " << sqrt(dist2) << endl;
253  return;
254  }
255 
256  dx = el2->innerPosition().x()-P.x();
257  dy = el2->innerPosition().y()-P.y();
258  dz = el2->innerPosition().z()-P.z();
259  dist2 = dx*dx+dy*dy+dz*dz;
260 
261  if (dist2 > dcaPInnerHitCut2_) {
262  dist = -1;
263  if (debug_) cout << "track " << el2.key() << " dist to vertex " << sqrt(dist2) << endl;
264  return;
265  }
266  */
267 }
GlobalPoint crossingPoint() const override
bool calculate(const TrajectoryStateOnSurface &sta, const TrajectoryStateOnSurface &stb) override
T x() const
Definition: PV3DBase.h:59
double dcaCut_
–— Algo parameters for the vertex finder -— ///
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::vector< GlobalTrajectoryParameters > eventTrackTrajectories_
size_t key() const
Definition: RefToBase.h:219
double primaryVertexCut2_
Do not reconstruct vertices wich are too close to the beam pipe.
float distance() const override
#define LogDebug(id)

◆ packLinks()

void PFDisplacedVertexCandidateFinder::packLinks ( reco::PFDisplacedVertexCandidate vertexCandidate)
private

Compute missing links in the displacedVertexCandidates (the recursive procedure does not build all links)

Definition at line 271 of file PFDisplacedVertexCandidateFinder.cc.

References reco::PFDisplacedVertexCandidate::elements(), testProducerWithPsetDescEmpty_cfi::i1, testProducerWithPsetDescEmpty_cfi::i2, link(), LogDebug, and reco::PFDisplacedVertexCandidate::setLink().

Referenced by findDisplacedVertexCandidates().

271  {
272  const vector<TrackBaseRef>& els = vertexCandidate.elements();
273 
274  //First Loop: update all link data
275  for (unsigned i1 = 0; i1 < els.size(); i1++) {
276  for (unsigned i2 = i1 + 1; i2 < els.size(); i2++) {
277  // no reflexive link
278  if (i1 == i2)
279  continue;
280 
281  double dist = -1;
282  GlobalPoint crossingPoint(0, 0, 0);
284 
285  link(els[i1], els[i2], dist, crossingPoint, linktest);
286  LogDebug("PFDisplacedVertexCandidateFinder")
287  << "Setting link between elements " << i1 << " key " << els[i1].key() << " and " << i2 << " key "
288  << els[i2].key() << " of dist =" << dist << " computed from link test " << linktest;
289 
290  if (dist > -0.5)
291  vertexCandidate.setLink(i1, i2, dist, crossingPoint, linktest);
292  }
293  }
294 }
void link(const reco::TrackBaseRef &el1, const reco::TrackBaseRef &el2, double &dist, GlobalPoint &crossing_point, reco::PFDisplacedVertexCandidate::VertexLinkTest &linktest)
Check whether 2 elements are linked and fill the link parameters.
void setLink(unsigned i1, unsigned i2, const float dist, const GlobalPoint &dcaPoint, const VertexLinkTest test=LINKTEST_DCA)
const std::vector< TrackBaseRef > & elements() const
#define LogDebug(id)

◆ setDebug()

void PFDisplacedVertexCandidateFinder::setDebug ( bool  debug)
inline

sets debug printout flag

Definition at line 53 of file PFDisplacedVertexCandidateFinder.h.

References debug, and debug_.

Referenced by PFDisplacedVertexCandidateProducer::PFDisplacedVertexCandidateProducer().

53 { debug_ = debug; }
#define debug
Definition: HDRShower.cc:19
bool debug_
if true, debug printouts activated

◆ setInput()

void PFDisplacedVertexCandidateFinder::setInput ( const edm::Handle< reco::TrackCollection > &  trackh,
const MagneticField magField 
)

Set the imput collection of tracks and calculate their trajectory parameters the Global Trajectory Parameters

Definition at line 50 of file PFDisplacedVertexCandidateFinder.cc.

References eventTracks_, eventTrackTrajectories_, edm::Ref< C, T, F >::get(), getGlobalTrajectoryParameters(), mps_fire::i, isSelected(), edm::HandleBase::isValid(), magField_, track_table_, and trackMask_.

Referenced by PFDisplacedVertexCandidateProducer::produce().

51  {
52  magField_ = magField;
53  trackMask_.clear();
54  trackMask_.resize(trackh->size());
56  eventTrackTrajectories_.resize(trackh->size());
57 
58  for (unsigned i = 0; i < trackMask_.size(); i++)
59  trackMask_[i] = true;
60 
61  eventTracks_.clear();
62  if (trackh.isValid()) {
63  for (unsigned i = 0; i < trackh->size(); i++) {
64  TrackRef tref(trackh, i);
65  TrackBaseRef tbref(tref);
66 
67  if (!isSelected(tbref)) {
68  trackMask_[i] = false;
69  continue;
70  }
71 
72  const Track* trk = tref.get();
73  eventTracks_.push_back(tbref);
75  }
76  }
78 }
GlobalTrajectoryParameters getGlobalTrajectoryParameters(const reco::Track *) const
--—— TOOLS --—— //
std::list< reco::TrackBaseRef > eventTracks_
The track refs.
edm::soa::AddColumns_t< EtaPhiTable, std::tuple< col::Pt > > PtEtaPhiTable
std::vector< GlobalTrajectoryParameters > eventTrackTrajectories_
bool isValid() const
Definition: HandleBase.h:70
bool isSelected(const reco::TrackBaseRef &trackref)

◆ setParameters()

void PFDisplacedVertexCandidateFinder::setParameters ( double  dcaCut,
double  primaryVertexCut,
double  dcaPInnerHitCut,
const edm::ParameterSet ps_trk 
)
inline

---—— Set different algo parameters —— ///

Sets algo parameters for the vertex candidate finder

Definition at line 42 of file PFDisplacedVertexCandidateFinder.h.

References particleFlowDisplacedVertexCandidate_cfi::dcaCut, dcaCut_, particleFlowDisplacedVertexCandidate_cfi::dcaPInnerHitCut, dcaPInnerHitCut2_, dxy_, edm::ParameterSet::getParameter(), nChi2_max_, particleFlowDisplacedVertex_cfi::primaryVertexCut, primaryVertexCut2_, pt_min_, and pt_min_prim_.

Referenced by PFDisplacedVertexCandidateProducer::PFDisplacedVertexCandidateProducer().

42  {
43  dcaCut_ = dcaCut;
46  nChi2_max_ = ps_trk.getParameter<double>("nChi2_max");
47  pt_min_ = ps_trk.getParameter<double>("pt_min");
48  pt_min_prim_ = ps_trk.getParameter<double>("pt_min_prim");
49  dxy_ = ps_trk.getParameter<double>("dxy");
50  }
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
double dcaCut_
–— Algo parameters for the vertex finder -— ///
double primaryVertexCut2_
Do not reconstruct vertices wich are too close to the beam pipe.
double dcaPInnerHitCut2_
Maximum distance between the DCA Point and the inner hit of the track.

◆ setPrimaryVertex()

void PFDisplacedVertexCandidateFinder::setPrimaryVertex ( edm::Handle< reco::VertexCollection mainVertexHandle,
edm::Handle< reco::BeamSpot beamSpotHandle 
)

Definition at line 33 of file PFDisplacedVertexCandidateFinder.cc.

References pwdgSkimBPark_cfi::beamSpot, edm::HandleBase::isValid(), pvtx_, reco::BeamSpot::x0(), reco::BeamSpot::y0(), and reco::BeamSpot::z0().

Referenced by PFDisplacedVertexCandidateProducer::produce().

34  {
35  const math::XYZPoint beamSpot = beamSpotHandle.isValid()
36  ? math::XYZPoint(beamSpotHandle->x0(), beamSpotHandle->y0(), beamSpotHandle->z0())
37  : math::XYZPoint(0, 0, 0);
38 
39  // The primary vertex is taken from the refitted list,
40  // if does not exist from the average offline beam spot position
41  // if does not exist (0,0,0) is used
42  pvtx_ = mainVertexHandle.isValid()
44  mainVertexHandle->begin()->x(), mainVertexHandle->begin()->y(), mainVertexHandle->begin()->z())
45  : beamSpot;
46 }
double x0() const
x coordinate
Definition: BeamSpot.h:61
double y0() const
y coordinate
Definition: BeamSpot.h:63
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
bool isValid() const
Definition: HandleBase.h:70
double z0() const
z coordinate
Definition: BeamSpot.h:65

◆ transferVertexCandidates()

std::unique_ptr<reco::PFDisplacedVertexCandidateCollection> PFDisplacedVertexCandidateFinder::transferVertexCandidates ( )
inline
Returns
auto_ptr to collection of DisplacedVertexCandidates

Definition at line 60 of file PFDisplacedVertexCandidateFinder.h.

References eostools::move(), and vertexCandidates_.

Referenced by PFDisplacedVertexCandidateProducer::produce().

60  {
62  }
std::unique_ptr< reco::PFDisplacedVertexCandidateCollection > vertexCandidates_
-----— Members -----— ///
def move(src, dest)
Definition: eostools.py:511

◆ vertexCandidates()

const std::unique_ptr<reco::PFDisplacedVertexCandidateCollection>& PFDisplacedVertexCandidateFinder::vertexCandidates ( ) const
inline

Definition at line 64 of file PFDisplacedVertexCandidateFinder.h.

References eostools::move(), and vertexCandidates_.

Referenced by operator<<().

64  {
66  }
std::unique_ptr< reco::PFDisplacedVertexCandidateCollection > vertexCandidates_
-----— Members -----— ///
def move(src, dest)
Definition: eostools.py:511

Friends And Related Function Documentation

◆ operator<<

std::ostream& operator<< ( std::ostream &  out,
const PFDisplacedVertexCandidateFinder a 
)
friend

Definition at line 333 of file PFDisplacedVertexCandidateFinder.cc.

333  {
334  if (!out)
335  return out;
336 
337  out << "====== Particle Flow Block Algorithm ======= ";
338  out << endl;
339  out << "number of unassociated elements : " << a.eventTracks_.size() << endl;
340  out << endl;
341 
342  out << " Tracks selection based on " << std::endl;
343  out << " pvtx_ = " << a.pvtx_ << std::endl;
344  out << " std::abs(dxy) < " << a.dxy_ << " and pt < " << a.pt_min_prim_ << std::endl;
345  out << " nChi2 < " << a.nChi2_max_ << " and pt < " << a.pt_min_ << std::endl;
346 
347  out << endl;
348 
349  for (PFDisplacedVertexCandidateFinder::IEC ie = a.eventTracks_.begin(); ie != a.eventTracks_.end(); ie++) {
350  double pt = (*ie).get()->pt();
351 
352  math::XYZPoint Pi = (*ie).get()->innerPosition();
353  math::XYZPoint Po = (*ie).get()->outerPosition();
354 
355  double innermost_radius = sqrt(Pi.x() * Pi.x() + Pi.y() * Pi.y() + Pi.z() * Pi.z());
356  double outermost_radius = sqrt(Po.x() * Po.x() + Po.y() * Po.y() + Po.z() * Po.z());
357  double innermost_rho = sqrt(Pi.x() * Pi.x() + Pi.y() * Pi.y());
358  double outermost_rho = sqrt(Po.x() * Po.x() + Po.y() * Po.y());
359 
360  out << "ie = " << (*ie).key() << " pt = " << pt << " innermost hit radius = " << innermost_radius
361  << " rho = " << innermost_rho << " outermost hit radius = " << outermost_radius << " rho = " << outermost_rho
362  << endl;
363  }
364 
365  const std::unique_ptr<reco::PFDisplacedVertexCandidateCollection>& vertexCandidates = std::move(a.vertexCandidates());
366 
367  if (!vertexCandidates.get()) {
368  out << "vertexCandidates already transfered" << endl;
369  } else {
370  out << "number of vertexCandidates : " << vertexCandidates->size() << endl;
371  out << endl;
372 
374  ib->Dump();
375  }
376 
377  return out;
378 }
const double Pi
const std::unique_ptr< reco::PFDisplacedVertexCandidateCollection > & vertexCandidates() const
T sqrt(T t)
Definition: SSEVec.h:19
reco::PFDisplacedVertexCandidateCollection::const_iterator IBC
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
std::list< reco::TrackBaseRef >::const_iterator IEC
double a
Definition: hdecay.h:119
def move(src, dest)
Definition: eostools.py:511
ib
Definition: cuy.py:661

Member Data Documentation

◆ dcaCut_

double PFDisplacedVertexCandidateFinder::dcaCut_
private

–— Algo parameters for the vertex finder -— ///

Distance of minimal approach below which two tracks are considered as linked together

Definition at line 126 of file PFDisplacedVertexCandidateFinder.h.

Referenced by link(), and setParameters().

◆ dcaPInnerHitCut2_

double PFDisplacedVertexCandidateFinder::dcaPInnerHitCut2_
private

Maximum distance between the DCA Point and the inner hit of the track.

Definition at line 130 of file PFDisplacedVertexCandidateFinder.h.

Referenced by setParameters().

◆ debug_

bool PFDisplacedVertexCandidateFinder::debug_
private

if true, debug printouts activated

Definition at line 151 of file PFDisplacedVertexCandidateFinder.h.

Referenced by setDebug().

◆ dxy_

double PFDisplacedVertexCandidateFinder::dxy_
private

Definition at line 139 of file PFDisplacedVertexCandidateFinder.h.

Referenced by goodPtResolution(), and setParameters().

◆ eventTracks_

std::list<reco::TrackBaseRef> PFDisplacedVertexCandidateFinder::eventTracks_
private

◆ eventTrackTrajectories_

std::vector<GlobalTrajectoryParameters> PFDisplacedVertexCandidateFinder::eventTrackTrajectories_
private

The Trajectories vector allow to calculate snd to store only once the track trajectory parameters

Definition at line 120 of file PFDisplacedVertexCandidateFinder.h.

Referenced by link(), and setInput().

◆ magField_

const MagneticField* PFDisplacedVertexCandidateFinder::magField_
private

Definition at line 154 of file PFDisplacedVertexCandidateFinder.h.

Referenced by getGlobalTrajectoryParameters(), and setInput().

◆ nChi2_max_

double PFDisplacedVertexCandidateFinder::nChi2_max_
private

Tracks preselection to reduce the combinatorics in PFDisplacedVertexCandidates this cuts are repeated then in a smarter way in the PFDisplacedVertexFinder be sure you are consistent between them

Definition at line 135 of file PFDisplacedVertexCandidateFinder.h.

Referenced by goodPtResolution(), and setParameters().

◆ primaryVertexCut2_

double PFDisplacedVertexCandidateFinder::primaryVertexCut2_
private

Do not reconstruct vertices wich are too close to the beam pipe.

Definition at line 128 of file PFDisplacedVertexCandidateFinder.h.

Referenced by link(), and setParameters().

◆ pt_min_

double PFDisplacedVertexCandidateFinder::pt_min_
private

Definition at line 136 of file PFDisplacedVertexCandidateFinder.h.

Referenced by goodPtResolution(), and setParameters().

◆ pt_min_prim_

double PFDisplacedVertexCandidateFinder::pt_min_prim_
private

Definition at line 138 of file PFDisplacedVertexCandidateFinder.h.

Referenced by goodPtResolution(), and setParameters().

◆ pvtx_

math::XYZPoint PFDisplacedVertexCandidateFinder::pvtx_
private

Definition at line 148 of file PFDisplacedVertexCandidateFinder.h.

Referenced by goodPtResolution(), and setPrimaryVertex().

◆ theMinimum_

TwoTrackMinimumDistance PFDisplacedVertexCandidateFinder::theMinimum_
private

Definition at line 146 of file PFDisplacedVertexCandidateFinder.h.

Referenced by link().

◆ track_table_

edm::soa::PtEtaPhiTable PFDisplacedVertexCandidateFinder::track_table_
private

Definition at line 156 of file PFDisplacedVertexCandidateFinder.h.

Referenced by link(), and setInput().

◆ trackMask_

Mask PFDisplacedVertexCandidateFinder::trackMask_
private

The trackMask allows to keep the information on the tracks which are still free and those which are already used or disabled.

Definition at line 117 of file PFDisplacedVertexCandidateFinder.h.

Referenced by associate(), and setInput().

◆ vertexCandidates_

std::unique_ptr<reco::PFDisplacedVertexCandidateCollection> PFDisplacedVertexCandidateFinder::vertexCandidates_
private

-----— Members -----— ///

Definition at line 109 of file PFDisplacedVertexCandidateFinder.h.

Referenced by findDisplacedVertexCandidates(), transferVertexCandidates(), and vertexCandidates().

◆ vertexCandidatesSize_

unsigned PFDisplacedVertexCandidateFinder::vertexCandidatesSize_
private

Max number of expected vertexCandidates in the event Used to allocate the memory and avoid multiple copy

Definition at line 143 of file PFDisplacedVertexCandidateFinder.h.

Referenced by findDisplacedVertexCandidates().