ATLAS Offline Software
Loading...
Searching...
No Matches
PESA::T2TrackClusterer Class Reference

#include <T2TrackClusterer.h>

Collaboration diagram for PESA::T2TrackClusterer:

Public Types

enum  TrackPerigee { perigee_original , perigee_beamspot , perigee_beamline }
using TrackVector = std::vector<const Trk::Track*>

Public Member Functions

 T2TrackClusterer (double deltaZ=10.*Gaudi::Units::mm, double minPT=1.*Gaudi::Units::GeV, bool weightedZ=true, unsigned maxSize=10000., TrackPerigee trackPerigee=perigee_original)
const TrackVectorcluster (const TrackVector &tracks, const InDet::BeamSpotData *beamspot=nullptr)
 Find one cluster in a set of tracks.
double seedZ0 () const
 Z0 position of a seed track that was used for clustering.
double totalZ0Err () const
 Uncertainty of Z0 position of a cluster.
const TrackVectorclusterTracks () const
 This is the same vector as returned from clustering method, have to be called after return from a clustering method.
const TrackVectorunusedTracks () const
 Tracks that were not included into cluster, have to be called after return from a clustering method.

Static Public Member Functions

static TrackPerigee trackPerigeeFromString (const std::string &perigeeStr)

Private Member Functions

double trackWeight (const Trk::Track &track) const
double trackPerigeeZ0 (const Trk::Track &track, const InDet::BeamSpotData *beamspot) const

Private Attributes

const double m_deltaZ
const double m_minPT
const bool m_weightedZ
const unsigned m_maxSize
const TrackPerigee m_trackPerigee = perigee_original
double m_seedZ0 = 0.
double m_totalZ0Err = 0.
TrackVector m_cluster
TrackVector m_unusedTracks

Detailed Description

Definition at line 41 of file T2TrackClusterer.h.

Member Typedef Documentation

◆ TrackVector

using PESA::T2TrackClusterer::TrackVector = std::vector<const Trk::Track*>

Definition at line 45 of file T2TrackClusterer.h.

Member Enumeration Documentation

◆ TrackPerigee

Enumerator
perigee_original 
perigee_beamspot 
perigee_beamline 

Definition at line 48 of file T2TrackClusterer.h.

48 {
49 perigee_original, // Use original track perigee parameters, usually means
50 // perigee w.r.t. coordinate system origin x,y=0,0
51 perigee_beamspot, // Perigee to a beamspot position, ignoring tilt
52 perigee_beamline, // Perigee to a beam line, including tilt
53 };

Constructor & Destructor Documentation

◆ T2TrackClusterer()

PESA::T2TrackClusterer::T2TrackClusterer ( double deltaZ = 10.*Gaudi::Units::mm,
double minPT = 1.*Gaudi::Units::GeV,
bool weightedZ = true,
unsigned maxSize = 10000.,
TrackPerigee trackPerigee = perigee_original )
inline

Definition at line 59 of file T2TrackClusterer.h.

62 : m_deltaZ ( deltaZ )
63 , m_minPT ( minPT )
64 , m_weightedZ ( weightedZ )
65 , m_maxSize ( maxSize )
66 , m_trackPerigee( trackPerigee )
67 {}
const TrackPerigee m_trackPerigee

Member Function Documentation

◆ cluster()

const T2TrackClusterer::TrackVector & T2TrackClusterer::cluster ( const TrackVector & tracks,
const InDet::BeamSpotData * beamspot = nullptr )

Find one cluster in a set of tracks.

If beamspot is nullptr then clustering is done with "perigee_original" option, otherwise perigee option provided in a constructor is used.

Definition at line 50 of file T2TrackClusterer.cxx.

51{
52 m_seedZ0 = 0.;
53 m_totalZ0Err = 0.;
54 m_cluster.clear();
55 m_unusedTracks.clear();
56
57 if ( tracks.empty() ) {
58 return m_cluster;
59 }
60
61 const Trk::Track* seedTrack = *tracks.begin();
62
63 auto& params = seedTrack->perigeeParameters()->parameters();
64 const double seedPT = std::abs(sin(params[Trk::theta])/params[Trk::qOverP]);
65
66 if ( seedPT < m_minPT ) {
67 m_unusedTracks.assign(tracks.begin(), tracks.end());
68 return m_cluster;
69 }
70
71 double sumWeight = trackWeight(*seedTrack);
72 m_seedZ0 = trackPerigeeZ0(*seedTrack, beamspot);
73
74 m_cluster.push_back(seedTrack);
75
76 for (auto track_itr = tracks.begin() + 1; track_itr != tracks.end(); ++track_itr) {
77 const double trackZ0 = trackPerigeeZ0(**track_itr, beamspot);
78 const double deltaZ = trackZ0 - m_seedZ0;
79 const double weight = trackWeight( **track_itr );
80
81 if (abs(deltaZ) <= m_deltaZ && m_cluster.size() < m_maxSize) {
82 m_cluster.push_back(*track_itr);
83
84 m_seedZ0 = ( m_seedZ0 * sumWeight + trackZ0 * weight ) / ( sumWeight + weight );
85 sumWeight += weight;
86 } else {
87 m_unusedTracks.push_back(*track_itr);
88 }
89 }
90
91 m_totalZ0Err = sqrt( 1. / sumWeight );
92
93 return m_cluster;
94}
double trackWeight(const Trk::Track &track) const
double trackPerigeeZ0(const Trk::Track &track, const InDet::BeamSpotData *beamspot) const
const Perigee * perigeeParameters() const
return Perigee.
@ theta
Definition ParamDefs.h:66
@ qOverP
perigee
Definition ParamDefs.h:67

