ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Trigger
TrigAlgorithms
TrigT2BeamSpot
src
T2TrackClusterer.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
//
6
// $Id: T2TrackClusterer.cxx 793164 2017-01-20 03:59:26Z ssnyder $
7
//
8
9
#include "
T2TrackClusterer.h
"
10
11
#include "
TrkParameters/TrackParameters.h
"
12
#include "
EventPrimitives/EventPrimitivesHelpers.h
"
13
#include "
BeamSpotConditionsData/BeamSpotData.h
"
14
15
#include <cmath>
16
#include <stdexcept>
17
18
using
std::abs;
19
using
std::sqrt;
20
using
std::sin;
21
using
std::cos;
22
using
std::tan;
23
24
using namespace
PESA
;
25
26
27
T2TrackClusterer::TrackPerigee
28
T2TrackClusterer::trackPerigeeFromString
(
const
std::string& perigeeStr)
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
}
40
41
double
42
T2TrackClusterer::trackWeight
(
const
Trk::Track
& track )
const
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
}
48
49
const
T2TrackClusterer::TrackVector
&
50
T2TrackClusterer::cluster
(
const
TrackVector
& tracks,
const
InDet::BeamSpotData
* beamspot )
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
}
95
96
double
97
T2TrackClusterer::trackPerigeeZ0
(
const
Trk::Track
& track,
const
InDet::BeamSpotData
* beamspot)
const
98
{
99
auto
& params0 = track.perigeeParameters()->parameters();
100
if
(
m_trackPerigee
==
perigee_original
or beamspot ==
nullptr
) {
101
return
params0[
Trk::z0
];
102
}
else
if
(
m_trackPerigee
==
perigee_beamspot
or
m_trackPerigee
==
perigee_beamline
) {
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
}
phi
Scalar phi() const
phi method
Definition
AmgMatrixBasePlugin.h:67
theta
Scalar theta() const
theta method
Definition
AmgMatrixBasePlugin.h:75
BeamSpotData.h
EventPrimitivesHelpers.h
T2TrackClusterer.h
TrackParameters.h
z
#define z
InDet::BeamSpotData
Definition
BeamSpotData.h:21
InDet::BeamSpotData::beamPos
const Amg::Vector3D & beamPos() const noexcept
Definition
BeamSpotData.h:68
PESA::T2TrackClusterer::m_cluster
TrackVector m_cluster
Definition
T2TrackClusterer.h:108
PESA::T2TrackClusterer::TrackVector
std::vector< const Trk::Track * > TrackVector
Definition
T2TrackClusterer.h:45
PESA::T2TrackClusterer::m_trackPerigee
const TrackPerigee m_trackPerigee
Definition
T2TrackClusterer.h:103
PESA::T2TrackClusterer::m_totalZ0Err
double m_totalZ0Err
Definition
T2TrackClusterer.h:106
PESA::T2TrackClusterer::m_maxSize
const unsigned m_maxSize
Definition
T2TrackClusterer.h:102
PESA::T2TrackClusterer::m_weightedZ
const bool m_weightedZ
Definition
T2TrackClusterer.h:101
PESA::T2TrackClusterer::trackPerigeeFromString
static TrackPerigee trackPerigeeFromString(const std::string &perigeeStr)
Definition
T2TrackClusterer.cxx:28
PESA::T2TrackClusterer::m_seedZ0
double m_seedZ0
Definition
T2TrackClusterer.h:105
PESA::T2TrackClusterer::trackWeight
double trackWeight(const Trk::Track &track) const
Definition
T2TrackClusterer.cxx:42
PESA::T2TrackClusterer::m_minPT
const double m_minPT
Definition
T2TrackClusterer.h:100
PESA::T2TrackClusterer::cluster
const TrackVector & cluster(const TrackVector &tracks, const InDet::BeamSpotData *beamspot=nullptr)
Find one cluster in a set of tracks.
Definition
T2TrackClusterer.cxx:50
PESA::T2TrackClusterer::trackPerigeeZ0
double trackPerigeeZ0(const Trk::Track &track, const InDet::BeamSpotData *beamspot) const
Definition
T2TrackClusterer.cxx:97
PESA::T2TrackClusterer::TrackPerigee
TrackPerigee
Definition
T2TrackClusterer.h:48
PESA::T2TrackClusterer::perigee_beamspot
@ perigee_beamspot
Definition
T2TrackClusterer.h:51
PESA::T2TrackClusterer::perigee_original
@ perigee_original
Definition
T2TrackClusterer.h:49
PESA::T2TrackClusterer::perigee_beamline
@ perigee_beamline
Definition
T2TrackClusterer.h:52
PESA::T2TrackClusterer::m_deltaZ
const double m_deltaZ
Definition
T2TrackClusterer.h:99
PESA::T2TrackClusterer::m_unusedTracks
TrackVector m_unusedTracks
Definition
T2TrackClusterer.h:109
Trk::Track
The ATLAS Track class.
Definition
Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
Trk::Track::perigeeParameters
const Perigee * perigeeParameters() const
return Perigee.
Definition
Tracking/TrkEvent/TrkTrack/src/Track.cxx:163
Amg::error
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 ...
Definition
EventPrimitivesHelpers.h:40
PESA
Local tools.
Definition
idx.h:9
Trk::theta
@ theta
Definition
ParamDefs.h:66
Trk::qOverP
@ qOverP
perigee
Definition
ParamDefs.h:67
Trk::phi
@ phi
Definition
ParamDefs.h:75
Trk::z0
@ z0
Definition
ParamDefs.h:64
Generated on
for ATLAS Offline Software by
1.17.0