File indexing completed on 2024-04-06 12:04:01
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef DataFormats_CTPPSReco_TotemRPLocalTrack
0011 #define DataFormats_CTPPSReco_TotemRPLocalTrack
0012
0013 #include "DataFormats/Common/interface/DetSetVector.h"
0014 #include "DataFormats/CTPPSReco/interface/TotemRPRecHit.h"
0015
0016 #include "TVector3.h"
0017 #include "TMatrixD.h"
0018 #include "TVectorD.h"
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031 class TotemRPLocalTrack {
0032 public:
0033 class FittedRecHit : public TotemRPRecHit {
0034 public:
0035 FittedRecHit(const TotemRPRecHit &hit, const TVector3 &space_point_on_det, double residual, double pull)
0036 : TotemRPRecHit(hit), space_point_on_det_(space_point_on_det), residual_(residual), pull_(pull) {}
0037
0038 FittedRecHit() : TotemRPRecHit(), residual_(0), pull_(0) {}
0039
0040 virtual ~FittedRecHit() {}
0041
0042 inline const TVector3 &globalCoordinates() const { return space_point_on_det_; }
0043 inline void setGlobalCoordinates(const TVector3 &space_point_on_det) { space_point_on_det_ = space_point_on_det; }
0044
0045 inline double residual() const { return residual_; }
0046 inline void setResidual(double residual) { residual_ = residual; }
0047
0048 inline double pull() const { return pull_; }
0049 inline void setPull(double pull) { pull_ = pull; }
0050
0051 inline double pullNormalization() const { return residual_ / pull_; }
0052
0053 private:
0054 TVector3 space_point_on_det_;
0055 double residual_;
0056 double pull_;
0057 };
0058
0059 public:
0060
0061 static const int dimension = 4;
0062
0063
0064 static const int covarianceSize = dimension * dimension;
0065
0066 TotemRPLocalTrack() : z0_(0), chiSquared_(0), valid_(false) {}
0067
0068 TotemRPLocalTrack(double z0,
0069 const TVectorD &track_params_vector,
0070 const TMatrixD &par_covariance_matrix,
0071 double chiSquared);
0072
0073 virtual ~TotemRPLocalTrack() {}
0074
0075 inline const edm::DetSetVector<FittedRecHit> &hits() const { return track_hits_vector_; }
0076 inline void addHit(unsigned int detId, const FittedRecHit &hit) {
0077 track_hits_vector_.find_or_insert(detId).push_back(hit);
0078 }
0079
0080 inline double x0() const { return track_params_vector_[0]; }
0081 inline double x0Sigma() const { return sqrt(CovarianceMatrixElement(0, 0)); }
0082 inline double x0Variance() const { return CovarianceMatrixElement(0, 0); }
0083
0084 inline double y0() const { return track_params_vector_[1]; }
0085 inline double y0Sigma() const { return sqrt(CovarianceMatrixElement(1, 1)); }
0086 inline double y0Variance() const { return CovarianceMatrixElement(1, 1); }
0087
0088 inline double z0() const { return z0_; }
0089 inline void setZ0(double z0) { z0_ = z0; }
0090
0091 inline double tx() const { return track_params_vector_[2]; }
0092 inline double txSigma() const { return sqrt(CovarianceMatrixElement(2, 2)); }
0093
0094 inline double ty() const { return track_params_vector_[3]; }
0095 inline double tySigma() const { return sqrt(CovarianceMatrixElement(3, 3)); }
0096
0097 inline TVector3 directionVector() const {
0098 TVector3 vect(tx(), ty(), 1);
0099 vect.SetMag(1.0);
0100 return vect;
0101 }
0102
0103 TVectorD parameterVector() const;
0104 void setParameterVector(const TVectorD &track_params_vector);
0105
0106 TMatrixD covarianceMatrix() const;
0107 void setCovarianceMatrix(const TMatrixD &par_covariance_matrix);
0108
0109 inline double chiSquared() const { return chiSquared_; }
0110 inline void setChiSquared(double &chiSquared) { chiSquared_ = chiSquared; }
0111
0112 inline double chiSquaredOverNDF() const { return chiSquared_ / (track_hits_vector_.size() - 4); }
0113
0114 inline unsigned short numberOfPointsUsedForFit() const { return track_hits_vector_.size(); }
0115
0116
0117 inline TVector2 trackPoint(double z) const {
0118 double delta_z = z - z0_;
0119 return TVector2(track_params_vector_[0] + track_params_vector_[2] * delta_z,
0120 track_params_vector_[1] + track_params_vector_[3] * delta_z);
0121 }
0122
0123 inline TVector3 trackCentrePoint() { return TVector3(track_params_vector_[0], track_params_vector_[1], z0_); }
0124
0125 TMatrixD trackPointInterpolationCovariance(double z) const;
0126
0127 inline bool isValid() const { return valid_; }
0128
0129 inline void setValid(bool valid) { valid_ = valid; }
0130
0131 friend bool operator<(const TotemRPLocalTrack &l, const TotemRPLocalTrack &r);
0132
0133 private:
0134 inline const double &CovarianceMatrixElement(int i, int j) const { return par_covariance_matrix_[i * dimension + j]; }
0135
0136 inline double &CovarianceMatrixElement(int i, int j) { return par_covariance_matrix_[i * dimension + j]; }
0137
0138 edm::DetSetVector<FittedRecHit> track_hits_vector_;
0139
0140
0141 double track_params_vector_[dimension];
0142
0143
0144
0145 double z0_;
0146
0147 double par_covariance_matrix_[covarianceSize];
0148
0149
0150 double chiSquared_;
0151
0152
0153 bool valid_;
0154 };
0155
0156 #endif