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