StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
StFwdTrack.h
1 /***************************************************************************
2  *
3  * $Id: StFwdTrack.h,v 2.1 2021/01/11 20:25:37 ullrich Exp $
4  *
5  * Author: jdb, Feb 2022
6  ***************************************************************************
7  *
8  * Description: StFwdTrack stores the Forward tracks built from Fst and Ftt
9  *
10  ***************************************************************************
11  *
12  * $Log: StFwdTrack.h,v $
13  * Revision 2.1 2021/01/11 20:25:37 ullrich
14  * Initial Revision
15  *
16  **************************************************************************/
17 #ifndef StFwdTrack_hh
18 #define StFwdTrack_hh
19 
20 #include "Stiostream.h"
21 #include "StObject.h"
22 #include <vector>
23 #include "StThreeVectorD.hh"
24 #include "StContainers.h"
25 #include <climits>
26 
27 class StFcsCluster;
28 
29 
30 struct StFwdTrackProjection : public StObject {
33  mXYZ = other.mXYZ;
34  mMom = other.mMom;
35  mDetId = other.mDetId;
36  memcpy( mCov, other.mCov, sizeof( mCov ) );
37  }
38  StFwdTrackProjection( unsigned short detId,
39  StThreeVectorD xyz,
40  StThreeVectorD mom,
41  float c[9] ) {
42  set( detId, xyz, mom, c );
43  }
44 
45  void set( unsigned short detId,
46  StThreeVectorD xyz,
47  StThreeVectorD mom,
48  float c[9]) {
49  mDetId = detId;
50  mXYZ = xyz;
51  mMom = mom;
52  memcpy( mCov, c, sizeof(mCov) );
53  }
54  void set(const StFwdTrackProjection &other ){
55  mDetId = other.mDetId;
56  mXYZ = other.mXYZ;
57  mMom = other.mMom;
58  memcpy( mCov, other.mCov, sizeof(mCov) );
59  }
60  StThreeVectorD mXYZ;
61  StThreeVectorD mMom;
62  unsigned char mDetId;
63  float mCov[9];
64 
65  float dx(){
66  return sqrt( mCov[0] );
67  }
68  float dy(){
69  return sqrt( mCov[4] );
70  }
71  float dz(){
72  return sqrt( mCov[8] );
73  }
74 
75  ClassDef(StFwdTrackProjection, 1)
76 };
77 
78 struct StFwdTrackSeedPoint : public StObject {
81  short detsec,
82  unsigned short trackId,
83  float cov[9] ){
84  mXYZ = xyz;
85  mSector = detsec;
86  mTrackId = trackId;
87  memcpy( mCov, cov, sizeof( mCov ));
88  }
89 
90  short detectorId() const { return mSector / 10; }
91  short sector() const { return mSector % 10; }
92 
93  StThreeVectorD mXYZ;
94  unsigned short mTrackId;
95  short mSector; // = detId * 10 + sector
96  float mCov[9];
97 
98  ClassDef(StFwdTrackSeedPoint, 1)
99 };
100 
101 class StFwdTrack : public StObject {
102 
103 public:
104  StFwdTrack( );
105  // dtor needed for releasing associations
106  ~StFwdTrack( );
107 
108  vector<StFwdTrackProjection> mProjections;
109  vector<StFwdTrackSeedPoint> mFTTPoints;
110  vector<StFwdTrackSeedPoint> mFSTPoints;
111 
112  StFwdTrackProjection getProjectionFor( int detectorId,
113  size_t index = 0 );
114 
115  StThreeVectorD momentum() const;
116  StThreeVectorD momentumAt(size_t _id = 0) const;
117  char charge() const;
118 
119 
120  // Quality of the fit
121  bool didFitConverge() const;
122  bool didFitConvergeFully() const;
123  short numberOfFailedPoints() const;
124  double chi2() const;
125  double ndf() const;
126  double pval() const;
127 
128  // error on pT upper and lower 1-sigma values
129  // add access to cov matrix
130 
131  // Number of fit points used by GenFit
132  short numberOfFitPoints() const;
133 
134  // Number of points used in the track seed step
135  short numberOfSeedPoints() const;
136  UShort_t idTruth() const { return mIdTruth; }
137  UShort_t qaTruth() const { return mQATruth; }
138  StThreeVectorD dca() const { return StThreeVectorD( mDCA[0], mDCA[1], mDCA[2] ); }
139  UChar_t vertexIndex() const { return mVtxIndex; }
140  bool isPrimary() const { return mVtxIndex != UCHAR_MAX; }
141 
142  void setPrimaryMomentum( StThreeVectorD mom ) { mPrimaryMomentum = mom; }
143  void setDidFitConverge( bool lDidFitConverge ) { mDidFitConverge = lDidFitConverge; }
144  void setDidFitConvergeFully( bool lDidFitConvergeFully ) { mDidFitConvergeFully = lDidFitConvergeFully;}
145  void setNumberOfFailedPoints( short lNumberOfFailedPoints ) { mNumberOfFailedPoints = lNumberOfFailedPoints;}
146  void setNumberOfSeedPoints( short lNumberOfSeedPoints ) { mNumberOfSeedPoints = lNumberOfSeedPoints;}
147  void setNumberOfFitPoints( short lNumberOfFitPoints ) { mNumberOfFitPoints = lNumberOfFitPoints;}
148  void setChi2( float lChi2 ) { mChi2 = lChi2;}
149  void setNDF( float lNDF ) { mNDF = lNDF;}
150  void setPval( float lPval ) { mPval = lPval;}
151  void setCharge( short lCharge ) { mCharge = lCharge;}
152  void setMc( UShort_t idt, UShort_t qual ) { mIdTruth = idt; mQATruth = qual; }
153  void setDCA( StThreeVectorD dca ) { mDCA[0] = dca.x(); mDCA[1] = dca.y(); mDCA[2] = dca.z(); }
154  void setDCA( float dcaX, float dcaY, float dcaZ ) { mDCA[0] = dcaX; mDCA[1] = dcaY; mDCA[2] = dcaZ; }
155  void setVtxIndex( UChar_t vtxIndex ) { mVtxIndex = vtxIndex; }
156 
157  // ECAL clusters
158  StPtrVecFcsCluster& ecalClusters();
159  const StPtrVecFcsCluster& ecalClusters() const;
160  void addEcalCluster(StFcsCluster* p);
161  void sortEcalClusterByET();
162  // HCAL clusters
163  StPtrVecFcsCluster& hcalClusters();
164  const StPtrVecFcsCluster& hcalClusters() const;
165  void addHcalCluster(StFcsCluster* p);
166  void sortHcalClusterByET();
167 
168 protected:
169  // Track quality and convergence
170  bool mDidFitConverge; // did the fit converge
171  bool mDidFitConvergeFully; // did the fit converge fully (fwd and bkw)
172  short mNumberOfFailedPoints; // number of points that failed to converge
173  short mNumberOfSeedPoints; // number of points used in the seed step
174  short mNumberOfFitPoints; // number of points used in the fit (seed + vertex)
175  float mChi2; // chi2 of the fit
176  float mNDF; // number of degrees of freedom
177  float mPval; // p-value of the fit
178  short mCharge; // charge of the track
179  StThreeVectorD mPrimaryMomentum; // momentum at the primary vertex
180  StPtrVecFcsCluster mEcalClusters; // ECAL clusters
181  StPtrVecFcsCluster mHcalClusters; // HCAL clusters
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(StFwdTrack,3)
190 };
191 
192 #endif
193