StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
StMuFwdTrack.h
1 /***************************************************************************
2  *
3  * Author: jdb, Feb 2022
4  ***************************************************************************
5  *
6  * Description: StMuFwdTrack stores the Forward tracks built from Fst and Ftt
7  *
8  **************************************************************************/
9 #ifndef StMuFwdTrack_hh
10 #define StMuFwdTrack_hh
11 
12 #include <TObject.h>
13 #include <vector>
14 #include "TVector3.h"
15 #include "TRefArray.h"
16 
17 #include "StMuFcsCluster.h"
18 #include <climits>
19 
20 
21 class StFwdTrack;
22 
23 
24 struct StMuFwdTrackProjection : public TObject {
27  mXYZ = other.mXYZ;
28  mMom = other.mMom;
29  mDetId = other.mDetId;
30  memcpy( mCov, other.mCov, sizeof( mCov ) );
31  }
32  StMuFwdTrackProjection( unsigned short detId,
33  TVector3 xyz,
34  TVector3 mom,
35  float c[9] ) {
36  set( detId, xyz, mom, c );
37  }
38 
39  void set( unsigned short detId,
40  TVector3 xyz,
41  TVector3 mom,
42  float c[9]) {
43  mDetId = detId;
44  mXYZ = xyz;
45  mMom = mom;
46  memcpy( mCov, c, sizeof(mCov) );
47  }
48  void set( StMuFwdTrackProjection &other ){
49  mDetId = other.mDetId;
50  mXYZ = other.mXYZ;
51  mMom = other.mMom;
52  memcpy( mCov, other.mCov, sizeof(mCov) );
53  }
54  TVector3 mXYZ;
55  TVector3 mMom;
56  unsigned char mDetId;
57  float mCov[9];
58 
59  float dx(){
60  return sqrt( mCov[0] );
61  }
62  float dy(){
63  return sqrt( mCov[4] );
64  }
65  float dz(){
66  return sqrt( mCov[8] );
67  }
68 
69  ClassDef(StMuFwdTrackProjection, 1)
70 };
71 
72 struct StMuFwdTrackSeedPoint : public TObject{
74  StMuFwdTrackSeedPoint( TVector3 xyz,
75  short sec,
76  unsigned short trackId,
77  float cov[9] ){
78  mXYZ = xyz;
79  mSector = sec;
80  mTrackId = trackId;
81  memcpy( mCov, cov, sizeof( mCov ));
82  }
83 
84  TVector3 mXYZ;
85  unsigned short mTrackId;
86  short mSector;
87  float mCov[9];
88  ClassDef(StMuFwdTrackSeedPoint,1)
89 };
90 
91 class StMuFwdTrack : public TObject {
92 
93 public:
94  StMuFwdTrack( );
95 
96  void set( StFwdTrack* );
97 
98  std::vector<StMuFwdTrackProjection> mProjections;
99  std::vector<StMuFwdTrackSeedPoint> mFTTPoints;
100  std::vector<StMuFwdTrackSeedPoint> mFSTPoints;
101 
102  bool getProjectionFor( int detectorId,
103  StMuFwdTrackProjection &rProj,
104  size_t index = 0 );
105 
106  TVector3 momentum() const;
107  TVector3 momentumAt(size_t _id = 0) const;
108  char charge() const;
109 
110 
111  // Quality of the fit
112  bool didFitConverge() const;
113  bool didFitConvergeFully() const;
114  short numberOfFailedPoints() const;
115  double chi2() const;
116  double ndf() const;
117  double pval() const;
118 
119  // Number of fit points used by GenFit
120  short numberOfFitPoints() const;
121  // unsigned int numberOfPossibleFitPoints() const;
122 
123  // Number of points used in the track seed step
124  short numberOfSeedPoints() const;
125 
126 
127  void setPrimaryMomentum( TVector3 mom ) { mPrimaryMomentum = mom; }
128  void setDidFitConverge( bool lDidFitConverge ) { mDidFitConverge = lDidFitConverge; }
129  void setDidFitConvergeFully( bool lDidFitConvergeFully ) { mDidFitConvergeFully = lDidFitConvergeFully;}
130  void setNumberOfFailedPoints( short lNumberOfFailedPoints ) { mNumberOfFailedPoints = lNumberOfFailedPoints;}
131  void setNumberOfSeedPoints( short lNumberOfSeedPoints ) { mNumberOfSeedPoints = lNumberOfSeedPoints;}
132  void setNumberOfFitPoints( short lNumberOfFitPoints ) { mNumberOfFitPoints = lNumberOfFitPoints;}
133  void setChi2( float lChi2 ) { mChi2 = lChi2;}
134  void setNDF( float lNDF ) { mNDF = lNDF;}
135  void setPval( float lPval ) { mPval = lPval;}
136  void setCharge( short lCharge ) { mCharge = lCharge;}
137 
138  // ECAL clusters
139  // StPtrVecFcsCluster& ecalClusters();
140  // const StPtrVecFcsCluster& ecalClusters() const;
141  // void addEcalCluster(StFcsCluster* p);
142  // void sortEcalClusterByET();
143  // // HCAL clusters
144  // StPtrVecFcsCluster& hcalClusters();
145  // const StPtrVecFcsCluster& hcalClusters() const;
146  // void addHcalCluster(StFcsCluster* p);
147  // void sortHcalClusterByET();
148 
149  // vector<StMuFcsCluster*>
150 
151  void addEcalCluster( StMuFcsCluster* clu);
152  void addHcalCluster( StMuFcsCluster* clu);
153 
154  TRefArray mEcalClusters;
155  TRefArray mHcalClusters;
156 
157  void setMc( UShort_t idt, UShort_t qual ) { mIdTruth = idt; mQATruth = qual; }
158  void setDCA( TVector3 dca ) { mDCA[0] = dca.X(); mDCA[1] = dca.Y(); mDCA[2] = dca.Z(); }
159  void setDCA( float dcaX, float dcaY, float dcaZ ) { mDCA[0] = dcaX; mDCA[1] = dcaY; mDCA[2] = dcaZ; }
160  void setVtxIndex( UChar_t vtxIndex ) { mVtxIndex = vtxIndex; }
161 
162 
163  UShort_t idTruth() const { return mIdTruth; }
164  UShort_t qaTruth() const { return mQATruth; }
165  TVector3 dca() const { return TVector3( mDCA[0], mDCA[1], mDCA[2] ); }
166  UChar_t vertexIndex() const { return mVtxIndex; }
167  bool isPrimary() const { return mVtxIndex != UCHAR_MAX; }
168 
169 protected:
170 
171  // Track quality and convergence
172  bool mDidFitConverge;
173  bool mDidFitConvergeFully;
174  short mNumberOfFailedPoints;
175  short mNumberOfSeedPoints;
176  short mNumberOfFitPoints;
177  float mChi2;
178  float mNDF;
179  float mPval;
180  short mCharge;
181  TVector3 mPrimaryMomentum;
182 
183  UShort_t mIdTruth; // MC track id
184  UShort_t mQATruth; // MC track quality (percentage of hits coming from corresponding MC track)
185 
186  float mDCA[3]; // DCA to the primary vertex
187  UChar_t mVtxIndex;
188 
189  ClassDef(StMuFwdTrack,3)
190 
191 };
192 
193 #endif
194