CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Private Attributes
l1tVertexFinder::VertexFinder Class Reference

#include <VertexFinder.h>

Classes

struct  SortTracksByPt
 
struct  SortTracksByZ0
 Helper structs/classes. More...
 

Public Member Functions

void adaptiveVertexReconstruction ()
 Adaptive Vertex Reconstruction algorithm. More...
 
void AdaptiveVertexReconstruction ()
 Vertexing algorithms. More...
 
void agglomerativeHierarchicalClustering ()
 Simple Merge Algorithm. More...
 
void AgglomerativeHierarchicalClustering ()
 Simple Merge Algorithm. More...
 
void associatePrimaryVertex (double trueZ0)
 Associate the primary vertex with the real one. More...
 
float centralDistance (RecoVertex<> cluster0, RecoVertex<> cluster1)
 Find distance between centres of two clusters. More...
 
float CentralDistance (RecoVertex<> cluster0, RecoVertex<> cluster1)
 Find distance between centres of two clusters. More...
 
void computeAndSetVertexParameters (RecoVertex<> &vertex, const std::vector< float > &bin_centers, const std::vector< unsigned int > &counts)
 Compute the vertex parameters. More...
 
void DBSCAN ()
 DBSCAN algorithm. More...
 
void fastHisto (const TrackerTopology *tTopo)
 Histogramming algorithm. More...
 
void FastHisto (const TrackerTopology *tTopo)
 Histogramming algorithm. More...
 
void fastHistoLooseAssociation ()
 High pT Vertex Algorithm. More...
 
void FastHistoLooseAssociation ()
 TDR histogramming algorithmn. More...
 
void findPrimaryVertex ()
 Find the primary vertex. More...
 
const FitTrackCollectionfitTracks () const
 Storage for tracks out of the L1 Track finder. More...
 
void GapClustering ()
 Gap Clustering Algorithm. More...
 
void HPV ()
 High pT Vertex Algorithm. More...
 
unsigned int IterationsPerTrack () const
 Accessors. More...
 
unsigned int iterationsPerTrack () const
 Number of iterations. More...
 
void Kmeans ()
 Kmeans Algorithm. More...
 
float maxDistance (RecoVertex<> cluster0, RecoVertex<> cluster1)
 Find maximum distance in two clusters of tracks. More...
 
float MaxDistance (RecoVertex<> cluster0, RecoVertex<> cluster1)
 Find maximum distance in two clusters of tracks. More...
 
float meanDistance (RecoVertex<> cluster0, RecoVertex<> cluster1)
 Find average distance in two clusters of tracks. More...
 
float MeanDistance (RecoVertex<> cluster0, RecoVertex<> cluster1)
 Find average distance in two clusters of tracks. More...
 
float minDistance (RecoVertex<> cluster0, RecoVertex<> cluster1)
 Find minimum distance in two clusters of tracks. More...
 
float MinDistance (RecoVertex<> cluster0, RecoVertex<> cluster1)
 Find minimum distance in two clusters of tracks. More...
 
unsigned int numInputTracks () const
 Storage for tracks out of the L1 Track finder. More...
 
unsigned int NumIterations () const
 Number of iterations. More...
 
unsigned int numIterations () const
 Number of iterations. More...
 
unsigned int numVertices () const
 Number of reconstructed vertices. More...
 
RecoVertex primaryVertex () const
 Reconstructed Primary Vertex. More...
 
unsigned int primaryVertexId () const
 Reconstructed Primary Vertex Id. More...
 
void PVR ()
 Principal Vertex Reconstructor algorithm. More...
 
void SortVerticesInPt ()
 Sort vertices in pT. More...
 
void SortVerticesInZ0 ()
 Sort vertices in z. More...
 
template<typename ForwardIterator , typename T >
void strided_iota (ForwardIterator first, ForwardIterator last, T value, T stride)
 
 VertexFinder (FitTrackCollection &fitTracks, const AlgoSettings &settings)
 Constructor and destructor. More...
 
const std::vector< RecoVertex<> > & vertices () const
 Returns the z positions of the reconstructed primary vertices. More...
 
 ~VertexFinder ()
 

Private Attributes

FitTrackCollection fitTracks_
 
unsigned int iterations_
 
unsigned int numMatchedVertices_
 
unsigned int pv_index_
 
const AlgoSettingssettings_
 
std::vector< RecoVertex<> > vertices_
 

Detailed Description

Definition at line 21 of file VertexFinder.h.

Constructor & Destructor Documentation

◆ VertexFinder()

l1tVertexFinder::VertexFinder::VertexFinder ( FitTrackCollection fitTracks,
const AlgoSettings settings 
)
inline

Constructor and destructor.

Definition at line 24 of file VertexFinder.h.

24  {
26  settings_ = &settings;
27  }

References fitTracks(), fitTracks_, and settings_.

◆ ~VertexFinder()

l1tVertexFinder::VertexFinder::~VertexFinder ( )
inline

Definition at line 28 of file VertexFinder.h.

28 {}

Member Function Documentation

◆ adaptiveVertexReconstruction()

void l1tVertexFinder::VertexFinder::adaptiveVertexReconstruction ( )

Adaptive Vertex Reconstruction algorithm.

Definition at line 306 of file VertexFinder.cc.

