00001
00002
00003
00004
00005
00006
00007
00008
00009
00011
00012 #ifndef StFlowTrack_h
00013 #define StFlowTrack_h
00014 #include <string.h>
00015 #include <math.h>
00016 #include "Rtypes.h"
00017 #include "StObject.h"
00018 #include "StFlowConstants.h"
00019 #include "StTrackTopologyMap.h"
00020 #include "StThreeVectorD.hh"
00021
00022 class StFlowTrack : public StObject {
00023
00024 public:
00025
00026 StFlowTrack();
00027 virtual ~StFlowTrack();
00028
00029 Float_t PidPiPlus() const;
00030 Float_t PidPiMinus() const;
00031 Float_t PidProton() const;
00032 Float_t PidKaonMinus() const;
00033 Float_t PidKaonPlus() const;
00034 Float_t PidAntiProton() const;
00035 Float_t PidDeuteron() const;
00036 Float_t PidAntiDeuteron() const;
00037 Float_t PidElectron() const;
00038 Float_t PidPositron() const;
00039
00040 Float_t Mass() const;
00041 Int_t id() const;
00042 Int_t Flag() const;
00043
00044 const Char_t* Pid() const;
00045 Float_t Phi() const;
00046 Float_t PhiGlobal() const;
00047 Float_t Eta() const;
00048 Float_t EtaGlobal() const;
00049 Float_t ZFirstPoint() const;
00050 Float_t ZLastPoint() const;
00051 Float_t Dedx() const;
00052 Float_t Pt() const;
00053 Float_t PtGlobal() const;
00054 Float_t P() const;
00055 Float_t PGlobal() const;
00056 Float_t Y() const;
00057 Short_t Charge() const;
00058 Float_t Dca() const;
00059 Float_t DcaSigned() const;
00060 Float_t DcaGlobal() const;
00061 Float_t Chi2() const;
00062 Int_t FitPts() const;
00063 Int_t MaxPts() const;
00064 Int_t Nhits() const;
00065 Int_t NdedxPts() const;
00066 Float_t TrackLength() const;
00067 Int_t Select(Int_t harmonic, Int_t selection, Int_t subevent= -1) const;
00068 Int_t MostLikelihoodPID() const;
00069 Float_t MostLikelihoodProb() const;
00070 Int_t ExtrapTag() const;
00071 Float_t ElectronPositronProb() const;
00072 Float_t PionPlusMinusProb() const;
00073 Float_t KaonPlusMinusProb() const;
00074 Float_t ProtonPbarProb() const;
00075 StThreeVectorD DcaGlobal3() const;
00076 const StTrackTopologyMap& TopologyMap() const;
00077
00078 void SetPidPiPlus(Float_t);
00079 void SetPidPiMinus(Float_t);
00080 void SetPidProton(Float_t);
00081 void SetPidKaonMinus(Float_t);
00082 void SetPidKaonPlus(Float_t);
00083 void SetPidAntiProton(Float_t);
00084 void SetPidDeuteron(Float_t);
00085 void SetPidAntiDeuteron(Float_t);
00086 void SetPidElectron(Float_t);
00087 void SetPidPositron(Float_t);
00088 void SetPid(const Char_t*);
00089 void SetPhi(Float_t);
00090 void SetPhiGlobal(Float_t);
00091 void SetEta(Float_t);
00092 void SetEtaGlobal(Float_t);
00093 void SetZFirstPoint(Float_t);
00094 void SetZLastPoint(Float_t);
00095 void SetDedx(Float_t);
00096 void SetPt(Float_t);
00097 void SetPtGlobal(Float_t);
00098 void SetCharge(Short_t);
00099 void SetDca(Float_t);
00100 void SetDcaSigned(Float_t);
00101 void SetDcaGlobal(Float_t);
00102 void SetChi2(Float_t);
00103 void SetFitPts(Int_t);
00104 void SetMaxPts(Int_t);
00105 void SetNhits(Int_t);
00106 void SetNdedxPts(Int_t);
00107 void SetTrackLength(Float_t);
00108 void SetSelect(Int_t harmonic, Int_t selection);
00109 void SetSubevent(Int_t harmonic, Int_t selection, Int_t subevent);
00110 void SetMostLikelihoodPID(Int_t);
00111 void SetMostLikelihoodProb(Float_t);
00112 void SetExtrapTag(Int_t);
00113 void SetElectronPositronProb(Float_t);
00114 void SetPionPlusMinusProb(Float_t);
00115 void SetKaonPlusMinusProb(Float_t);
00116 void SetProtonPbarProb(Float_t);
00117 void SetDcaGlobal3(StThreeVectorD gdca3);
00118 void SetTopologyMap(StTrackTopologyMap map);
00119
00120 void SetMass(Float_t);
00121 void Setid(int);
00122 void SetFlag(int);
00123
00124 private:
00125
00126 Int_t mPidPiPlus;
00127 Int_t mPidPiMinus;
00128 Int_t mPidProton;
00129 Int_t mPidKaonPlus;
00130 Int_t mPidKaonMinus;
00131 Int_t mPidAntiProton;
00132 Int_t mPidDeuteron;
00133 Int_t mPidAntiDeuteron;
00134 Int_t mPidElectron;
00135 Int_t mPidPositron;
00136 Char_t mPid[12];
00137 Float_t mPhi;
00138 Float_t mPhiGlobal;
00139 Float_t mEta;
00140 Float_t mEtaGlobal;
00141 Float_t mZFirstPoint;
00142 Float_t mZLastPoint;
00143 Float_t mDedx;
00144 Float_t mPt;
00145 Float_t mPtGlobal;
00146 Short_t mCharge;
00147 Float_t mDca;
00148 Float_t mDcaSigned;
00149 Float_t mDcaGlobal;
00150 Float_t mChi2;
00151 Int_t mFitPts;
00152 Int_t mMaxPts;
00153 Int_t mNhits;
00154 Int_t mNdedxPts;
00155 Float_t mTrackLength;
00156 Int_t mSelection;
00157 Short_t mSubevent[Flow::nHars][Flow::nSels];
00158 static Float_t maxInt;
00159 Int_t mMostLikelihoodPID;
00160 Float_t mMostLikelihoodProb;
00161 Int_t mExtrapTag;
00162 Float_t mElectronPositronProb;
00163 Float_t mPionPlusMinusProb;
00164 Float_t mKaonPlusMinusProb;
00165 Float_t mProtonPbarProb;
00166 StThreeVectorD mDcaGlobal3;
00167 StTrackTopologyMap mTopology;
00168
00169 Float_t mMass;
00170 Int_t mId;
00171 Int_t mFlag;
00172
00173 ClassDef(StFlowTrack, 1)
00174 };
00175
00176 inline Float_t StFlowTrack::PidPiPlus() const { return mPidPiPlus/1000.; }
00177 inline Float_t StFlowTrack::PidPiMinus() const { return mPidPiMinus/1000.; }
00178 inline Float_t StFlowTrack::PidProton() const { return mPidProton/1000.; }
00179 inline Float_t StFlowTrack::PidKaonMinus() const { return mPidKaonMinus/1000.; }
00180 inline Float_t StFlowTrack::PidKaonPlus() const { return mPidKaonPlus/1000.; }
00181 inline Float_t StFlowTrack::PidAntiProton() const { return mPidAntiProton/1000.; }
00182 inline Float_t StFlowTrack::PidDeuteron() const { return mPidDeuteron/1000.; }
00183 inline Float_t StFlowTrack::PidAntiDeuteron() const { return mPidAntiDeuteron/1000.; }
00184 inline Float_t StFlowTrack::PidElectron() const { return mPidElectron/1000.; }
00185 inline Float_t StFlowTrack::PidPositron() const { return mPidPositron/1000.; }
00186 inline const Char_t* StFlowTrack::Pid() const { return mPid; }
00187 inline Float_t StFlowTrack::Phi() const { return mPhi; }
00188 inline Float_t StFlowTrack::PhiGlobal() const { return mPhiGlobal; }
00189 inline Float_t StFlowTrack::Eta() const { return mEta; }
00190 inline Float_t StFlowTrack::EtaGlobal() const { return mEtaGlobal; }
00191 inline Float_t StFlowTrack::ZFirstPoint() const { return mZFirstPoint; }
00192 inline Float_t StFlowTrack::ZLastPoint() const { return mZLastPoint; }
00193 inline Float_t StFlowTrack::Dedx() const { return mDedx; }
00194 inline Float_t StFlowTrack::Pt() const { return mPt; }
00195 inline Float_t StFlowTrack::PtGlobal() const { return mPtGlobal; }
00196 inline Short_t StFlowTrack::Charge() const { return mCharge; }
00197 inline Float_t StFlowTrack::Dca() const { return mDca; }
00198 inline Float_t StFlowTrack::DcaSigned() const { return mDcaSigned; }
00199 inline Float_t StFlowTrack::DcaGlobal() const { return mDcaGlobal; }
00200 inline Float_t StFlowTrack::Chi2() const { return mChi2; }
00201 inline Int_t StFlowTrack::FitPts() const { return mFitPts; }
00202 inline Int_t StFlowTrack::MaxPts() const { return mMaxPts; }
00203 inline Int_t StFlowTrack::Nhits() const { return mNhits; }
00204 inline Int_t StFlowTrack::NdedxPts() const { return mNdedxPts; }
00205 inline Float_t StFlowTrack::TrackLength() const { return mTrackLength; }
00206 inline Int_t StFlowTrack::MostLikelihoodPID() const
00207 { return mMostLikelihoodPID; }
00208 inline Float_t StFlowTrack::MostLikelihoodProb() const
00209 { return mMostLikelihoodProb; }
00210 inline Int_t StFlowTrack::ExtrapTag() const { return mExtrapTag; }
00211 inline Float_t StFlowTrack::ElectronPositronProb() const { return mElectronPositronProb; }
00212 inline Float_t StFlowTrack::PionPlusMinusProb() const { return mPionPlusMinusProb; }
00213 inline Float_t StFlowTrack::KaonPlusMinusProb() const { return mKaonPlusMinusProb; }
00214 inline Float_t StFlowTrack::ProtonPbarProb() const { return mProtonPbarProb; }
00215 inline StThreeVectorD StFlowTrack::DcaGlobal3() const { return mDcaGlobal3; }
00216 inline const StTrackTopologyMap& StFlowTrack::TopologyMap() const { return mTopology; }
00217
00218 inline Float_t StFlowTrack::Mass() const { return mMass; }
00219 inline Int_t StFlowTrack::id() const { return mId; }
00220 inline Int_t StFlowTrack::Flag() const { return mFlag; }
00221
00222 inline Float_t StFlowTrack::P() const {
00223 float momentum = mPt/::sqrt(1-(tanh(mEta)*tanh(mEta)));
00224 return momentum; }
00225
00226 inline Float_t StFlowTrack::PGlobal() const {
00227 float momentum = mPtGlobal/::sqrt(1-(tanh(mEtaGlobal)*tanh(mEtaGlobal)));
00228 return momentum; }
00229
00230 inline Float_t StFlowTrack::Y() const {
00231 float M = 0.139;
00232 if (strcmp(mPid, "none") == 0) { M = 0.139; }
00233 else if (strcmp(mPid, "pi+") == 0) { M = 0.139; }
00234 else if (strcmp(mPid, "pi-") == 0) { M = 0.139; }
00235 else if (strcmp(mPid, "pr+") == 0) { M = 0.938; }
00236 else if (strcmp(mPid, "pr-") == 0) { M = 0.938; }
00237 else if (strcmp(mPid, "k+") == 0) { M = 0.494; }
00238 else if (strcmp(mPid, "k-") == 0) { M = 0.494; }
00239 else if (strcmp(mPid, "d+") == 0) { M = 1.876; }
00240 else if (strcmp(mPid, "d-") == 0) { M = 1.876; }
00241 else if (strcmp(mPid, "e-") == 0) { M = 0.0005; }
00242 else if (strcmp(mPid, "e+") == 0) { M = 0.0005; }
00243 double Pz = ::sqrt(this->P()*this->P() - mPt*mPt);
00244 if (mEta < 0) { Pz = -Pz; }
00245 double E = ::sqrt(this->P()*this->P() + M*M);
00246 float rapidity = 0.5*::log((E + Pz)/(E - Pz));
00247 return rapidity;
00248 }
00249
00250 inline Int_t StFlowTrack::Select(Int_t harmonic, Int_t selection,
00251 Int_t subevent) const {
00252 if (subevent == -1 || subevent == mSubevent[harmonic][selection]) {
00253 int bitShift = harmonic + Flow::nHars * selection;
00254 return (mSelection & (1 << bitShift)) ? kTRUE : kFALSE;
00255 }
00256 return kFALSE;
00257 }
00258
00259 inline void StFlowTrack::SetMostLikelihoodPID(Int_t val) {
00260 mMostLikelihoodPID=val; }
00261
00262 inline void StFlowTrack::SetMostLikelihoodProb(Float_t val) {
00263 mMostLikelihoodProb=val; }
00264
00265 inline void StFlowTrack::SetExtrapTag(Int_t val) {
00266 mExtrapTag=val; }
00267
00268 inline void StFlowTrack::SetElectronPositronProb(Float_t val) {
00269 mElectronPositronProb = val; }
00270
00271 inline void StFlowTrack::SetPionPlusMinusProb(Float_t val) {
00272 mPionPlusMinusProb = val; }
00273
00274 inline void StFlowTrack::SetKaonPlusMinusProb(Float_t val) {
00275 mKaonPlusMinusProb = val; }
00276
00277 inline void StFlowTrack::SetProtonPbarProb(Float_t val) {
00278 mProtonPbarProb = val; }
00279
00280 inline void StFlowTrack::SetPidPiPlus(Float_t pid) {
00281 if (fabs(pid) > maxInt) pid = maxInt; mPidPiPlus = (Int_t)(pid*1000.); }
00282
00283 inline void StFlowTrack::SetPidPiMinus(Float_t pid) {
00284 if (fabs(pid) > maxInt) pid = maxInt; mPidPiMinus = (Int_t)(pid*1000.); }
00285
00286 inline void StFlowTrack::SetPidProton(Float_t pid) {
00287 if (fabs(pid) > maxInt) pid = maxInt; mPidProton = (Int_t)(pid*1000.); }
00288
00289 inline void StFlowTrack::SetPidKaonMinus(Float_t pid) {
00290 if (fabs(pid) > maxInt) pid = maxInt; mPidKaonMinus = (Int_t)(pid*1000.); }
00291
00292 inline void StFlowTrack::SetPidKaonPlus(Float_t pid) {
00293 if (fabs(pid) > maxInt) pid = maxInt; mPidKaonPlus = (Int_t)(pid*1000.); }
00294
00295 inline void StFlowTrack::SetPidAntiProton(Float_t pid) {
00296 if (fabs(pid) > maxInt) pid = maxInt; mPidAntiProton = (Int_t)(pid*1000.); }
00297
00298 inline void StFlowTrack::SetPidDeuteron(Float_t pid) {
00299 if (fabs(pid) > maxInt) pid = maxInt; mPidDeuteron = (Int_t)(pid*1000.); }
00300
00301 inline void StFlowTrack::SetPidAntiDeuteron(Float_t pid) {
00302 if (fabs(pid) > maxInt) pid = maxInt; mPidAntiDeuteron = (Int_t)(pid*1000.); }
00303
00304 inline void StFlowTrack::SetPidElectron(Float_t pid) {
00305 if (fabs(pid) > maxInt) pid = maxInt; mPidElectron = (Int_t)(pid*1000.); }
00306
00307 inline void StFlowTrack::SetPidPositron(Float_t pid) {
00308 if (fabs(pid) > maxInt) pid = maxInt; mPidPositron = (Int_t)(pid*1000.); }
00309
00310 inline void StFlowTrack::SetPid(const Char_t* pid) { strncpy(mPid, pid, 9);
00311 mPid[9] = '\0'; }
00312 inline void StFlowTrack::SetPhi(Float_t phi) { mPhi = phi; }
00313
00314 inline void StFlowTrack::SetPhiGlobal(Float_t gphi) { mPhiGlobal = gphi; }
00315
00316 inline void StFlowTrack::SetEta(Float_t eta) { mEta = eta; }
00317
00318 inline void StFlowTrack::SetEtaGlobal(Float_t geta) { mEtaGlobal = geta; }
00319
00320 inline void StFlowTrack::SetZFirstPoint(Float_t zFirst) { mZFirstPoint = zFirst; }
00321
00322 inline void StFlowTrack::SetZLastPoint(Float_t zLast) { mZLastPoint = zLast; }
00323
00324 inline void StFlowTrack::SetDedx(Float_t dedx) { mDedx = dedx; }
00325
00326 inline void StFlowTrack::SetPt(Float_t pt) { mPt = pt; }
00327
00328 inline void StFlowTrack::SetPtGlobal(Float_t gpt) { mPtGlobal = gpt; }
00329
00330 inline void StFlowTrack::SetCharge(Short_t charge) { mCharge = charge; }
00331
00332 inline void StFlowTrack::SetDca(Float_t dca) { mDca = dca; }
00333
00334 inline void StFlowTrack::SetDcaSigned(Float_t sdca) { mDcaSigned = sdca; }
00335
00336 inline void StFlowTrack::SetDcaGlobal(Float_t gdca) { mDcaGlobal = gdca; }
00337
00338 inline void StFlowTrack::SetChi2(Float_t chi2) { mChi2 = chi2; }
00339
00340 inline void StFlowTrack::SetFitPts(Int_t fitPts) { mFitPts = fitPts; }
00341
00342 inline void StFlowTrack::SetMaxPts(Int_t maxPts) { mMaxPts = maxPts; }
00343
00344 inline void StFlowTrack::SetNhits(Int_t nhits) { mNhits = nhits; }
00345
00346 inline void StFlowTrack::SetNdedxPts(Int_t ndedxPts) { mNdedxPts = ndedxPts; }
00347
00348 inline void StFlowTrack::SetTrackLength(Float_t tl) { mTrackLength = tl; }
00349
00350 inline void StFlowTrack::SetSelect(Int_t harmonic, Int_t selection) {
00351 int bitShift = harmonic + Flow::nHars * selection;
00352 mSelection |= 1 << bitShift; }
00353
00354 inline void StFlowTrack::SetSubevent(Int_t harmonic, Int_t selection,
00355 Int_t subevent) { mSubevent[harmonic][selection] = subevent; }
00356
00357 inline void StFlowTrack::SetDcaGlobal3(StThreeVectorD gdca3) { mDcaGlobal3 = gdca3; }
00358
00359 inline void StFlowTrack::SetTopologyMap(StTrackTopologyMap map) { mTopology = map; }
00360
00361 inline void StFlowTrack::SetMass(Float_t mass) { mMass = mass; }
00362
00363 inline void StFlowTrack::Setid(Int_t id) {mId = id;}
00364
00365 inline void StFlowTrack::SetFlag(Int_t flag) {mFlag = flag;}
00366
00367 #endif
00368
00370
00371
00372
00373
00374
00375
00376
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402
00403
00404
00405
00406
00407
00408
00409
00410
00411
00412
00413
00414
00415
00416
00417
00418
00419
00420
00421
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431
00432
00433
00434
00435
00436
00437
00438
00439
00440
00441
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462
00463
00464
00465
00466
00467
00468
00469
00470
00471
00472
00473
00474
00475
00476
00477
00478
00479
00480
00481
00482
00483
00484
00485
00486
00487
00488
00489
00490
00491
00492
00493
00494
00495
00496
00497