00001
00002
00003
00004
00005
00006
00007
00016 #ifndef StMuTrack_h
00017 #define StMuTrack_h
00018
00019 #include "StMuDst.h"
00020 #include "StMuEvent.h"
00021 #include "StMuHelix.h"
00022 #include "StMuUtilities.h"
00023 #include "StMuProbPidTraits.h"
00024 #include "StMuBTofPidTraits.h"
00025 #include "StMuPrimaryTrackCovariance.h"
00026
00027
00028 #include "StEvent/StTrackTopologyMap.h"
00029 #include "StEvent/StRunInfo.h"
00030 #include "StEvent/StDcaGeometry.h"
00031 #include "StarClassLibrary/StPhysicalHelixD.hh"
00032 #include "StarClassLibrary/StThreeVectorD.hh"
00033 #include "StarClassLibrary/StThreeVectorF.hh"
00034 #include "StarClassLibrary/SystemOfUnits.h"
00035
00036 #include "TObject.h"
00037 #include "TVector.h"
00038
00039 #define __PROB_SCALE__ 1000.
00040 #define __SIGMA_SCALE__ 1000.
00041 #define __NOVALUE__ -999
00042
00043 class StRichSpectra;
00044 class StEvent;
00045 class StTrack;
00046 class StVertex;
00047 class StEmcGeom;
00048 class StEmcPosition;
00049 class StuProbabilityPidAlgorithm;
00050
00051 class TObjArray;
00052
00053 class StMuTrack : public TObject {
00054 public:
00055 StMuTrack(): mVertexIndex(0), mNHitsPossInner(0), mNHitsFitInner(0), mNHitsPossTpc(255), mNHitsFitTpc(255), mIndex2Cov(-1),
00056 mIdTruth(0), mQuality(0), mIdParentVx(0) {};
00057 StMuTrack(const StEvent*, const StTrack*, const StVertex*, int index2Global=-2, int index2RichSpectra=-2, bool l3=false, TObjArray *vtx_list=0);
00058 short id() const;
00059 short type() const;
00060 short flag() const;
00061 UInt_t flagExtension() const { return mFlagExtension; }
00062 int bad () const;
00064 int index2Global() const;
00065 int index2Cov() const;
00066 int index2RichSpectra() const;
00067 int index2BTofHit() const;
00068 int vertexIndex() const;
00069 const StMuTrack* globalTrack() const;
00070 const StMuTrack* primaryTrack() const;
00071 const StRichSpectra* richSpectra() const;
00072 const StMuBTofHit* tofHit() const;
00073 unsigned short nHits() const;
00074 unsigned short nHitsPoss() const;
00075 unsigned short nHitsPoss(StDetectorId) const;
00076 unsigned short nHitsDedx() const;
00077 unsigned short nHitsFit() const;
00078 unsigned short nHitsFit(StDetectorId) const;
00079 double pidProbElectron() const;
00080 double pidProbPion() const;
00081 double pidProbKaon() const;
00082 double pidProbProton() const;
00083 double nSigmaElectron() const;
00084 double nSigmaPion() const;
00085 double nSigmaKaon() const;
00086 double nSigmaProton() const;
00087 double dEdx() const;
00088 double chi2() const;
00089 double chi2prob() const;
00090 double chi2xy() const;
00091 double chi2z() const;
00092 double pt() const;
00093 double phi() const;
00094 double eta() const;
00095 double length() const;
00096 double lengthMeasured() const;
00097 StTrackTopologyMap topologyMap() const;
00098 Short_t charge() const;
00099 const StThreeVectorF &p() const;
00100 const StThreeVectorF &momentum() const;
00101 StThreeVectorF dca(Int_t vtx_id=-1) const;
00102 StThreeVectorF dcaGlobal(Int_t vtx_id=-1) const;
00103 Float_t dcaD(Int_t vtx_id=-1) const;
00104 Float_t dcaZ(Int_t vtx_id=-1) const;
00105 const StThreeVectorF &firstPoint() const;
00106 const StThreeVectorF &lastPoint() const;
00107 StPhysicalHelixD helix() const;
00108 StPhysicalHelixD outerHelix() const;
00109 const StMuProbPidTraits &probPidTraits() const;
00110 const StMuBTofPidTraits &btofPidTraits() const;
00111 void setBTofPidTraits(const StMuBTofPidTraits& pid);
00112 static void setProbabilityPidAlgorithm(StuProbabilityPidAlgorithm*);
00113 static void setProbabilityPidCentrality(double cent);
00114 virtual void Print(Option_t* option = "") const;
00115 void setIndex2BTofHit(int i) {mIndex2BTofHit=i;}
00116 void setIndex2Cov(int i) {mIndex2Cov=i;}
00117
00118
00119 TArrayI getTower(bool useExitRadius=false, int det=1) const;
00120 double energyBEMC() const;
00121 bool matchBEMC() const;
00122 Int_t idTruth() const { return mIdTruth;}
00123 Int_t qaTruth() const { return mQuality; }
00124 Int_t idParentVx() const {return mIdParentVx;}
00125 void setIdTruth(Int_t idtru,Int_t qatru=0) {mIdTruth = (UShort_t) idtru; mQuality = (UShort_t) qatru;}
00126 void setIdParentVx(Int_t id) {mIdParentVx = id;}
00127
00128 protected:
00129 Short_t mId;
00130 Short_t mType;
00131 Short_t mFlag;
00132 UInt_t mFlagExtension;
00133 Int_t mIndex2Global;
00134 Int_t mIndex2RichSpectra;
00135 Int_t mIndex2BTofHit;
00136 Int_t mVertexIndex;
00137 UChar_t mNHits;
00138 UChar_t mNHitsPoss;
00139 UChar_t mNHitsDedx;
00140 UChar_t mNHitsFit;
00141 UChar_t mNHitsPossInner;
00142 UChar_t mNHitsFitInner;
00143 UChar_t mNHitsPossTpc;
00144 UChar_t mNHitsFitTpc;
00145 UShort_t mPidProbElectron;
00146 UShort_t mPidProbPion;
00147 UShort_t mPidProbKaon;
00148 UShort_t mPidProbProton;
00149 Int_t mNSigmaElectron;
00150 Int_t mNSigmaPion;
00151 Int_t mNSigmaKaon;
00152 Int_t mNSigmaProton;
00153 Float_t mdEdx;
00154 Float_t mChiSqXY;
00155 Float_t mChiSqZ;
00156 Float_t mPt;
00157 Float_t mEta;
00158 Float_t mPhi;
00159 StTrackTopologyMap mTopologyMap;
00160 StThreeVectorF mP;
00161 StThreeVectorF mDCA;
00162 StThreeVectorF mDCAGlobal;
00163 StThreeVectorF mFirstPoint;
00164 StThreeVectorF mLastPoint;
00165 StMuHelix mHelix;
00166 StMuHelix mOuterHelix;
00167 StMuProbPidTraits mProbPidTraits;
00168 StMuBTofPidTraits mBTofPidTraits;
00169 Int_t mIndex2Cov;
00170
00171 UShort_t mIdTruth;
00172 UShort_t mQuality;
00173 Int_t mIdParentVx;
00174 void setIndex2Global(int i) {mIndex2Global=i;}
00175 void setIndex2RichSpectra(int i) {mIndex2RichSpectra=i;}
00176 void setVertexIndex(int i) { mVertexIndex=i; }
00177 StThreeVectorF dca(const StThreeVectorF &pos) const;
00178 StThreeVectorD dca(const StTrack*, const StVertex *vertex) const;
00179 StThreeVectorD momentumAtPrimaryVertex(const StEvent *event, const StTrack* track, const StVertex *vertex) const;
00180 void fillMuProbPidTraits(const StEvent*, const StTrack*);
00181 void fillMuBTofPidTraits(const StTrack*);
00182 static StuProbabilityPidAlgorithm* mProbabilityPidAlgorithm;
00183 static double mProbabilityPidCentrality;
00184 friend class StMuDst;
00185 friend class StMuDstFilterMaker;
00186 friend class StMuMomentumShiftMaker;
00187 ClassDef(StMuTrack,13)
00188 };
00189
00190 inline short StMuTrack::id() const {return mId;}
00191 inline short StMuTrack::type() const {return mType;}
00192 inline short StMuTrack::flag() const {return mFlag;}
00193 inline int StMuTrack::index2Global() const {return mIndex2Global;}
00194 inline int StMuTrack::index2Cov() const {return mIndex2Cov;}
00195 inline int StMuTrack::index2RichSpectra() const {return mIndex2RichSpectra;}
00196 inline int StMuTrack::index2BTofHit() const {return mIndex2BTofHit;}
00197 inline unsigned short StMuTrack::nHits() const {return mNHits;}
00198 inline unsigned short StMuTrack::nHitsDedx() const {return mNHitsDedx;}
00199 inline unsigned short StMuTrack::nHitsFit() const {return mNHitsFit;}
00200 inline double StMuTrack::pidProbElectron() const {return unPack(mPidProbElectron,__PROB_SCALE__);}
00201 inline double StMuTrack::pidProbPion() const {return unPack(mPidProbPion, __PROB_SCALE__);}
00202 inline double StMuTrack::pidProbKaon() const {return unPack(mPidProbKaon, __PROB_SCALE__);}
00203 inline double StMuTrack::pidProbProton() const {return unPack(mPidProbProton, __PROB_SCALE__);}
00204 inline double StMuTrack::nSigmaElectron() const {return unPack(mNSigmaElectron, __SIGMA_SCALE__);}
00205 inline double StMuTrack::nSigmaPion() const {return unPack(mNSigmaPion, __SIGMA_SCALE__);}
00206 inline double StMuTrack::nSigmaKaon() const {return unPack(mNSigmaKaon, __SIGMA_SCALE__);}
00207 inline double StMuTrack::nSigmaProton() const {return unPack(mNSigmaProton, __SIGMA_SCALE__);}
00208 inline double StMuTrack::dEdx() const {return mdEdx;}
00209 inline double StMuTrack::chi2xy() const {return mChiSqXY;}
00210 inline double StMuTrack::chi2z() const {return mChiSqZ;}
00211 inline double StMuTrack::chi2() const {return mChiSqXY;}
00212 inline double StMuTrack::chi2prob() const {return mChiSqZ;}
00213 inline StTrackTopologyMap StMuTrack::topologyMap() const {return mTopologyMap;}
00214 inline short StMuTrack::charge() const {return mHelix.q();}
00215 inline double StMuTrack::pt() const {return mPt;}
00216 inline double StMuTrack::eta() const {return mEta;}
00217 inline double StMuTrack::phi() const {return mPhi;}
00218 inline const StThreeVectorF &StMuTrack::p() const {return mP;}
00219 inline const StThreeVectorF &StMuTrack::momentum() const {return mP;}
00220 inline const StThreeVectorF &StMuTrack::firstPoint() const {return mFirstPoint;}
00221 inline const StThreeVectorF &StMuTrack::lastPoint() const {return mLastPoint;}
00224 inline const StMuProbPidTraits &StMuTrack::probPidTraits() const { return mProbPidTraits;}
00225 inline const StMuBTofPidTraits &StMuTrack::btofPidTraits() const { return mBTofPidTraits;}
00226 inline void StMuTrack::setProbabilityPidAlgorithm(StuProbabilityPidAlgorithm* p) { mProbabilityPidAlgorithm=p;}
00227 inline void StMuTrack::setProbabilityPidCentrality(double cent) { mProbabilityPidCentrality = cent;}
00228 inline void StMuTrack::setBTofPidTraits(const StMuBTofPidTraits& pid) { mBTofPidTraits = pid; }
00229
00230 inline const StMuTrack* StMuTrack::globalTrack() const { return (mIndex2Global>=0) ? (StMuTrack*)StMuDst::array(muGlobal)->UncheckedAt(mIndex2Global) :0;}
00231 inline const StRichSpectra* StMuTrack::richSpectra() const { return (mIndex2RichSpectra>=0) ? (StRichSpectra*)StMuDst::array(muRich)->UncheckedAt(mIndex2RichSpectra) : 0;}
00232 inline const StMuBTofHit* StMuTrack::tofHit() const { return (mIndex2BTofHit>=0) ? (StMuBTofHit*)StMuDst::btofArray(muBTofHit)->UncheckedAt(mIndex2BTofHit) :0;}
00233 ostream& operator<<(ostream& os, StMuTrack const & v);
00234 #endif
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360
00361
00362
00363
00364