00001
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151 #ifndef StTrack_hh
00152 #define StTrack_hh
00153 #include "StObject.h"
00154 #include "StContainers.h"
00155 #include "StEnumerations.h"
00156 #include "StTrackTopologyMap.h"
00157 #include "StFunctional.h"
00158 #include "StTrackFitTraits.h"
00159
00160 class StParticleDefinition;
00161 class StVertex;
00162 class StTrackGeometry;
00163 class StTrackDetectorInfo;
00164 class StTrackPidTraits;
00165 class StTrackNode;
00166
00167 class StTrack : public StObject {
00168 public:
00169 StTrack();
00170 StTrack(const StTrack&);
00171 StTrack & operator=(const StTrack&);
00172 virtual ~StTrack();
00173
00174 virtual StTrackType type() const = 0;
00175 virtual const StVertex* vertex() const = 0;
00176 virtual Int_t key() const { return mKey; }
00177 Short_t flag() const;
00178 UInt_t flagExtension() const { return mFlagExtension; }
00179 UShort_t encodedMethod() const;
00180 bool finderMethod(StTrackFinderMethod) const;
00181 StTrackFittingMethod fittingMethod() const;
00182 Float_t impactParameter() const;
00183 Float_t length() const;
00184 UShort_t numberOfPossiblePoints() const;
00185 UShort_t numberOfPossiblePoints(StDetectorId) const;
00186 const StTrackTopologyMap& topologyMap() const;
00187 StTrackGeometry* geometry();
00188 const StTrackGeometry* geometry() const;
00189 StTrackGeometry* outerGeometry();
00190 const StTrackGeometry* outerGeometry() const;
00191 StTrackDetectorInfo* detectorInfo();
00192 const StTrackDetectorInfo* detectorInfo() const;
00193 StTrackFitTraits& fitTraits();
00194 const StTrackFitTraits& fitTraits() const;
00195 const StSPtrVecTrackPidTraits& pidTraits() const;
00196 StSPtrVecTrackPidTraits& pidTraits();
00197 StPtrVecTrackPidTraits pidTraits(StDetectorId) const;
00198 const StParticleDefinition* pidTraits(StPidAlgorithm&) const;
00199 StTrackNode* node();
00200 const StTrackNode* node() const;
00201 UShort_t seedQuality() const {return mSeedQuality;}
00202 Bool_t isCtbMatched() {return testBit(kCtbMatched);}
00203 Bool_t isToFMatched() {return testBit(kToFMatched);}
00204 Bool_t isBToFMatched() {return testBit(kToFMatched);}
00205 Bool_t isBemcMatched() {return testBit(kBemcMatched);}
00206 Bool_t isEemcMatched() {return testBit(kEemcMatched);}
00207
00208 Bool_t isCtbNotMatched() {return testBit(kCtbNotMatched);}
00209 Bool_t isToFNotMatched() {return testBit(kToFNotMatched);}
00210 Bool_t isBToFNotMatched() {return testBit(kToFNotMatched);}
00211 Bool_t isBemcNotMatched() {return testBit(kBemcNotMatched);}
00212 Bool_t isEemcNotMatched() {return testBit(kEemcNotMatched);}
00213
00214 Bool_t isDecayTrack() {return testBit(kDecayTrack);}
00215 Bool_t isPromptTrack() {return testBit(kPromptTrack);}
00216 Bool_t isPostXTrack() {return testBit(kPostXTrack);}
00217 Bool_t isMembraneCrossingTrack() {return testBit(kXMembrane);}
00218 Bool_t isShortTrack2EMC() {return testBit(kShortTrack2EMC);}
00219 Bool_t isRejected() {return testBit(kRejectedTrack);}
00220
00221 virtual void setCtbMatched() {setBit(kCtbMatched);}
00222 virtual void setToFMatched() {setBit(kToFMatched);}
00223 virtual void setBToFMatched() {setBit(kToFMatched);}
00224 virtual void setBemcMatched() {setBit(kBemcMatched);}
00225 virtual void setEemcMatched() {setBit(kEemcMatched);}
00226
00227 virtual void setCtbNotMatched() {setBit(kCtbNotMatched);}
00228 virtual void setToFNotMatched() {setBit(kToFNotMatched);}
00229 virtual void setBToFNotMatched() {setBit(kToFNotMatched);}
00230 virtual void setBemcNotMatched() {setBit(kBemcNotMatched);}
00231 virtual void setEemcNotMatched() {setBit(kEemcNotMatched);}
00232 virtual void setDecayTrack() {setBit(kDecayTrack);}
00233 virtual void setPromptTrack() {setBit(kPromptTrack);}
00234 virtual void setPostCrossingTrack() {setBit(kPostXTrack);}
00235 virtual void setMembraneCrossingTrack(){setBit(kXMembrane);}
00236 virtual void setShortTrack2EMC() {reSetBit(kRejectedTrack); setBit(kShortTrack2EMC);}
00237 virtual void setRejected() {setBit(kRejectedTrack);}
00238 virtual void setFlagExtension(UInt_t i){mFlagExtension = i;}
00239 void setFlag(Short_t);
00240 void setKey(Int_t val) { mKey = val; }
00241 void setEncodedMethod(UShort_t);
00242 void setImpactParameter(float);
00243 void setLength(float);
00244 void setTopologyMap(const StTrackTopologyMap&);
00245 void setGeometry(StTrackGeometry*);
00246 void setOuterGeometry(StTrackGeometry*);
00247 void setFitTraits(const StTrackFitTraits&);
00248 void addPidTraits(StTrackPidTraits*);
00249 void setDetectorInfo(StTrackDetectorInfo*);
00250 void setNode(StTrackNode*);
00251 Int_t bad() const;
00252 void setNumberOfPossiblePoints(unsigned char, StDetectorId);
00253 void setSeedQuality(UShort_t qa) {mSeedQuality = qa;}
00254 Int_t idTruth() const { return mIdTruth;}
00255 Int_t qaTruth() const { return mQuality; }
00256 Int_t idParentVx() const {return mIdParentVx;}
00257 void setIdTruth(Int_t idtru,Int_t qatru=0) {mIdTruth = (UShort_t) idtru; mQuality = (UShort_t) qatru;}
00258 void setIdTruth();
00259 void setIdParentVx(Int_t id) {mIdParentVx = id;}
00260
00261 void setBit(UInt_t f, Bool_t set) {(set) ? setBit(f) : reSetBit(f);}
00262 void setBit(UInt_t f) { mFlagExtension |= f; }
00263 void reSetBit(UInt_t f) { mFlagExtension &= ~(f); }
00264 Bool_t testBit(UInt_t f) const { return (Bool_t) ((mFlagExtension & f) != 0); }
00265 Int_t testBits(UInt_t f) const { return (Int_t) (mFlagExtension & f); }
00266 void invertBit(UInt_t f) { mFlagExtension ^= f; }
00267
00268 protected:
00269 void setNumberOfPossiblePoints(UShort_t);
00270
00271 protected:
00272 Char_t mBeg[1];
00273 Int_t mKey;
00274 Short_t mFlag;
00275 UInt_t mFlagExtension;
00276 UShort_t mEncodedMethod;
00277 UShort_t mSeedQuality;
00278 UChar_t mNumberOfPossiblePointsTpc;
00279 UChar_t mNumberOfPossiblePointsFtpcWest;
00280 UChar_t mNumberOfPossiblePointsFtpcEast;
00281 UChar_t mNumberOfPossiblePointsSvt;
00282 UChar_t mNumberOfPossiblePointsSsd;
00283 UChar_t mNumberOfPossiblePointsPxl;
00284 UChar_t mNumberOfPossiblePointsIst;
00285 Float_t mImpactParameter;
00286 Float_t mLength;
00287 StTrackGeometry *mGeometry;
00288 StTrackGeometry *mOuterGeometry;
00289 UShort_t mIdTruth;
00290 UShort_t mQuality;
00291 Int_t mIdParentVx;
00292 Char_t mEnd[1];
00293 StTrackTopologyMap mTopologyMap;
00294 StTrackFitTraits mFitTraits;
00295
00296
00297
00298 #ifdef __CINT__
00299 StObjLink mDetectorInfo;
00300 StObjLink mNode;
00301 #else
00302 StLink<StTrackDetectorInfo> mDetectorInfo;
00303 StLink<StTrackNode> mNode;
00304 #endif //__CINT__
00305
00306 StSPtrVecTrackPidTraits mPidTraitsVec;
00307
00308 ClassDef(StTrack,9)
00309 };
00310 #endif