◆ clusterTracks()

const TrackVector & PESA::T2TrackClusterer::clusterTracks ( ) const
inline

This is the same vector as returned from clustering method, have to be called after return from a clustering method.

Definition at line 85 of file T2TrackClusterer.h.

85{ return m_cluster; }

◆ seedZ0()

double PESA::T2TrackClusterer::seedZ0 ( ) const
inline

Z0 position of a seed track that was used for clustering.

Definition at line 78 of file T2TrackClusterer.h.

78{ return m_seedZ0 ; }

◆ totalZ0Err()

double PESA::T2TrackClusterer::totalZ0Err ( ) const
inline

Uncertainty of Z0 position of a cluster.

Definition at line 81 of file T2TrackClusterer.h.

81{ return m_totalZ0Err; }

◆ trackPerigeeFromString()

T2TrackClusterer::TrackPerigee T2TrackClusterer::trackPerigeeFromString ( const std::string & perigeeStr)
static

Definition at line 28 of file T2TrackClusterer.cxx.

29{
30 if (perigeeStr == "original") {
31 return perigee_original;
32 } else if (perigeeStr == "beamspot") {
33 return perigee_beamspot;
34 } else if (perigeeStr == "beamline") {
35 return perigee_beamline;
36 } else {
37 throw std::runtime_error("Invalid value of ClusterPerigee parameter: " + perigeeStr);
38 }
39}

◆ trackPerigeeZ0()

double T2TrackClusterer::trackPerigeeZ0 ( const Trk::Track & track,
const InDet::BeamSpotData * beamspot ) const
private

Definition at line 97 of file T2TrackClusterer.cxx.

98{
99 auto& params0 = track.perigeeParameters()->parameters();
100 if (m_trackPerigee == perigee_original or beamspot == nullptr) {
101 return params0[Trk::z0];
103 // TODO: beamline is doing the same as beamspot for now, I think it should be OK
104 // with our track resolution, somethig to check in the future (when I retire)
105
106 // This assumes that track perigee is defined at 0,0, transform is:
107 // z = z_0 + (B_x*cos(phi) + B_y*sin(phi)) / tan(theta)
108
109 double z_0 = params0[Trk::z0];
110 double phi = params0[Trk::phi];
111 double theta = params0[Trk::theta];
112 auto& beamPos = beamspot->beamPos();
113 double B_x = beamPos[0];
114 double B_y = beamPos[1];
115
116 double z = z_0 + (B_x*cos(phi) + B_y*sin(phi)) / tan(theta);
117 return z;
118
119 } else {
120 // fallback to "original"
121 return params0[Trk::z0];
122 }
123}
Scalar phi() const
phi method
Scalar theta() const
theta method
#define z
const Amg::Vector3D & beamPos() const noexcept
@ phi
Definition ParamDefs.h:75
@ z0
Definition ParamDefs.h:64

◆ trackWeight()

double T2TrackClusterer::trackWeight ( const Trk::Track & track) const
private

Definition at line 42 of file T2TrackClusterer.cxx.

43{
44 const double trackZ0Err = Amg::error(*(track.perigeeParameters()->covariance()),Trk::z0);
45 const double weight = ( m_weightedZ ) ? 1. / ( trackZ0Err*trackZ0Err ) : 1.;
46 return weight;
47}
double error(const Amg::MatrixX &mat, int index)
return diagonal error of the matrix caller should ensure the matrix is symmetric and the index is in ...

◆ unusedTracks()

const TrackVector & PESA::T2TrackClusterer::unusedTracks ( ) const
inline

Tracks that were not included into cluster, have to be called after return from a clustering method.

Definition at line 89 of file T2TrackClusterer.h.

89{ return m_unusedTracks; }

Member Data Documentation

◆ m_cluster

TrackVector PESA::T2TrackClusterer::m_cluster
private

Definition at line 108 of file T2TrackClusterer.h.

◆ m_deltaZ

const double PESA::T2TrackClusterer::m_deltaZ
private

Definition at line 99 of file T2TrackClusterer.h.

◆ m_maxSize

const unsigned PESA::T2TrackClusterer::m_maxSize
private

Definition at line 102 of file T2TrackClusterer.h.

◆ m_minPT

const double PESA::T2TrackClusterer::m_minPT
private

Definition at line 100 of file T2TrackClusterer.h.

◆ m_seedZ0

double PESA::T2TrackClusterer::m_seedZ0 = 0.
private

Definition at line 105 of file T2TrackClusterer.h.

◆ m_totalZ0Err

double PESA::T2TrackClusterer::m_totalZ0Err = 0.
private

Definition at line 106 of file T2TrackClusterer.h.

◆ m_trackPerigee

const TrackPerigee PESA::T2TrackClusterer::m_trackPerigee = perigee_original
private

Definition at line 103 of file T2TrackClusterer.h.

◆ m_unusedTracks

TrackVector PESA::T2TrackClusterer::m_unusedTracks
private

Definition at line 109 of file T2TrackClusterer.h.

◆ m_weightedZ

const bool PESA::T2TrackClusterer::m_weightedZ
private

Definition at line 101 of file T2TrackClusterer.h.


The documentation for this class was generated from the following files: