00001
00002
00003
00004
00006 #include <Stiostream.h>
00007 #include "StPeCTrack.h"
00008 #include "StEventTypes.h"
00009 #include "BetheBloch.h"
00010
00011
00012
00013 #include <math.h>
00014 ClassImp(StPeCTrack)
00015
00016 StPeCTrack::StPeCTrack() {
00017 }
00018
00019 StPeCTrack::~StPeCTrack() {
00020 }
00021
00022 #ifndef __CINT__
00023 StPeCTrack::StPeCTrack ( Int_t _primary, StTrack* trk) {
00024 set ( _primary, trk ) ;
00025 }
00026
00027 StPeCTrack::StPeCTrack(Int_t _primary, StMuTrack* trk)
00028 {
00029 set (_primary, trk);
00030 }
00031
00032 void StPeCTrack::set ( Int_t _primary, StTrack* trk) {
00033 key = trk->key() ;
00034 primary = _primary ;
00035 charge = trk->geometry()->charge();
00036 pt = trk->geometry()->momentum().perp();
00037 p = trk->geometry()->momentum().mag();
00038 psi = trk->geometry()->momentum().phi();
00039 eta = -::log(tan(trk->geometry()->momentum().theta()/2.));
00040 phi0 = trk->geometry()->origin().phi();
00041 z0 = trk->geometry()->origin().z();
00042 r0 = trk->geometry()->origin().perp();
00043
00044
00045
00046 dedx = 0. ;
00047 dedxZel = -9999.;
00048 dedxZmu = -9999.;
00049 dedxZpi = -9999.;
00050 dedxZk = -9999.;
00051 dedxZp = -9999.;
00052 length = -9999.;
00053 StSPtrVecTrackPidTraits& traits = trk->pidTraits();
00054 if ( &traits ) {
00055 StDedxPidTraits *dedxPid = 0 ;
00056 Int_t NTraits = traits.size();
00057 for( Int_t i=0; i<NTraits; i++) {
00058 if ( traits[i]->detector() == kTpcId ){
00059 dedxPid = dynamic_cast<StDedxPidTraits*>(traits[i]);
00060 if ( dedxPid && dedxPid->method() == kTruncatedMeanIdentifier )break;
00061 }
00062 }
00063 if ( dedxPid ){
00064 length= dedxPid->length();
00065 dedx = dedxPid->mean();
00066 dedxZel = getZdEdx(mMassElectron);
00067 dedxZmu = getZdEdx(mMassMuon);
00068 dedxZpi = getZdEdx(mMassPion);
00069 dedxZk = getZdEdx(mMassKaon);
00070 dedxZp = getZdEdx(mMassProton);
00071 nSigmaEl =0;
00072 nSigmaPi =0;
00073 nSigmaK =0;
00074 nSigmaP =0;
00075
00076 }
00077 nHits = trk->detectorInfo()->numberOfPoints() ;
00078 }
00079
00080
00081
00082
00083 }
00084
00085 void StPeCTrack::set(Int_t _primary, StMuTrack* trk)
00086 {
00087 key = trk->id();
00088 primary = _primary;
00089 charge = trk->charge();
00090 pt = trk->momentum().perp();
00091 p = trk->momentum().mag();
00092 psi = trk->momentum().phi();
00093 eta = -::log(tan(trk->momentum().theta()/2.));
00094 phi0 = trk->firstPoint().phi();
00095 z0 = trk->firstPoint().z();
00096 r0 = trk->firstPoint().perp();
00097 length= trk->length();
00098
00099 dedx = trk->dEdx();
00100
00101
00102
00103
00104
00105
00106
00107 dedxZel = trk->pidProbElectron();
00108 dedxZmu = -9999;
00109 dedxZpi = trk->pidProbPion();
00110 dedxZk = trk->pidProbKaon();
00111 dedxZp = trk->pidProbProton();
00112
00113 nSigmaEl = trk->nSigmaElectron();
00114
00115 nSigmaPi = trk->nSigmaPion();
00116 nSigmaK = trk->nSigmaKaon();
00117 nSigmaP = trk->nSigmaProton();
00118
00119 nHits = trk->nHits();
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129 return;
00130 }
00131
00132
00133 Float_t StPeCTrack::getZdEdx(Float_t mass) {
00134
00135
00136
00137 if ( ! mass || length<=0. ) { return -9999; }
00138 Double_t betaGamma = p / mass ;
00139
00140
00141 Double_t dedxBB= BetheBloch::Sirrf(betaGamma, length);
00142
00143 if (p && dedx && dedxBB ) {
00144 return log ( dedx/dedxBB);
00145 } else {
00146
00147
00148 return -9999.;
00149 }
00150 }
00151
00152 #endif
00153
00154
00155
00156