306  {
307  bool start = true;
308  iterations_ = 0;
309  FitTrackCollection discardedTracks, acceptedTracks, discardedTracks2;
310 
311  for (const L1Track& track : fitTracks_) {
312  discardedTracks.push_back(track);
313  }
314 
315  while (discardedTracks.size() >= settings_->vx_minTracks() or start == true) {
316  start = false;
317  discardedTracks2.clear();
318  FitTrackCollection::iterator it = discardedTracks.begin();
319  const L1Track track = *it;
320  acceptedTracks.push_back(track);
321  float z0sum = track.z0();
322 
323  for (FitTrackCollection::iterator it2 = discardedTracks.begin(); it2 < discardedTracks.end(); ++it2) {
324  if (it2 != it) {
325  const L1Track secondTrack = *it2;
326  // Calculate new vertex z0 adding this track
327  z0sum += secondTrack.z0();
328  float z0vertex = z0sum / (acceptedTracks.size() + 1);
329  // Calculate chi2 of new vertex
330  float chi2 = 0.;
331  float dof = 0.;
332  for (const L1Track& accTrack : acceptedTracks) {
333  iterations_++;
334  float Residual = accTrack.z0() - z0vertex;
335  if (std::abs(accTrack.eta()) < 1.2)
336  Residual /= 0.1812; // Assumed z0 resolution
337  else if (std::abs(accTrack.eta()) >= 1.2 && std::abs(accTrack.eta()) < 1.6)
338  Residual /= 0.2912;
339  else if (std::abs(accTrack.eta()) >= 1.6 && std::abs(accTrack.eta()) < 2.)
340  Residual /= 0.4628;
341  else
342  Residual /= 0.65;
343 
344  chi2 += Residual * Residual;
345  dof = (acceptedTracks.size() + 1) * 2 - 1;
346  }
347  if (chi2 / dof < settings_->vx_chi2cut()) {
348  acceptedTracks.push_back(secondTrack);
349  } else {
350  discardedTracks2.push_back(secondTrack);
351  z0sum -= secondTrack.z0();
352  }
353  }
354  }
355 
356  if (acceptedTracks.size() >= settings_->vx_minTracks()) {
358  for (const L1Track& track : acceptedTracks) {
359  vertex.insert(&track);
360  }
362  vertices_.push_back(vertex);
363  }
364 
365  acceptedTracks.clear();
366  discardedTracks.clear();
367  discardedTracks = discardedTracks2;
368  }
369  }

References funct::abs(), hltPixelTracks_cff::chi2, or, HLT_FULL_cff::track, bphysicsOniaDQM_cfi::vertex, and l1tVertexFinder::L1Track::z0().

Referenced by VertexProducer::produce().

◆ AdaptiveVertexReconstruction()

void l1tVertexFinder::VertexFinder::AdaptiveVertexReconstruction ( )

Vertexing algorithms.

Adaptive Vertex Reconstruction algorithm

◆ agglomerativeHierarchicalClustering()

void l1tVertexFinder::VertexFinder::agglomerativeHierarchicalClustering ( )

Simple Merge Algorithm.

Definition at line 124 of file VertexFinder.cc.

124  {
125  iterations_ = 0;
126 
127  sort(fitTracks_.begin(), fitTracks_.end(), SortTracksByZ0());
128 
129  std::vector<RecoVertex<>> vClusters;
130  vClusters.resize(fitTracks_.size());
131 
132  for (unsigned int i = 0; i < fitTracks_.size(); ++i) {
133  vClusters[i].insert(&fitTracks_[i]);
134  // iterations_++;
135  }
136 
137  while (true) {
138  float MinimumScore = 9999;
139 
140  unsigned int clusterId0 = 0;
141  unsigned int clusterId1 = 0;
142  for (unsigned int iClust = 0; iClust < vClusters.size() - 1; iClust++) {
143  iterations_++;
144 
145  float M = 0;
146  if (settings_->vx_distanceType() == 0)
147  M = maxDistance(vClusters[iClust], vClusters[iClust + 1]);
148  else if (settings_->vx_distanceType() == 1)
149  M = minDistance(vClusters[iClust], vClusters[iClust + 1]);
150  else if (settings_->vx_distanceType() == 2)
151  M = meanDistance(vClusters[iClust], vClusters[iClust + 1]);
152  else
153  M = centralDistance(vClusters[iClust], vClusters[iClust + 1]);
154 
155  if (M < MinimumScore) {
156  MinimumScore = M;
157  clusterId0 = iClust;
158  clusterId1 = iClust + 1;
159  }
160  }
161  if (MinimumScore > settings_->vx_distance() or vClusters[clusterId1].tracks().empty())
162  break;
163  for (const L1Track* track : vClusters[clusterId0].tracks()) {
164  vClusters[clusterId1].insert(track);
165  }
166  vClusters.erase(vClusters.begin() + clusterId0);
167  }
168 
169  for (RecoVertex clust : vClusters) {
170  if (clust.numTracks() >= settings_->vx_minTracks()) {
171  computeAndSetVertexParameters(clust, {}, {});
172  vertices_.push_back(clust);
173  }
174  }
175  }

References mps_fire::i, particleFlowClusterHGC_cfi::maxDistance, or, jetUpdater_cfi::sort, HLT_FULL_cff::track, and tracks.

Referenced by VertexProducer::produce().

◆ AgglomerativeHierarchicalClustering()

void l1tVertexFinder::VertexFinder::AgglomerativeHierarchicalClustering ( )

Simple Merge Algorithm.

◆ associatePrimaryVertex()

void l1tVertexFinder::VertexFinder::associatePrimaryVertex ( double  trueZ0)

Associate the primary vertex with the real one.

Definition at line 452 of file VertexFinder.cc.

452  {
453  double distance = 999.;
454  for (unsigned int id = 0; id < vertices_.size(); ++id) {
455  if (std::abs(trueZ0 - vertices_[id].z0()) < distance) {
456  distance = std::abs(trueZ0 - vertices_[id].z0());
457  pv_index_ = id;
458  }
459  }
460  }

References funct::abs(), HLT_FULL_cff::distance, triggerObjects_cff::id, and HLTMuonOfflineAnalyzer_cfi::z0.

◆ centralDistance()

float l1tVertexFinder::VertexFinder::centralDistance ( RecoVertex<>  cluster0,
RecoVertex<>  cluster1 
)

Find distance between centres of two clusters.

Definition at line 117 of file VertexFinder.cc.

117  {
118  computeAndSetVertexParameters(cluster0, {}, {});
119  computeAndSetVertexParameters(cluster1, {}, {});
120  float distance = std::abs(cluster0.z0() - cluster1.z0());
121  return distance;
122  }

References funct::abs(), HLT_FULL_cff::distance, and l1tVertexFinder::RecoVertex< T >::z0().

◆ CentralDistance()

float l1tVertexFinder::VertexFinder::CentralDistance ( RecoVertex<>  cluster0,
RecoVertex<>  cluster1 
)

Find distance between centres of two clusters.

◆ computeAndSetVertexParameters()

void l1tVertexFinder::VertexFinder::computeAndSetVertexParameters ( RecoVertex<> &  vertex,
const std::vector< float > &  bin_centers,
const std::vector< unsigned int > &  counts 
)

Compute the vertex parameters.

Definition at line 7 of file VertexFinder.cc.

