File indexing completed on 2023-03-17 10:51:34
0001 #ifndef TrackReco_TrackExtra_h
0002 #define TrackReco_TrackExtra_h
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 #include <Rtypes.h>
0015 #include "DataFormats/Common/interface/RefToBase.h"
0016 #include "DataFormats/Math/interface/Vector3D.h"
0017 #include "DataFormats/Math/interface/Point3D.h"
0018 #include "DataFormats/Math/interface/Error.h"
0019 #include "DataFormats/TrackReco/interface/TrackExtraBase.h"
0020 #include "DataFormats/TrackReco/interface/TrackResiduals.h"
0021 #include "DataFormats/TrajectorySeed/interface/PropagationDirection.h"
0022 #include "DataFormats/TrajectorySeed/interface/TrajectorySeed.h"
0023 #include "FWCore/Utilities/interface/thread_safety_macros.h"
0024
0025 namespace reco {
0026 class TrackExtra : public TrackExtraBase {
0027 public:
0028
0029 enum { dimension = 5 };
0030
0031 enum { covarianceSize = dimension * (dimension + 1) / 2 };
0032
0033 typedef math::XYZPoint Point;
0034
0035 typedef math::XYZVector Vector;
0036
0037 typedef math::Error<5>::type CovarianceMatrix;
0038
0039 typedef unsigned int index;
0040
0041
0042 TrackExtra()
0043 : outerMomentum_(),
0044 outerOk_(false),
0045 outerDetId_(0),
0046 innerPosition_(),
0047 innerMomentum_(),
0048 innerOk_(false),
0049 innerDetId_(0),
0050 seedDir_(anyDirection),
0051 seedRef_() {
0052 for (index i = 0; i < covarianceSize; ++i) {
0053 outerCovariance_[i] = 0;
0054 innerCovariance_[i] = 0;
0055 }
0056 }
0057
0058
0059 TrackExtra(const Point &outerPosition,
0060 const Vector &outerMomentum,
0061 bool ok,
0062 const Point &innerPosition,
0063 const Vector &innerMomentum,
0064 bool iok,
0065 const CovarianceMatrix &outerState,
0066 unsigned int outerId,
0067 const CovarianceMatrix &innerState,
0068 unsigned int innerId,
0069 PropagationDirection seedDir,
0070 edm::RefToBase<TrajectorySeed> seedRef = edm::RefToBase<TrajectorySeed>());
0071
0072
0073 const Point &outerPosition() const { return outerPosition_; }
0074
0075 const Vector &outerMomentum() const { return outerMomentum_; }
0076
0077 bool outerOk() const { return outerOk_; }
0078
0079 const Point &innerPosition() const { return innerPosition_; }
0080
0081 const Vector &innerMomentum() const { return innerMomentum_; }
0082
0083 bool innerOk() const { return innerOk_; }
0084
0085 double outerPx() const { return outerMomentum_.X(); }
0086
0087 double outerPy() const { return outerMomentum_.Y(); }
0088
0089 double outerPz() const { return outerMomentum_.Z(); }
0090
0091 double outerX() const { return outerPosition_.X(); }
0092
0093 double outerY() const { return outerPosition_.Y(); }
0094
0095 double outerZ() const { return outerPosition_.Z(); }
0096
0097 double outerP() const { return outerMomentum().R(); }
0098
0099 double outerPt() const { return outerMomentum().Rho(); }
0100
0101 double outerPhi() const { return outerMomentum().Phi(); }
0102
0103 double outerEta() const { return outerMomentum().Eta(); }
0104
0105 double outerTheta() const { return outerMomentum().Theta(); }
0106
0107 double outerRadius() const { return outerPosition().Rho(); }
0108
0109
0110 CovarianceMatrix outerStateCovariance() const;
0111
0112 CovarianceMatrix innerStateCovariance() const;
0113
0114 CovarianceMatrix &fillOuter CMS_THREAD_SAFE(CovarianceMatrix &v) const;
0115
0116 CovarianceMatrix &fillInner CMS_THREAD_SAFE(CovarianceMatrix &v) const;
0117
0118 unsigned int outerDetId() const { return outerDetId_; }
0119
0120 unsigned int innerDetId() const { return innerDetId_; }
0121
0122 const PropagationDirection &seedDirection() const { return seedDir_; }
0123
0124
0125
0126
0127
0128
0129 const edm::RefToBase<TrajectorySeed> &seedRef() const { return seedRef_; }
0130 void setSeedRef(const edm::RefToBase<TrajectorySeed> &r) { seedRef_ = r; }
0131
0132 void setResiduals(const TrackResiduals &r) { trackResiduals_ = r; }
0133
0134
0135 const TrackResiduals &residuals() const { return trackResiduals_; }
0136
0137 private:
0138
0139 Point outerPosition_;
0140
0141 Vector outerMomentum_;
0142
0143 bool outerOk_;
0144
0145 float outerCovariance_[covarianceSize];
0146 unsigned int outerDetId_;
0147
0148
0149 Point innerPosition_;
0150
0151 Vector innerMomentum_;
0152
0153 bool innerOk_;
0154
0155 float innerCovariance_[covarianceSize];
0156 unsigned int innerDetId_;
0157
0158 PropagationDirection seedDir_;
0159 edm::RefToBase<TrajectorySeed> seedRef_;
0160
0161
0162 TrackResiduals trackResiduals_;
0163 };
0164
0165 }
0166
0167 #endif