StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
StMuFwdTrack.cxx
1 #include "StMuFwdTrack.h"
2 #include <vector>
3 
4 #include "StEvent/StFwdTrack.h"
5 
6 StMuFwdTrack::StMuFwdTrack() : mDidFitConverge(0),mDidFitConvergeFully(0),mNumberOfFailedPoints(0),mNumberOfSeedPoints(0),mNumberOfFitPoints(0),mChi2(0),mNDF(0),mPval(0),mCharge(0),mPrimaryMomentum(0,0,0),mIdTruth(0),mQATruth(0) {
7 
8 }
9 
10 void StMuFwdTrack::set( StFwdTrack * evTrack) {
11  mDidFitConverge = evTrack->didFitConverge();
12  mDidFitConvergeFully = evTrack->didFitConvergeFully();
13  mNumberOfFailedPoints = evTrack->numberOfFailedPoints();
14  mNumberOfSeedPoints = evTrack->numberOfSeedPoints();
15  mNumberOfFitPoints = evTrack->numberOfFitPoints();
16  mChi2 = evTrack->chi2();
17  mNDF = evTrack->ndf();
18  mPval = evTrack->pval();
19  mCharge = evTrack->charge();
20  mPrimaryMomentum = TVector3( evTrack->momentum().x(), evTrack->momentum().y(), evTrack->momentum().z() );
21 
22  mIdTruth = evTrack->idTruth();
23  mQATruth = evTrack->qaTruth();
24 
25  //copy the projections
26  for ( auto proj : evTrack->mProjections ){
27  mProjections.push_back(
28  StMuFwdTrackProjection( proj.mDetId, TVector3( proj.mXYZ.x(), proj.mXYZ.y(), proj.mXYZ.z() ), TVector3( proj.mMom.x(), proj.mMom.y(), proj.mMom.z() ), proj.mCov )
29  );
30  }
31 
32  //copy the FTT Seed Points
33  for ( auto sp : evTrack->mFTTPoints ){
34  mFTTPoints.push_back(
35  StMuFwdTrackSeedPoint( TVector3( sp.mXYZ.x(), sp.mXYZ.y(), sp.mXYZ.z() ), sp.mSector, sp.mTrackId, sp.mCov )
36  );
37  }
38 
39  //copy the FST Seed Points
40  for ( auto sp : evTrack->mFSTPoints ){
41  mFSTPoints.push_back(
42  StMuFwdTrackSeedPoint( TVector3( sp.mXYZ.x(), sp.mXYZ.y(), sp.mXYZ.z() ), sp.mSector, sp.mTrackId, sp.mCov )
43  );
44  }
45 
46  setDCA(evTrack->dca().x(), evTrack->dca().y(), evTrack->dca().z());
47  mIdTruth = evTrack->idTruth();
48  mQATruth = evTrack->qaTruth();
49  mVtxIndex = evTrack->vertexIndex();
50 
51 }
52 
53 
54 void StMuFwdTrack::addEcalCluster( StMuFcsCluster* clu){
55  int n=mEcalClusters.GetSize();
56  for(int i=0; i<n; i++) if(mEcalClusters[i]==clu) return; //already there, do nothing
57  mEcalClusters.Add(clu);
58 }
59 void StMuFwdTrack::addHcalCluster( StMuFcsCluster* clu){
60  int n=mHcalClusters.GetSize();
61  for(int i=0; i<n; i++) if(mHcalClusters[i]==clu) return; //already there, do nothing
62  mHcalClusters.Add(clu);
63 }
64 
65 /* momentum
66  * get the track momentum at the first point (PV if included)
67  */
68 TVector3 StMuFwdTrack::momentum() const{
69  return mPrimaryMomentum;
70 }
71 
72 /* momentumAt
73  * get the track momentum at the nthh point (if available)
74  */
75 TVector3 StMuFwdTrack::momentumAt(size_t _id) const{
76  if ( _id >= mProjections.size() )
77  return TVector3( 0, 0, 0 );
78 
79  return mProjections[_id].mMom;
80 }
81 
82 char StMuFwdTrack::charge() const{
83  return mCharge;
84 }
85 
86 bool StMuFwdTrack::didFitConverge() const {
87  return mDidFitConverge;
88 }
89 
90 bool StMuFwdTrack::didFitConvergeFully() const {
91  return mDidFitConvergeFully;
92 }
93 
94 short StMuFwdTrack::numberOfFailedPoints() const {
95  return mNumberOfFailedPoints;
96 }
97 
98 double StMuFwdTrack::chi2() const {
99  return mChi2;
100 }
101 
102 double StMuFwdTrack::ndf() const {
103  return mNDF;
104 }
105 
106 double StMuFwdTrack::pval() const {
107  return mPval;
108 }
109 
110 short StMuFwdTrack::numberOfFitPoints() const {
111  return mNumberOfFitPoints;
112 }
113 
114 short StMuFwdTrack::numberOfSeedPoints() const {
115  return mNumberOfSeedPoints;
116 }
117 
118 
119 // StPtrVecFcsCluster& StMuFwdTrack::ecalClusters() { return mEcalClusters; }
120 // const StPtrVecFcsCluster& StMuFwdTrack::ecalClusters() const { return mEcalClusters; }
121 // void StMuFwdTrack::addEcalCluster(StFcsCluster* p){mEcalClusters.push_back(p);}
122 // void StMuFwdTrack::sortEcalClusterByET() {
123 // std::sort(mEcalClusters.begin(), mEcalClusters.end(), [](StFcsCluster* a, StFcsCluster* b) {
124 // return b->fourMomentum().perp() < a->fourMomentum().perp();
125 // });
126 // }
127 
128 // StPtrVecFcsCluster& StMuFwdTrack::hcalClusters() { return mHcalClusters; }
129 // const StPtrVecFcsCluster& StMuFwdTrack::hcalClusters() const { return mHcalClusters; }
130 // void StMuFwdTrack::addHcalCluster(StFcsCluster* p){mHcalClusters.push_back(p);}
131 // void StMuFwdTrack::sortHcalClusterByET() {
132 // std::sort(mHcalClusters.begin(), mHcalClusters.end(), [](StFcsCluster* a, StFcsCluster* b) {
133 // return b->fourMomentum().perp() < a->fourMomentum().perp();
134 // });
135 // }
136 
137 bool StMuFwdTrack::getProjectionFor( int detectorId,
138  StMuFwdTrackProjection &rProj,
139  size_t index ){
140  size_t count = 0;
141  for ( auto proj : mProjections ){
142  if (proj.mDetId == detectorId){
143  rProj.set( proj );
144  if ( count == index )
145  return true;
146  count++;
147  }
148  }
149  return false;
150 }