9  {
10  double pt = 0.;
11  double z0 = 0.;
12  double z0width = 0.;
13  bool highPt = false;
14  double highestPt = 0.;
15  unsigned int numHighPtTracks = 0;
16 
17  float SumZ = 0.;
18  float z0square = 0.;
19  float trackPt = 0.;
20 
21  std::vector<double> bin_pt(bin_centers.size(), 0.0);
22  unsigned int ibin = 0;
23  unsigned int itrack = 0;
24 
25  for (const L1Track* track : vertex.tracks()) {
26  itrack++;
27  trackPt = track->pt();
28  if (trackPt > settings_->vx_TrackMaxPt()) {
29  highPt = true;
30  numHighPtTracks++;
31  highestPt = (trackPt > highestPt) ? trackPt : highestPt;
32  if (settings_->vx_TrackMaxPtBehavior() == 0)
33  continue; // ignore this track
34  else if (settings_->vx_TrackMaxPtBehavior() == 1)
35  trackPt = settings_->vx_TrackMaxPt(); // saturate
36  }
37 
39  if (bin_centers.empty() && counts.empty()) {
40  SumZ += track->z0() * std::pow(trackPt, settings_->vx_weightedmean());
41  z0square += track->z0() * track->z0();
42  } else {
43  bin_pt[ibin] += std::pow(trackPt, settings_->vx_weightedmean());
44  if (itrack == counts[ibin]) {
45  SumZ += bin_centers[ibin] * bin_pt[ibin];
46  z0square += bin_centers[ibin] * bin_centers[ibin];
47  itrack = 0;
48  ibin++;
49  }
50  }
51  }
52 
53  z0 = SumZ / ((settings_->vx_weightedmean() > 0) ? pt : vertex.numTracks());
54  z0square /= vertex.numTracks();
55  z0width = sqrt(std::abs(z0 * z0 - z0square));
56 
57  vertex.setParameters(pt, z0, z0width, highPt, numHighPtTracks, highestPt);
58  }

References funct::abs(), dqmiodumpmetadata::counts, funct::pow(), DiDispStaMuonMonitor_cfi::pt, mathSSE::sqrt(), HLT_FULL_cff::track, listHistos::trackPt, bphysicsOniaDQM_cfi::vertex, and HLTMuonOfflineAnalyzer_cfi::z0.

◆ DBSCAN()

void l1tVertexFinder::VertexFinder::DBSCAN ( )

DBSCAN algorithm.

Definition at line 177 of file VertexFinder.cc.

177  {
178  // std::vector<RecoVertex> vClusters;
179  std::vector<unsigned int> visited;
180  std::vector<unsigned int> saved;
181 
182  sort(fitTracks_.begin(), fitTracks_.end(), SortTracksByPt());
183  iterations_ = 0;
184 
185  for (unsigned int i = 0; i < fitTracks_.size(); ++i) {
186  if (find(visited.begin(), visited.end(), i) != visited.end())
187  continue;
188 
189  // if(fitTracks_[i]->pt()>10.){
190  visited.push_back(i);
191  std::set<unsigned int> neighbourTrackIds;
192  unsigned int numDensityTracks = 0;
193  if (fitTracks_[i].pt() > settings_->vx_dbscan_pt())
194  numDensityTracks++;
195  else
196  continue;
197  for (unsigned int k = 0; k < fitTracks_.size(); ++k) {
198  iterations_++;
199  if (k != i and std::abs(fitTracks_[k].z0() - fitTracks_[i].z0()) < settings_->vx_distance()) {
200  neighbourTrackIds.insert(k);
201  if (fitTracks_[k].pt() > settings_->vx_dbscan_pt()) {
202  numDensityTracks++;
203  }
204  }
205  }
206 
207  if (numDensityTracks < settings_->vx_dbscan_mintracks()) {
208  // mark track as noise
209  } else {
211  vertex.insert(&fitTracks_[i]);
212  saved.push_back(i);
213  for (unsigned int id : neighbourTrackIds) {
214  if (find(visited.begin(), visited.end(), id) == visited.end()) {
215  visited.push_back(id);
216  std::vector<unsigned int> neighbourTrackIds2;
217  for (unsigned int k = 0; k < fitTracks_.size(); ++k) {
218  iterations_++;
219  if (std::abs(fitTracks_[k].z0() - fitTracks_[id].z0()) < settings_->vx_distance()) {
220  neighbourTrackIds2.push_back(k);
221  }
222  }
223 
224  // if (neighbourTrackIds2.size() >= settings_->vx_minTracks()) {
225  for (unsigned int id2 : neighbourTrackIds2) {
226  neighbourTrackIds.insert(id2);
227  }
228  // }
229  }
230  if (find(saved.begin(), saved.end(), id) == saved.end())
231  vertex.insert(&fitTracks_[id]);
232  }
234  if (vertex.numTracks() >= settings_->vx_minTracks())
235  vertices_.push_back(vertex);
236  }
237  // }
238  }
239  }

References funct::abs(), spr::find(), mps_fire::i, triggerObjects_cff::id, globals_cff::id2, dqmdumpme::k, DiDispStaMuonMonitor_cfi::pt, jetUpdater_cfi::sort, bphysicsOniaDQM_cfi::vertex, class-composition::visited, and HLTMuonOfflineAnalyzer_cfi::z0.

Referenced by VertexProducer::produce().

◆ fastHisto()

void l1tVertexFinder::VertexFinder::fastHisto ( const TrackerTopology tTopo)

Histogramming algorithm.

Definition at line 486 of file VertexFinder.cc.

