30 if (perigeeStr ==
"original") {
32 }
else if (perigeeStr ==
"beamspot") {
34 }
else if (perigeeStr ==
"beamline") {
37 throw std::runtime_error(
"Invalid value of ClusterPerigee parameter: " + perigeeStr);
44 const double trackZ0Err =
Amg::error(*(track.perigeeParameters()->covariance()),
Trk::z0);
45 const double weight = (
m_weightedZ ) ? 1. / ( trackZ0Err*trackZ0Err ) : 1.;
57 if ( tracks.empty() ) {
76 for (
auto track_itr = tracks.begin() + 1; track_itr != tracks.end(); ++track_itr) {
78 const double deltaZ = trackZ0 -
m_seedZ0;
84 m_seedZ0 = (
m_seedZ0 * sumWeight + trackZ0 * weight ) / ( sumWeight + weight );
99 auto& params0 = track.perigeeParameters()->parameters();
112 auto& beamPos = beamspot->
beamPos();
113 double B_x = beamPos[0];
114 double B_y = beamPos[1];
116 double z = z_0 + (B_x*cos(
phi) + B_y*sin(
phi)) / tan(
theta);
Scalar phi() const
phi method
Scalar theta() const
theta method
const Amg::Vector3D & beamPos() const noexcept
std::vector< const Trk::Track * > TrackVector
const TrackPerigee m_trackPerigee
static TrackPerigee trackPerigeeFromString(const std::string &perigeeStr)
double trackWeight(const Trk::Track &track) const
const TrackVector & cluster(const TrackVector &tracks, const InDet::BeamSpotData *beamspot=nullptr)
Find one cluster in a set of tracks.
double trackPerigeeZ0(const Trk::Track &track, const InDet::BeamSpotData *beamspot) const
TrackVector m_unusedTracks
const Perigee * perigeeParameters() const
return Perigee.
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 ...