123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- #include "StPicoTrack.h"
- #include "StPicoCut.h"
- #include "StPicoConstants.h"
- #include "StPicoDstMaker.h"
- #include "TVector2.h"
- #include "StMuDSTMaker/COMMON/StMuDst.h"
- #include "StMuDSTMaker/COMMON/StMuTrack.h"
- #include "StMuDSTMaker/COMMON/StMuEvent.h"
- #include "StMuDSTMaker/COMMON/StMuBTofHit.h"
- #include "StMuDSTMaker/COMMON/StMuBTofPidTraits.h"
- ClassImp(StPicoTrack)
- //----------------------------------------------------------------------------------
- StPicoTrack::StPicoTrack()
- {
- Clear();
- }
- /////////////////////////////////////////////////////////////////////////////////////////
- // t - the global track. p - the associated primary track from the first primary vertex
- /////////////////////////////////////////////////////////////////////////////////////////
- //----------------------------------------------------------------------------------
- StPicoTrack::StPicoTrack(StMuTrack* t, StMuTrack* p, float phi_weight, int flowFlag, double B,
- int id, int adc0, float* e, float* dist, int* nhit, int* ntow)
- {
- Clear();
- if(!t || t->type()!=global || (p && ( p->type()!=primary || p->id()!=t->id() ) ) ) {
- LOG_WARN << " Bad StPicoTrack constructor ...... Check!" << endm;
- } else {
- mId = (UShort_t)t->id();
- mChi2 = (t->chi2()*1000.>Pico::USHORTMAX) ? Pico::USHORTMAX : (UShort_t)(TMath::Nint(t->chi2()*1000.));
- mGMomentum = t->helix().momentum(B*kilogauss);
- if(p) {
- mPMomentum = p->p();
- mChi2Prob = (p->chi2prob()*1000.>Pico::USHORTMAX) ? Pico::USHORTMAX : (UShort_t)(TMath::Nint(p->chi2prob()*1000.));
- } else {
- mPMomentum.set(0.,0.,0.);
- mChi2Prob = Pico::USHORTMAX ;
- }
- StThreeVectorF o = t->helix().origin();
- mOriginX = (fabs(o.x()*100.)>Pico::SHORTMAX) ? Pico::SHORTMAX : (Short_t)(TMath::Nint(o.x()*100.));
- mOriginY = (fabs(o.y()*100.)>Pico::SHORTMAX) ? Pico::SHORTMAX : (Short_t)(TMath::Nint(o.y()*100.));
- mOriginZ = (fabs(o.z()*100.)>Pico::SHORTMAX) ? Pico::SHORTMAX : (Short_t)(TMath::Nint(o.z()*100.));
- int q = t->charge();
- mGDca = (t->dcaGlobal().mag()*1000.>Pico::USHORTMAX) ? Pico::USHORTMAX : (UShort_t)(TMath::Nint(t->dcaGlobal().mag()*1000.));
- mDedx = (t->dEdx()*1e6*1000.>Pico::USHORTMAX) ? Pico::USHORTMAX : (UShort_t)(TMath::Nint(t->dEdx()*1e6*1000.));
- int flag = t->flag();
- if(flag/100<7) { // TPC tracks
- mNHitsFit = (UChar_t)(t->nHitsFit(kTpcId)*q);
- mNHitsMax = (Char_t)(t->nHitsPoss(kTpcId));
- } else { // FTPC tracks
- if(mGMomentum.pseudoRapidity()>0.) {
- mNHitsFit = (UChar_t)(t->nHitsFit(kFtpcWestId)*q);
- mNHitsMax = (Char_t)(t->nHitsPoss(kFtpcWestId));
- } else {
- mNHitsFit = (UChar_t)(t->nHitsFit(kFtpcEastId)*q);
- mNHitsMax = (Char_t)(t->nHitsPoss(kFtpcEastId));
- }
- }
- mNHitsDedx = (Char_t)(t->nHitsDedx());
- mNSigmaPion = (fabs(t->nSigmaPion()*100.)>Pico::SHORTMAX) ? Pico::SHORTMAX : (Short_t)(TMath::Nint(t->nSigmaPion()*100.));
- mNSigmaKaon = (fabs(t->nSigmaKaon()*100.)>Pico::SHORTMAX) ? Pico::SHORTMAX : (Short_t)(TMath::Nint(t->nSigmaKaon()*100.));
- mNSigmaProton = (fabs(t->nSigmaProton()*100.)>Pico::SHORTMAX) ? Pico::SHORTMAX : (Short_t)(TMath::Nint(t->nSigmaProton()*100.));
- mNSigmaElectron = (fabs(t->nSigmaElectron()*100.)>Pico::SHORTMAX) ? Pico::SHORTMAX : (Short_t)(TMath::Nint(t->nSigmaElectron()*100.));
- // Flow analysis
- mFlowFlag = (UChar_t)(flowFlag);
- #if 0
- if(mFlowFlag==others) {
- mQXi = 0.;
- mQYi = 0.;
- } else {
- float pt = mPMomentum.perp();
- float pt_weight = (pt<2.) ? pt : 2.;
- mQXi = pt_weight * phi_weight * TMath::Cos(2.*mPMomentum.phi());
- mQYi = pt_weight * phi_weight * TMath::Sin(2.*mPMomentum.phi());
- if(mQXi > 10. || mQYi > 10.) {
- LOG_WARN << " WARN!!! something is wrong with this Qi " << mQXi << " " << mQYi << " flag=" << flowFlag << " phi_weight=" << phi_weight << " pt=" << pt << endm;
- }
- }
- #endif
- // TOF
- StMuBTofHit *btofHit = (StMuBTofHit *)t->tofHit();
- if(btofHit) {
- int tray = btofHit->tray(); int module = btofHit->module(); int cell = btofHit->cell();
- float tof = t->btofPidTraits().timeOfFlight();
- float beta = (p) ? p->btofPidTraits().beta() : -999.;
- StThreeVectorF pos = t->btofPidTraits().position();
- mBTofCellId = (Short_t)((tray-1)*192+(module-1)*6+(cell-1));
- mBTofMatchFlag = (UChar_t)(t->btofPidTraits().matchFlag());
- if(tof<0) { mBTof = 0; }
- else { mBTof = (tof*1000.>Pico::USHORTMAX) ? Pico::USHORTMAX : (UShort_t)(TMath::Nint(tof*1000.)); }
- if(beta<0) { mBTofBeta = 0; }
- else { mBTofBeta = (beta*20000.>Pico::USHORTMAX) ? Pico::USHORTMAX : (UShort_t)(TMath::Nint(beta*20000.)); }
- mBTofHitPosX = (fabs(pos.x()*100.)>Pico::SHORTMAX) ? Pico::SHORTMAX : (Short_t)(TMath::Nint(pos.x()*100.));
- mBTofHitPosY = (fabs(pos.y()*100.)>Pico::SHORTMAX) ? Pico::SHORTMAX : (Short_t)(TMath::Nint(pos.y()*100.));
- mBTofHitPosZ = (fabs(pos.z()*100.)>Pico::SHORTMAX) ? Pico::SHORTMAX : (Short_t)(TMath::Nint(pos.z()*100.));
- mBTofYLocal = (fabs(t->btofPidTraits().yLocal())*1000.>Pico::SHORTMAX) ? Pico::SHORTMAX : (Short_t)(TMath::Nint(t->btofPidTraits().yLocal()*1000.));
- mBTofZLocal = (fabs(t->btofPidTraits().zLocal())*1000.>Pico::SHORTMAX) ? Pico::SHORTMAX : (Short_t)(TMath::Nint(t->btofPidTraits().zLocal()*1000.));
- }
- #if EMCON == 1
- // EMC - filled in a separated function
- mBEMCId = (id>Pico::SHORTMAX) ? -1 : (Short_t)id;
- mBTOWADC0 = (adc0>Pico::USHORTMAX) ? Pico::USHORTMAX : (UShort_t)adc0;
- mBTOWE0 = (e[0]*1000.>Pico::SHORTMAX) ? Pico::SHORTMAX : (Short_t)(TMath::Nint(e[0]*1000.));
- mBTOWE = (e[1]*1000.>Pico::SHORTMAX) ? Pico::SHORTMAX : (Short_t)(TMath::Nint(e[1]*1000.));
- mBEMCDistZ = (fabs(dist[0]*100.)>Pico::SHORTMAX) ? Pico::SHORTMAX : (Short_t)(TMath::Nint(dist[0]*100.));
- mBEMCDistPhi = (fabs(dist[1]*10000.)>Pico::SHORTMAX) ? Pico::SHORTMAX : (Short_t)(TMath::Nint(dist[1]*10000.));
- mBSMDNEta = (nhit[0]>Pico::UCHARMAX) ? Pico::UCHARMAX : (UChar_t)(nhit[0]);
- mBSMDNPhi = (nhit[1]>Pico::UCHARMAX) ? Pico::UCHARMAX : (UChar_t)(nhit[1]);
- mBTOWId = (ntow[0]<=0 || ntow[0]>4800) ? -1 : (Short_t)ntow[0];
- mBTOWId23 = (ntow[1]<0 || ntow[1]>=9 || ntow[2]<0 || ntow[2]>=9) ? -1 : (Char_t)(ntow[1]*10+ntow[2]);
- mBTOWE1 = (e[2]*1000.>Pico::SHORTMAX) ? Pico::SHORTMAX : (Short_t)(TMath::Nint(e[2]*1000.));
- mBTOWE2 = (e[3]*1000.>Pico::SHORTMAX) ? Pico::SHORTMAX : (Short_t)(TMath::Nint(e[3]*1000.));
- mBTOWE3 = (e[4]*1000.>Pico::SHORTMAX) ? Pico::SHORTMAX : (Short_t)(TMath::Nint(e[4]*1000.));
- mBTOWDistEta = (fabs(dist[2]*10000.)>Pico::SHORTMAX) ? Pico::SHORTMAX : (Short_t)(TMath::Nint(dist[2]*10000.));
- mBTOWDistPhi = (fabs(dist[3]*10000.)>Pico::SHORTMAX) ? Pico::SHORTMAX : (Short_t)(TMath::Nint(dist[3]*10000.));
- #endif
- }// end if
- }
- //----------------------------------------------------------------------------------
- StPicoTrack::~StPicoTrack()
- { /* noop */ }
- //----------------------------------------------------------------------------------
- void StPicoTrack::Clear(const Option_t* opt)
- {
- mId = 0;
- mChi2 = Pico::USHORTMAX;
- mChi2Prob = Pico::USHORTMAX;
- mGMomentum.set(0.,0.,0.);
- mPMomentum.set(0.,0.,0.);
- mFlowFlag = 0;
- // mQXi = 0.;
- // mQYi = 0.;
- mOriginX = 0;
- mOriginY = 0;
- mOriginZ = 0;
- mGDca = Pico::USHORTMAX;
- mDedx = 0;
- mNHitsFit = 0;
- mNHitsMax = 0;
- mNHitsDedx = 0;
- mNSigmaPion = Pico::SHORTMAX;
- mNSigmaKaon = Pico::SHORTMAX;
- mNSigmaProton = Pico::SHORTMAX;
- mNSigmaElectron = Pico::SHORTMAX;
- mBTofCellId = -1;
- mBTofMatchFlag = 0;
- mBTof = 0;
- mBTofBeta = 0;
- mBTofYLocal = Pico::SHORTMAX;
- mBTofZLocal = Pico::SHORTMAX;
- mBTofHitPosX = 0;
- mBTofHitPosY = 0;
- mBTofHitPosZ = 0;
- #if EMCON == 1
- mBEMCId = -1;
- mBTOWADC0 = 0;
- mBTOWE0 = -1*Pico::SHORTMAX;
- mBTOWE = -1*Pico::SHORTMAX;
- mBEMCDistZ = Pico::SHORTMAX;
- mBEMCDistPhi = Pico::SHORTMAX;
- mBSMDNEta = 0;
- mBSMDNPhi = 0;
- mBTOWId = -1;
- mBTOWId23 = -1;
- mBTOWE1 = -1*Pico::SHORTMAX;
- mBTOWE2 = -1*Pico::SHORTMAX;
- mBTOWE3 = -1*Pico::SHORTMAX;
- mBTOWDistEta = Pico::SHORTMAX;
- mBTOWDistPhi = Pico::SHORTMAX;
- #endif
- }
- //----------------------------------------------------------------------------------
- void StPicoTrack::Print(const Char_t *option) const {
- if(strcmp(option,"tpc")==0 || strcmp(option,"")==0) {
- LOG_INFO << "id=" << id() << " flowflag=" << flowFlag() << " chi2=" << chi2() << " dca=" << dca() << endm;
- LOG_INFO << "gMom=" << gMom() << endm;
- LOG_INFO << "pMom=" << pMom() << endm;
- LOG_INFO << "Origin=" << origin() << endm;
- // LOG_INFO << "Q vector=" << mQXi << " " << mQYi << endm;
- LOG_INFO << " nHitsFit = " << nHitsFit() << " nHitsdEdx = " << nHitsDedx() << endm;
- LOG_INFO << " nSigma Pi/K/P/E = " << nSigmaPion() << "/" << nSigmaKaon() << "/" << nSigmaProton() << "/" << nSigmaElectron() << endm;
- }
- if(strcmp(option,"tof")==0 || strcmp(option,"")==0) {
- LOG_INFO << " BTOF cellId = " << btofCellId() << " tof = " << btof() << " beta = " << btofBeta() << endm;
- LOG_INFO << " BTOF match = " << btofMatchFlag() << " yLocal/zLocal " << btofYLocal() << " " << btofZLocal() << endm;
- }
- if(strcmp(option,"emc")==0 || strcmp(option,"")==0) {
- LOG_INFO << " BEMC Id = " << bemcId() << " BTOW ADC0 = " << adc0() << " energy0 = " << e0() << " e = " << e() << endm;
- LOG_INFO << " BEMC distz = " << zDist() << " distphi = " << phiDist() << endm;
- LOG_INFO << " BSMD nEta/nPhi = " << nEta() << "/" << nPhi() << endm;
- LOG_INFO << " BTOW Id = " << btowId() << " tower Id 2/3 = " << btowId2() << " " << btowId3() << endm;
- LOG_INFO << " BTOW energy = " << e1() << " " << e2() << " " << e3() << endm;
- LOG_INFO << " BTOW position to center = " << etaTowDist() << " " << phiTowDist() << endm;
- }
- }
|