486  {
487  // Create the histogram
488  int nbins =
490  std::vector<RecoVertex<>> hist(nbins);
491  std::vector<RecoVertex<>> sums(nbins - settings_->vx_windowSize());
492  std::vector<float> bounds(nbins + 1);
493  strided_iota(std::begin(bounds),
494  std::next(std::begin(bounds), nbins + 1),
497 
498  // Loop over the tracks and fill the histogram
499  for (const L1Track& track : fitTracks_) {
500  if ((track.z0() < settings_->vx_histogram_min()) || (track.z0() > settings_->vx_histogram_max()))
501  continue;
502  if (track.getTTTrackPtr()->chi2() > settings_->vx_TrackMaxChi2())
503  continue;
504  if (track.pt() < settings_->vx_TrackMinPt())
505  continue;
506 
507  // Get the number of stubs and the number of stubs in PS layers
508  float nPS = 0., nstubs = 0;
509 
510  // Get pointers to stubs associated to the L1 track
511  const auto& theStubs = track.getTTTrackPtr()->getStubRefs();
512  if (theStubs.empty()) {
513  edm::LogWarning("VertexFinder") << "fastHisto::Could not retrieve the vector of stubs.";
514  continue;
515  }
516 
517  // Loop over the stubs
518  for (const auto& stub : theStubs) {
519  nstubs++;
520  bool isPS = false;
521  DetId detId(stub->getDetId());
522  if (detId.det() == DetId::Detector::Tracker) {
523  if (detId.subdetId() == StripSubdetector::TOB && tTopo->tobLayer(detId) <= 3)
524  isPS = true;
525  else if (detId.subdetId() == StripSubdetector::TID && tTopo->tidRing(detId) <= 9)
526  isPS = true;
527  }
528  if (isPS)
529  nPS++;
530  } // End loop over stubs
531  if (nstubs < settings_->vx_NStubMin())
532  continue;
533  if (nPS < settings_->vx_NStubPSMin())
534  continue;
535 
536  // Quality cuts, may need to be re-optimized
537  int trk_nstub = (int)track.getTTTrackPtr()->getStubRefs().size();
538  float chi2dof = track.getTTTrackPtr()->chi2() / (2 * trk_nstub - 4);
539 
540  if (settings_->vx_DoPtComp()) {
541  float trk_consistency = track.getTTTrackPtr()->stubPtConsistency();
542  if (trk_nstub == 4) {
543  if (std::abs(track.eta()) < 2.2 && trk_consistency > 10)
544  continue;
545  else if (std::abs(track.eta()) > 2.2 && chi2dof > 5.0)
546  continue;
547  }
548  }
549  if (settings_->vx_DoTightChi2()) {
550  if (track.pt() > 10.0 && chi2dof > 5.0)
551  continue;
552  }
553 
554  // Assign the track to the correct vertex
555  auto upper_bound = std::lower_bound(bounds.begin(), bounds.end(), track.z0());
556  int index = std::distance(bounds.begin(), upper_bound) - 1;
557  hist.at(index).insert(&track);
558  } // end loop over tracks
559 
560  // Compute the sums
561  // sliding windows ... sum_i_i+(w-1) where i in (0,nbins-w) and w is the window size
562  std::vector<float> bin_centers(settings_->vx_windowSize(), 0.0);
563  std::vector<unsigned int> counts(settings_->vx_windowSize(), 0);
564  for (unsigned int i = 0; i < sums.size(); i++) {
565  for (unsigned int j = 0; j < settings_->vx_windowSize(); j++) {
566  bin_centers[j] = settings_->vx_histogram_min() + ((i + j) * settings_->vx_histogram_binwidth()) +
567  (0.5 * settings_->vx_histogram_binwidth());
568  counts[j] = hist.at(i + j).numTracks();
569  sums.at(i) += hist.at(i + j);
570  }
571  computeAndSetVertexParameters(sums.at(i), bin_centers, counts);
572  }
573 
574  // Find the maxima of the sums
575  float sigma_max = -999;
576  int imax = -999;
577  std::vector<int> found;
578  found.reserve(settings_->vx_nvtx());
579  for (unsigned int ivtx = 0; ivtx < settings_->vx_nvtx(); ivtx++) {
580  sigma_max = -999;
581  imax = -999;
582  for (unsigned int i = 0; i < sums.size(); i++) {
583  // Skip this window if it will already be returned
584  if (find(found.begin(), found.end(), i) != found.end())
585  continue;
586  if (sums.at(i).pt() > sigma_max) {
587  sigma_max = sums.at(i).pt();
588  imax = i;
589  }
590  }
591 
592  found.push_back(imax);
593  vertices_.emplace_back(sums.at(imax));
594  }
595  pv_index_ = 0;
596  } // end of fastHisto

References funct::abs(), reco::ceil(), dqmiodumpmetadata::counts, HLT_FULL_cff::distance, spr::find(), newFWLiteAna::found, gpuVertexFinder::hist, mps_fire::i, createfilelist::int, dqmiolumiharvest::j, pfDeepBoostedJetPreprocessParams_cfi::lower_bound, LaserClient_cfi::nbins, GetRecoTauVFromDQM_MC_cff::next, StripSubdetector::TID, TrackerTopology::tidRing(), StripSubdetector::TOB, TrackerTopology::tobLayer(), HLT_FULL_cff::track, align::Tracker, and pfDeepBoostedJetPreprocessParams_cfi::upper_bound.

Referenced by VertexProducer::produce().

◆ FastHisto()

void l1tVertexFinder::VertexFinder::FastHisto ( const TrackerTopology tTopo)

Histogramming algorithm.

◆ fastHistoLooseAssociation()

void l1tVertexFinder::VertexFinder::fastHistoLooseAssociation ( )

High pT Vertex Algorithm.

Definition at line 462 of file VertexFinder.cc.

462  {
463  float vxPt = 0.;
464  RecoVertex leading_vertex;
465 
466  for (float z = settings_->vx_histogram_min(); z < settings_->vx_histogram_max();
469  for (const L1Track& track : fitTracks_) {
470  if (std::abs(z - track.z0()) < settings_->vx_width()) {
471  vertex.insert(&track);
472  }
473  }
475  vertex.setZ0(z);
476  if (vertex.pt() > vxPt) {
477  leading_vertex = vertex;
478  vxPt = vertex.pt();
479  }
480  }
481 
482  vertices_.emplace_back(leading_vertex);
483  pv_index_ = 0; // by default fastHistoLooseAssociation algorithm finds only hard PV
484  } // end of fastHistoLooseAssociation

References funct::abs(), HLT_FULL_cff::track, and bphysicsOniaDQM_cfi::vertex.

Referenced by VertexProducer::produce().

◆ FastHistoLooseAssociation()

void l1tVertexFinder::VertexFinder::FastHistoLooseAssociation ( )

TDR histogramming algorithmn.

◆ findPrimaryVertex()

void l1tVertexFinder::VertexFinder::findPrimaryVertex ( )

Find the primary vertex.

Definition at line 440 of file VertexFinder.cc.

440  {
441  double vertexPt = 0;
442  pv_index_ = 0;
443 
444  for (unsigned int i = 0; i < vertices_.size(); ++i) {
445  if (vertices_[i].pt() > vertexPt) {
446  vertexPt = vertices_[i].pt();
447  pv_index_ = i;
448  }
449  }
450  }

References mps_fire::i, and DiDispStaMuonMonitor_cfi::pt.

Referenced by VertexProducer::produce().

◆ fitTracks()

const FitTrackCollection& l1tVertexFinder::VertexFinder::fitTracks ( ) const
inline

Storage for tracks out of the L1 Track finder.

Definition at line 65 of file VertexFinder.h.

65 { return fitTracks_; }

References fitTracks_.

Referenced by VertexFinder().

◆ GapClustering()

void l1tVertexFinder::VertexFinder::GapClustering ( )

Gap Clustering Algorithm.

Definition at line 60 of file VertexFinder.cc.

60  {
61  sort(fitTracks_.begin(), fitTracks_.end(), SortTracksByZ0());
62  iterations_ = 0;
64  for (unsigned int i = 0; i < fitTracks_.size(); ++i) {
65  Vertex.insert(&fitTracks_[i]);
66  iterations_++;
67  if ((i + 1 < fitTracks_.size() and fitTracks_[i + 1].z0() - fitTracks_[i].z0() > settings_->vx_distance()) or
68  i == fitTracks_.size() - 1) {
69  if (Vertex.numTracks() >= settings_->vx_minTracks()) {
71  vertices_.push_back(Vertex);
72  }
73  Vertex.clear();
74  }
75  }
76  }

References mps_fire::i, l1tVertexFinder::Vertex::insert(), l1tVertexFinder::Vertex::numTracks(), or, jetUpdater_cfi::sort, and HltBtagValidation_cff::Vertex.

Referenced by VertexProducer::produce().

◆ HPV()

void l1tVertexFinder::VertexFinder::HPV ( )

High pT Vertex Algorithm.

Definition at line 371 of file VertexFinder.cc.

371  {
372  iterations_ = 0;
373  sort(fitTracks_.begin(), fitTracks_.end(), SortTracksByPt());
374 
376  bool first = true;
377  float z = 99.;
378  for (const L1Track& track : fitTracks_) {
379  if (track.pt() < 50.) {
380  if (first) {
381  first = false;
382  z = track.z0();
383  vertex.insert(&track);
384  } else {
385  if (std::abs(track.z0() - z) < settings_->vx_distance())
386  vertex.insert(&track);
387  }
388  }
389  }
390 
392  vertex.setZ0(z);
393  vertices_.push_back(vertex);
394  }

References funct::abs(), first, jetUpdater_cfi::sort, HLT_FULL_cff::track, and bphysicsOniaDQM_cfi::vertex.

Referenced by VertexProducer::produce().

◆ IterationsPerTrack()

unsigned int l1tVertexFinder::VertexFinder::IterationsPerTrack ( ) const
inline

Accessors.

Number of iterations

Definition at line 44 of file VertexFinder.h.

44 { return double(iterations_) / double(fitTracks_.size()); }

References fitTracks_, and iterations_.

◆ iterationsPerTrack()

unsigned int l1tVertexFinder::VertexFinder::iterationsPerTrack ( ) const
inline

Number of iterations.

Definition at line 104 of file VertexFinder.h.

104 { return double(iterations_) / double(fitTracks_.size()); }

References fitTracks_, and iterations_.

◆ Kmeans()

void l1tVertexFinder::VertexFinder::Kmeans ( )

Kmeans Algorithm.

Definition at line 396 of file VertexFinder.cc.

396  {
397  unsigned int NumberOfClusters = settings_->vx_kmeans_nclusters();
398 
399  vertices_.resize(NumberOfClusters);
400  float ClusterSeparation = 30. / NumberOfClusters;
401 
402  for (unsigned int i = 0; i < NumberOfClusters; ++i) {
403  float ClusterCentre = -15. + ClusterSeparation * (i + 0.5);
404  vertices_[i].setZ0(ClusterCentre);
405  }
406  unsigned int iterations = 0;
407  // Initialise Clusters
408  while (iterations < settings_->vx_kmeans_iterations()) {
409  for (unsigned int i = 0; i < NumberOfClusters; ++i) {
410  vertices_[i].clear();
411  }
412 
413  for (const L1Track& track : fitTracks_) {
414  float distance = 9999;
415  if (iterations == settings_->vx_kmeans_iterations() - 3)
416  distance = settings_->vx_distance() * 2;
417  if (iterations > settings_->vx_kmeans_iterations() - 3)
419  unsigned int ClusterId;
420  bool NA = true;
421  for (unsigned int id = 0; id < NumberOfClusters; ++id) {
422  if (std::abs(track.z0() - vertices_[id].z0()) < distance) {
423  distance = std::abs(track.z0() - vertices_[id].z0());
424  ClusterId = id;
425  NA = false;
426  }
427  }
428  if (!NA) {
429  vertices_[ClusterId].insert(&track);
430  }
431  }
432  for (unsigned int i = 0; i < NumberOfClusters; ++i) {
433  if (vertices_[i].numTracks() >= settings_->vx_minTracks())
435  }
436  iterations++;
437  }
438  }

References funct::abs(), HLT_FULL_cff::distance, mps_fire::i, triggerObjects_cff::id, fastsim::Constants::NA, and HLT_FULL_cff::track.

Referenced by VertexProducer::produce().

◆ maxDistance()

float l1tVertexFinder::VertexFinder::maxDistance ( RecoVertex<>  cluster0,
RecoVertex<>  cluster1 
)

Find maximum distance in two clusters of tracks.

Definition at line 78 of file VertexFinder.cc.

78  {
79  float distance = 0;
80  for (const L1Track* track0 : cluster0.tracks()) {
81  for (const L1Track* track1 : cluster1.tracks()) {
82  if (std::abs(track0->z0() - track1->z0()) > distance) {
83  distance = std::abs(track0->z0() - track1->z0());
84  }
85  }
86  }
87 
88  return distance;
89  }

References funct::abs(), HLT_FULL_cff::distance, and l1tVertexFinder::RecoVertex< T >::tracks().

◆ MaxDistance()

float l1tVertexFinder::VertexFinder::MaxDistance ( RecoVertex<>  cluster0,
RecoVertex<>  cluster1 
)

Find maximum distance in two clusters of tracks.

◆ meanDistance()

float l1tVertexFinder::VertexFinder::meanDistance ( RecoVertex<>  cluster0,
RecoVertex<>  cluster1 
)

Find average distance in two clusters of tracks.

Definition at line 104 of file VertexFinder.cc.

104  {
105  float distanceSum = 0;
106 
107  for (const L1Track* track0 : cluster0.tracks()) {
108  for (const L1Track* track1 : cluster1.tracks()) {
109  distanceSum += std::abs(track0->z0() - track1->z0());
110  }
111  }
112 
113  float distance = distanceSum / (cluster0.numTracks() * cluster1.numTracks());
114  return distance;
115  }

References funct::abs(), HLT_FULL_cff::distance, l1tVertexFinder::RecoVertex< T >::numTracks(), and l1tVertexFinder::RecoVertex< T >::tracks().

◆ MeanDistance()

float l1tVertexFinder::VertexFinder::MeanDistance ( RecoVertex<>  cluster0,
RecoVertex<>  cluster1 
)

Find average distance in two clusters of tracks.

◆ minDistance()

float l1tVertexFinder::VertexFinder::minDistance ( RecoVertex<>  cluster0,
RecoVertex<>  cluster1 
)

Find minimum distance in two clusters of tracks.

Definition at line 91 of file VertexFinder.cc.

91  {
92  float distance = 9999;
93  for (const L1Track* track0 : cluster0.tracks()) {
94  for (const L1Track* track1 : cluster1.tracks()) {
95  if (std::abs(track0->z0() - track1->z0()) < distance) {
96  distance = std::abs(track0->z0() - track1->z0());
97  }
98  }
99  }
100 
101  return distance;
102  }

References funct::abs(), HLT_FULL_cff::distance, and l1tVertexFinder::RecoVertex< T >::tracks().

◆ MinDistance()

float l1tVertexFinder::VertexFinder::MinDistance ( RecoVertex<>  cluster0,
RecoVertex<>  cluster1 
)

Find minimum distance in two clusters of tracks.

◆ numInputTracks()

unsigned int l1tVertexFinder::VertexFinder::numInputTracks ( ) const
inline

Storage for tracks out of the L1 Track finder.

Definition at line 46 of file VertexFinder.h.

46 { return fitTracks_.size(); }

References fitTracks_.

◆ NumIterations()

unsigned int l1tVertexFinder::VertexFinder::NumIterations ( ) const
inline

Number of iterations.

Definition at line 48 of file VertexFinder.h.

48 { return iterations_; }

References iterations_.

◆ numIterations()

unsigned int l1tVertexFinder::VertexFinder::numIterations ( ) const
inline

Number of iterations.

Definition at line 102 of file VertexFinder.h.

102 { return iterations_; }

References iterations_.

◆ numVertices()

unsigned int l1tVertexFinder::VertexFinder::numVertices ( ) const
inline

Number of reconstructed vertices.

Definition at line 50 of file VertexFinder.h.

50 { return vertices_.size(); }

References vertices_.

◆ primaryVertex()

RecoVertex l1tVertexFinder::VertexFinder::primaryVertex ( ) const
inline

Reconstructed Primary Vertex.

Definition at line 52 of file VertexFinder.h.

52  {
53  if (pv_index_ < vertices_.size())
54  return vertices_[pv_index_];
55  else {
56  edm::LogWarning("VertexFinder") << "PrimaryVertex::No Primary Vertex has been found.";
57  return RecoVertex<>();
58  }
59  }

References pv_index_, and vertices_.

◆ primaryVertexId()

unsigned int l1tVertexFinder::VertexFinder::primaryVertexId ( ) const
inline

Reconstructed Primary Vertex Id.

Definition at line 61 of file VertexFinder.h.

61 { return pv_index_; }

References pv_index_.

◆ PVR()

void l1tVertexFinder::VertexFinder::PVR ( )

Principal Vertex Reconstructor algorithm.

Definition at line 241 of file VertexFinder.cc.

241  {
242  bool start = true;
243  FitTrackCollection discardedTracks, acceptedTracks;
244  iterations_ = 0;
245  for (const L1Track& track : fitTracks_) {
246  acceptedTracks.push_back(track);
247  }
248 
249  while (discardedTracks.size() >= settings_->vx_minTracks() or start == true) {
250  start = false;
251  bool removing = true;
252  discardedTracks.clear();
253  while (removing) {
254  float oldDistance = 0.;
255 
256  if (settings_->debug() > 2)
257  edm::LogInfo("VertexFinder") << "PVR::AcceptedTracks " << acceptedTracks.size();
258 
259  float z0start = 0;
260  for (const L1Track& track : acceptedTracks) {
261  z0start += track.z0();
262  iterations_++;
263  }
264 
265  z0start /= acceptedTracks.size();
266  if (settings_->debug() > 2)
267  edm::LogInfo("VertexFinder") << "PVR::z0 vertex " << z0start;
268  FitTrackCollection::iterator badTrackIt = acceptedTracks.end();
269  removing = false;
270 
271  for (FitTrackCollection::iterator it = acceptedTracks.begin(); it < acceptedTracks.end(); ++it) {
272  const L1Track* track = &*it;
273  iterations_++;
274  if (std::abs(track->z0() - z0start) > settings_->vx_distance() and
275  std::abs(track->z0() - z0start) > oldDistance) {
276  badTrackIt = it;
277  oldDistance = std::abs(track->z0() - z0start);
278  removing = true;
279  }
280  }
281 
282  if (removing) {
283  const L1Track badTrack = *badTrackIt;
284  if (settings_->debug() > 2)
285  edm::LogInfo("VertexFinder") << "PVR::Removing track " << badTrack.z0() << " at distance " << oldDistance;
286  discardedTracks.push_back(badTrack);
287  acceptedTracks.erase(badTrackIt);
288  }
289  }
290 
291  if (acceptedTracks.size() >= settings_->vx_minTracks()) {
293  for (const L1Track& track : acceptedTracks) {
294  vertex.insert(&track);
295  }
297  vertices_.push_back(vertex);
298  }
299  if (settings_->debug() > 2)
300  edm::LogInfo("VertexFinder") << "PVR::DiscardedTracks size " << discardedTracks.size();
301  acceptedTracks.clear();
302  acceptedTracks = discardedTracks;
303  }
304  }

References funct::abs(), or, HLT_FULL_cff::track, bphysicsOniaDQM_cfi::vertex, and l1tVertexFinder::L1Track::z0().

Referenced by VertexProducer::produce().

◆ SortVerticesInPt()

void l1tVertexFinder::VertexFinder::SortVerticesInPt ( )
inline

Sort vertices in pT.

Definition at line 90 of file VertexFinder.h.

90  {
91  std::sort(vertices_.begin(), vertices_.end(), [](const RecoVertex<>& vertex0, const RecoVertex<>& vertex1) {
92  return (vertex0.pt() > vertex1.pt());
93  });
94  }

References l1tVertexFinder::RecoVertex< T >::pt(), jetUpdater_cfi::sort, and vertices_.

Referenced by VertexProducer::produce().

◆ SortVerticesInZ0()

void l1tVertexFinder::VertexFinder::SortVerticesInZ0 ( )
inline

Sort vertices in z.

Definition at line 96 of file VertexFinder.h.

96  {
97  std::sort(vertices_.begin(), vertices_.end(), [](const RecoVertex<>& vertex0, const RecoVertex<>& vertex1) {
98  return (vertex0.z0() < vertex1.z0());
99  });
100  }

References jetUpdater_cfi::sort, vertices_, and l1tVertexFinder::RecoVertex< T >::z0().

◆ strided_iota()

template<typename ForwardIterator , typename T >
void l1tVertexFinder::VertexFinder::strided_iota ( ForwardIterator  first,
ForwardIterator  last,
T  value,
T  stride 
)
inline

Definition at line 107 of file VertexFinder.h.

107  {
108  while (first != last) {
109  *first++ = value;
110  value += stride;
111  }
112  }

References first, dqmdumpme::last, gpuPixelDoublets::stride, and relativeConstraints::value.

◆ vertices()

const std::vector<RecoVertex<> >& l1tVertexFinder::VertexFinder::vertices ( ) const
inline

Returns the z positions of the reconstructed primary vertices.

Definition at line 63 of file VertexFinder.h.

63 { return vertices_; }

References vertices_.

Referenced by VertexProducer::produce().

Member Data Documentation

◆ fitTracks_

FitTrackCollection l1tVertexFinder::VertexFinder::fitTracks_
private

◆ iterations_

unsigned int l1tVertexFinder::VertexFinder::iterations_
private

◆ numMatchedVertices_

unsigned int l1tVertexFinder::VertexFinder::numMatchedVertices_
private

Definition at line 148 of file VertexFinder.h.

◆ pv_index_

unsigned int l1tVertexFinder::VertexFinder::pv_index_
private

Definition at line 150 of file VertexFinder.h.

Referenced by primaryVertex(), and primaryVertexId().

◆ settings_

const AlgoSettings* l1tVertexFinder::VertexFinder::settings_
private

Definition at line 146 of file VertexFinder.h.

Referenced by VertexFinder().

◆ vertices_

std::vector<RecoVertex<> > l1tVertexFinder::VertexFinder::vertices_
private
l1tVertexFinder::AlgoSettings::vx_distance
float vx_distance() const
Definition: AlgoSettings.h:35
pfDeepBoostedJetPreprocessParams_cfi.upper_bound
upper_bound
Definition: pfDeepBoostedJetPreprocessParams_cfi.py:16
DOFs::dof
dof
Definition: AlignPCLThresholdsWriter.cc:37
mps_fire.i
i
Definition: mps_fire.py:428
start
Definition: start.py:1
HLT_FULL_cff.track
track
Definition: HLT_FULL_cff.py:11724
l1tVertexFinder::AlgoSettings::vx_weightedmean
unsigned int vx_weightedmean() const
Definition: AlgoSettings.h:41
DiDispStaMuonMonitor_cfi.pt
pt
Definition: DiDispStaMuonMonitor_cfi.py:39
l1tVertexFinder::VertexFinder::centralDistance
float centralDistance(RecoVertex<> cluster0, RecoVertex<> cluster1)
Find distance between centres of two clusters.
Definition: VertexFinder.cc:117
l1tVertexFinder::AlgoSettings::vx_distanceType
unsigned int vx_distanceType() const
For Agglomerative cluster algorithm, select a definition of distance between clusters.
Definition: AlgoSettings.h:33
l1tVertexFinder::VertexFinder::fitTracks_
FitTrackCollection fitTracks_
Definition: VertexFinder.h:149
l1tVertexFinder::AlgoSettings::vx_DoTightChi2
bool vx_DoTightChi2() const
Definition: AlgoSettings.h:55
l1tVertexFinder::AlgoSettings::vx_nvtx
unsigned int vx_nvtx() const
Number of vertices to return for FastHisto.
Definition: AlgoSettings.h:57
hltPixelTracks_cff.chi2
chi2
Definition: hltPixelTracks_cff.py:25
l1tVertexFinder::AlgoSettings::vx_kmeans_iterations
unsigned int vx_kmeans_iterations() const
Definition: AlgoSettings.h:61
spr::find
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
newFWLiteAna.found
found
Definition: newFWLiteAna.py:118
edm::LogWarning
Log< level::Warning, false > LogWarning
Definition: MessageLogger.h:122
TrackerTopology::tidRing
unsigned int tidRing(const DetId &id) const
Definition: TrackerTopology.h:218
l1tVertexFinder::VertexFinder::pv_index_
unsigned int pv_index_
Definition: VertexFinder.h:150
align::Tracker
Definition: StructureType.h:70
DetId
Definition: DetId.h:17
dqmdumpme.last
last
Definition: dqmdumpme.py:56
l1tVertexFinder::VertexFinder::settings_
const AlgoSettings * settings_
Definition: VertexFinder.h:146
reco::ceil
constexpr int32_t ceil(float num)
Definition: constexpr_cmath.h:7
l1tVertexFinder::AlgoSettings::vx_windowSize
unsigned int vx_windowSize() const
Window size of the sliding window.
Definition: AlgoSettings.h:45
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
DDAxes::z
LaserClient_cfi.nbins
nbins
Definition: LaserClient_cfi.py:51
l1tVertexFinder::FitTrackCollection
std::vector< L1Track > FitTrackCollection
Definition: VertexFinder.h:18
l1tVertexFinder::AlgoSettings::vx_DoPtComp
bool vx_DoPtComp() const
FastHisto track selection control.
Definition: AlgoSettings.h:54
HLTMuonOfflineAnalyzer_cfi.z0
z0
Definition: HLTMuonOfflineAnalyzer_cfi.py:98
class-composition.visited
visited
Definition: class-composition.py:83
dqmdumpme.k
k
Definition: dqmdumpme.py:60
first
auto first
Definition: CAHitNtupletGeneratorKernelsImpl.h:125
pfDeepBoostedJetPreprocessParams_cfi.lower_bound
lower_bound
Definition: pfDeepBoostedJetPreprocessParams_cfi.py:15
RecoVertex
Definition: ConvertError.h:7
bphysicsOniaDQM_cfi.vertex
vertex
Definition: bphysicsOniaDQM_cfi.py:7
tracks
const uint32_t *__restrict__ const HitContainer *__restrict__ TkSoA *__restrict__ tracks
Definition: CAHitNtupletGeneratorKernelsImpl.h:176
gpuVertexFinder::hist
__shared__ Hist hist
Definition: gpuClusterTracksDBSCAN.h:48
jetUpdater_cfi.sort
sort
Definition: jetUpdater_cfi.py:29
l1tVertexFinder::AlgoSettings::vx_histogram_min
double vx_histogram_min() const
Definition: AlgoSettings.h:48
l1tVertexFinder::VertexFinder::iterations_
unsigned int iterations_
Definition: VertexFinder.h:151
l1tVertexFinder::AlgoSettings::vx_TrackMaxPtBehavior
float vx_TrackMaxPtBehavior() const
Definition: AlgoSettings.h:65
createfilelist.int
int
Definition: createfilelist.py:10
value
Definition: value.py:1
l1tVertexFinder::VertexFinder::vertices_
std::vector< RecoVertex<> > vertices_
Definition: VertexFinder.h:147
l1tVertexFinder::AlgoSettings::vx_width
float vx_width() const
FastHisto assumed vertex width.
Definition: AlgoSettings.h:52
l1tVertexFinder::AlgoSettings::vx_TrackMaxChi2
float vx_TrackMaxChi2() const
Definition: AlgoSettings.h:66
l1tVertexFinder::VertexFinder::computeAndSetVertexParameters
void computeAndSetVertexParameters(RecoVertex<> &vertex, const std::vector< float > &bin_centers, const std::vector< unsigned int > &counts)
Compute the vertex parameters.
Definition: VertexFinder.cc:7
L1Track
l1tVertexFinder::AlgoSettings::vx_dbscan_pt
float vx_dbscan_pt() const
Definition: AlgoSettings.h:58
l1tVertexFinder::VertexFinder::minDistance
float minDistance(RecoVertex<> cluster0, RecoVertex<> cluster1)
Find minimum distance in two clusters of tracks.
Definition: VertexFinder.cc:91
l1tVertexFinder::AlgoSettings::vx_TrackMaxPt
float vx_TrackMaxPt() const
Definition: AlgoSettings.h:64
TrackerTopology::tobLayer
unsigned int tobLayer(const DetId &id) const
Definition: TrackerTopology.h:147
l1tVertexFinder::VertexFinder::strided_iota
void strided_iota(ForwardIterator first, ForwardIterator last, T value, T stride)
Definition: VertexFinder.h:107
l1tVertexFinder::VertexFinder::fitTracks
const FitTrackCollection & fitTracks() const
Storage for tracks out of the L1 Track finder.
Definition: VertexFinder.h:65
HltBtagValidation_cff.Vertex
Vertex
Definition: HltBtagValidation_cff.py:32
triggerObjects_cff.id
id
Definition: triggerObjects_cff.py:29
l1tVertexFinder::AlgoSettings::vx_histogram_binwidth
double vx_histogram_binwidth() const
Definition: AlgoSettings.h:50
relativeConstraints.value
value
Definition: relativeConstraints.py:53
dqmiodumpmetadata.counts
counts
Definition: dqmiodumpmetadata.py:25
StripSubdetector::TOB
static constexpr auto TOB
Definition: StripSubdetector.h:18
or
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
l1tVertexFinder::AlgoSettings::vx_kmeans_nclusters
unsigned int vx_kmeans_nclusters() const
Definition: AlgoSettings.h:62
l1tVertexFinder::VertexFinder::maxDistance
float maxDistance(RecoVertex<> cluster0, RecoVertex<> cluster1)
Find maximum distance in two clusters of tracks.
Definition: VertexFinder.cc:78
AlignmentPI::index
index
Definition: AlignmentPayloadInspectorHelper.h:46
l1tVertexFinder::AlgoSettings::vx_histogram_max
double vx_histogram_max() const
Definition: AlgoSettings.h:49
l1tVertexFinder::VertexFinder::meanDistance
float meanDistance(RecoVertex<> cluster0, RecoVertex<> cluster1)
Find average distance in two clusters of tracks.
Definition: VertexFinder.cc:104
funct::pow
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:29
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
l1tVertexFinder::AlgoSettings::debug
unsigned int debug() const
Definition: AlgoSettings.h:71
globals_cff.id2
id2
Definition: globals_cff.py:34
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
HLT_FULL_cff.distance
distance
Definition: HLT_FULL_cff.py:7746
edm::Log
Definition: MessageLogger.h:70
listHistos.trackPt
trackPt
Definition: listHistos.py:120
l1tVertexFinder::AlgoSettings::vx_TrackMinPt
float vx_TrackMinPt() const
Definition: AlgoSettings.h:63
StripSubdetector::TID
static constexpr auto TID
Definition: StripSubdetector.h:17
gpuPixelDoublets::stride
auto stride
Definition: gpuPixelDoubletsAlgos.h:80
GetRecoTauVFromDQM_MC_cff.next
next
Definition: GetRecoTauVFromDQM_MC_cff.py:31
l1tVertexFinder::AlgoSettings::vx_minTracks
unsigned int vx_minTracks() const
Definition: AlgoSettings.h:39
fastsim::Constants::NA
static constexpr double NA
Avogadro's number.
Definition: Constants.h:16