123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561 |
- /***************************************************************************
- *
- * $Id: StHbtTrack.cc,v 1.19 2005/07/15 17:41:43 kopytin Exp $
- *
- * Author: Frank Laue, Ohio State, laue@mps.ohio-state.edu
- ***************************************************************************
- *
- * Description: part of STAR HBT Framework: StHbtMaker package
- * Implementation of methods
- *
- ***************************************************************************
- * $Log: StHbtTrack.cc,v $
- * Revision 1.19 2005/07/15 17:41:43 kopytin
- * initialized mHiddenInfo in StHbtTrack() to null
- *
- * Revision 1.18 2005/07/10 02:17:21 chajecki
- * Ftpc (Eeat+West) hits included in nHits()
- *
- * Revision 1.17 2005/06/17 21:41:12 chajecki
- * Two bugs fixed:
- * 1. wrong value of mNHits set in one of the constructors
- * StHbtTrack::StHbtTrack(const StTrack* ST, StHbtThreeVector PrimaryVertex)
- *
- * 2. since year 4 the StMuTrack::nHits() returns the total number of hits.
- * We're interested in TPC hits only so this value can be taken by
- * StMuTrack::topologyMap().numberOfHits(kTpcId);
- * This change is backwards compatible so the code should work also
- * for data <=Y3
- *
- * Revision 1.16 2003/03/18 14:41:48 kisiel
- * Bugfix update for the theoretical part of the code. Reverts the changes to the Lednicky weight calculator, as the previuos one had problems with strong interaction
- *
- * Revision 1.15 2003/01/31 19:57:15 magestro
- * Cleared up simple compiler warnings on i386_linux24
- *
- * Revision 1.14 2003/01/21 17:26:33 magestro
- * Added condition to globalTrack() call so GlobalTracks branch in MuDst can be disabled
- *
- * Revision 1.13 2002/03/21 18:49:31 laue
- * updated for new MuDst reader
- *
- * Revision 1.12 2002/02/04 18:58:33 laue
- * *** empty log message ***
- *
- * Revision 1.11 2001/12/14 23:11:30 fretiere
- * Add class HitMergingCut. Add class fabricesPairCut = HitMerginCut + pair purity cuts. Add TpcLocalTransform function which convert to local tpc coord (not pretty). Modify StHbtTrack, StHbtParticle, StHbtHiddenInfo, StHbtPair to handle the hit information and cope with my code
- *
- * Revision 1.4 2001/06/21 19:15:48 laue
- * Modified fiels:
- * CTH.hh : new constructor added
- * StHbtEvent, StHbtKink, StHbtTrack : constructors from the persistent
- * (TTree) classes added
- * StHbtLikeSignAnalysis : minor changes, for debugging
- * StHbtTypes: split into different files
- * Added files: for the new TTree muDst's
- * StExceptions.cxx StExceptions.hh StHbtEnumeration.hh
- * StHbtHelix.hh StHbtHisto.hh StHbtString.hh StHbtTFile.hh
- * StHbtTTreeEvent.cxx StHbtTTreeEvent.h StHbtTTreeKink.cxx
- * StHbtTTreeKink.h StHbtTTreeTrack.cxx StHbtTTreeTrack.h
- * StHbtTTreeV0.cxx StHbtTTreeV0.h StHbtVector.hh
- *
- * Revision 1.3 2001/05/25 23:23:59 lisa
- * Added in StHbtKink stuff
- *
- *
- ****************************************************************************/
- #include "StHbtMaker/Infrastructure/StHbtTrack.hh"
- #ifdef __ROOT__
- #include "StHbtMaker/Infrastructure/StHbtTTreeEvent.h"
- #include "StHbtMaker/Infrastructure/StHbtTTreeTrack.h"
- #include "StEvent/StEnumerations.h"
- #include "StHbtMaker/Infrastructure/StHbtAihongPid.h"
- #include "StEventUtilities/StuProbabilityPidAlgorithm.h"
- #endif
- //________________
- StHbtTrack::StHbtTrack() {
- mHiddenInfo = NULL;
- }
- //________________
- StHbtTrack::StHbtTrack(const StHbtTrack& t) { // copy constructor
- mTrackId = t.mTrackId;
- mTrackType = t.mTrackType;
- mCharge = t.mCharge;
- mFlag = t.mFlag;
- mNHits = t.mNHits;
- mNHitsFit = t.mNHitsFit;
- mNHitsPoss = t.mNHitsPoss;
- mNHitsDedx = t.mNHitsDedx;
- mNSigmaElectron = t.mNSigmaElectron;
- mNSigmaPion = t.mNSigmaPion;
- mNSigmaKaon = t.mNSigmaKaon;
- mNSigmaProton = t.mNSigmaProton;
- mPidProbElectron = t.mPidProbElectron;
- mPidProbPion = t.mPidProbPion;
- mPidProbKaon = t.mPidProbKaon;
- mPidProbProton = t.mPidProbProton;
- mdEdx = t.mdEdx;
- mDCAxy = t.mDCAxy;
- mDCAz = t.mDCAz;
- mDCAxyGlobal = t.mDCAxyGlobal;
- mDCAzGlobal = t.mDCAzGlobal;
- mChiSqXY = t.mChiSqXY;
- mChiSqZ = t.mChiSqZ;
- mP = t.mP;
- mPGlobal = t.mPGlobal;
- mHelix = t.mHelix;
- mHelixGlobal = t.mHelixGlobal;
- mMap[0] = t.mMap[0];
- mMap[1] = t.mMap[1];
- mTofBeta = t.mTofBeta;
- mXfr = t.mXfr;
- mYfr = t.mYfr;
- mZfr = t.mZfr;
- mTfr = t.mTfr;
- if (t.ValidHiddenInfo())
- mHiddenInfo = t.getHiddenInfo()->clone();
- else
- mHiddenInfo = NULL;
- };
- //_________________
- StHbtTrack::~StHbtTrack() {
- if(mHiddenInfo) {
- delete mHiddenInfo;
- }
- }
- //_________________
- void StHbtTrack::SetCharge(const short& ch) {
- if(ch<0) {
- mCharge = false;
- }
- else if(ch>0) {
- mCharge = true;
- }
- else {
- std::cout << "StHbtTrack::SetCharge[WARNING] Unknown charge: " << ch
- << " . Setting to false (negative)" << std::endl;
- mCharge = false;
- }
- }
- //_________________
- short StHbtTrack::Charge() const {
- if(mCharge == false) {
- return -1;
- }
- else {
- return 1;
- }
- }
- //_________________
- float StHbtTrack::TofMassSqr() const {
- float massSqr = -999.;
- if(mTofBeta > 0) {
- massSqr = mP.mag2() * (1./(mTofBeta*mTofBeta) - 1.);
- }
- return massSqr;
- }
- //________________
- #ifdef __ROOT__
- #include "StEventTypes.h"
- #include "StEvent/StTpcDedxPidAlgorithm.h"
- #include "StEventUtilities/StuRefMult.hh"
- #include "StEvent/StEnumerations.h"
- #include "StarClassLibrary/SystemOfUnits.h" // has "tesla" in it
- #include "StarClassLibrary/StParticleTypes.hh"
- #include "StHbtMaker/Infrastructure/StHbtTTreeEvent.h"
- #include "StHbtMaker/Infrastructure/StHbtTTreeTrack.h"
- StHbtTrack::StHbtTrack(const StTrack* ST, StHbtThreeVector PrimaryVertex) {
- StTpcDedxPidAlgorithm PidAlgorithm;
- // while getting the bestGuess, the pidAlgorithm (StTpcDedxPidAlgorithm) is set up.
- // pointers to track and pidTraits are set
- // So, even though BestGuess will generate a "variable not used" warning, DO NOT DELETE THE NEXT LINE
- // StParticleDefinition* BestGuess = (StParticleDefinition*)ST->pidTraits(PidAlgorithm);
- // the following just point to particle definitions in StEvent
- StElectron* Electron = StElectron::instance();
- StPionPlus* Pion = StPionPlus::instance();
- StKaonPlus* Kaon = StKaonPlus::instance();
- StProton* Proton = StProton::instance();
- // OK let's go...
- mHiddenInfo = 0;
- mTrackType = ST->type();
- if(ST->geometry()->charge() > 0) {
- mCharge = true;
- }
- else {
- mCharge = false;
- }
- mNHits = (unsigned char)ST->detectorInfo()->numberOfPoints(kTpcId);
- mNHitsPoss = (unsigned char)ST->numberOfPossiblePoints(kTpcId);
- mNHitsDedx = (unsigned char)ST->fitTraits().numberOfFitPoints(kTpcId);
- mNSigmaElectron = PidAlgorithm.numberOfSigma(Electron);
- mNSigmaPion = PidAlgorithm.numberOfSigma(Pion);
- mNSigmaKaon = PidAlgorithm.numberOfSigma(Kaon);
- mNSigmaProton = PidAlgorithm.numberOfSigma(Proton);
- if ( PidAlgorithm.traits() )
- mdEdx = PidAlgorithm.traits()->mean();
- else
- std::cout << "StHbtTrack(const StTrack* ST, StHbtThreeVector PrimaryVertex) - no traits " << std::endl;
- mChiSqXY = ST->fitTraits().chi2(0);
- mChiSqZ = ST->fitTraits().chi2(1);
- mP = ST->geometry()->momentum();
- mHelix = ST->geometry()->helix();
- double pathlength = ST->geometry()->helix().pathLength(PrimaryVertex);
- StHbtThreeVector DCAxyz = ST->geometry()->helix().at(pathlength)-PrimaryVertex;
- mDCAxy = DCAxyz.perp();
- mDCAz = DCAxyz.z();
- mHelixGlobal = ST->node()->track(global)->geometry()->helix();
- double pathlengthGlobal = mHelixGlobal.pathLength(PrimaryVertex);
- StHbtThreeVector DCAxyzGlobal = mHelixGlobal.at(pathlengthGlobal)-PrimaryVertex;
- mDCAxyGlobal = DCAxyzGlobal.perp();
- mDCAzGlobal = DCAxyzGlobal.z();
- mPGlobal = ST->node()->track(global)->geometry()->momentum();
- mMap[0] = ST->topologyMap().data(0);
- mMap[1] = ST->topologyMap().data(1);
- mTrackId = (unsigned short)ST->key();
- mXfr = 0.;
- mYfr = 0.;
- mZfr = 0.;
- mZfr = 0.;
- }
- //_________________
- StHbtTrack::StHbtTrack(const StEvent* EV, const StTrack* ST) {
- StTpcDedxPidAlgorithm PidAlgorithm;
- // while getting the bestGuess, the pidAlgorithm (StTpcDedxPidAlgorithm) is set up.
- // pointers to track and pidTraits are set
- // So, even though BestGuess will generate a "variable not used" warning, DO NOT DELETE THE NEXT LINE
- ST->pidTraits(PidAlgorithm);
- // the following just point to particle definitions in StEvent
- StElectron* Electron = StElectron::instance();
- StPionPlus* Pion = StPionPlus::instance();
- StKaonPlus* Kaon = StKaonPlus::instance();
- StProton* Proton = StProton::instance();
- // OK let's go...
- mHiddenInfo = 0;
- mTrackType = ST->type();
- if(ST->geometry()->charge() > 0) {
- mCharge = true;
- }
- else {
- mCharge = false;
- }
- mNHits = (unsigned char)ST->detectorInfo()->numberOfPoints(kTpcId);
- mNHitsPoss = (unsigned char)ST->numberOfPossiblePoints(kTpcId);
- mNHitsDedx =(unsigned char)ST->fitTraits().numberOfFitPoints(kTpcId);
- mNSigmaElectron = PidAlgorithm.numberOfSigma(Electron);
- mNSigmaPion = PidAlgorithm.numberOfSigma(Pion);
- mNSigmaKaon = PidAlgorithm.numberOfSigma(Kaon);
- mNSigmaProton = PidAlgorithm.numberOfSigma(Proton);
- mdEdx = PidAlgorithm.traits()->mean();
- mChiSqXY = ST->fitTraits().chi2(0);
- mChiSqZ = ST->fitTraits().chi2(1);
- StHbtThreeVector primaryVertex = EV->primaryVertex()->position();
-
- mHelix = ST->geometry()->helix();
- double pathlength = mHelix.pathLength(primaryVertex);
- StHbtThreeVector DCAxyz = mHelix.at(pathlength)-primaryVertex;
- mDCAxy = DCAxyz.perp();
- mDCAz = DCAxyz.z();
- mP = mHelix.momentumAt(pathlength,EV->summary()->magneticField()*kilogauss);
- if(dynamic_cast<const StPrimaryTrack*>(ST)){
- mHelixGlobal = ST->node()->track(global)->geometry()->helix();
- }
- else{
- mHelixGlobal = mHelix;
- }
- double pathlengthGlobal = mHelixGlobal.pathLength(primaryVertex);
- StHbtThreeVector DCAxyzGlobal = mHelixGlobal.at(pathlengthGlobal)-primaryVertex;
- mDCAxyGlobal = DCAxyzGlobal.perp();
- mDCAzGlobal = DCAxyzGlobal.z();
- mPGlobal = mHelixGlobal.momentumAt(pathlengthGlobal,EV->summary()->magneticField()*kilogauss);
-
- mMap[0] = ST->topologyMap().data(0);
- mMap[1] = ST->topologyMap().data(1);
- mTrackId = (unsigned short)ST->key();
-
- // On the fly pid probability calculation
- static int previousEventNumber = 0;
- static StHbtAihongPid* hbtAihongPid = StHbtAihongPid::Instance();
- static StuProbabilityPidAlgorithm* aihongPid = hbtAihongPid->aihongPid();
- if( (mPidProbElectron+mPidProbPion+mPidProbKaon+mPidProbProton) <= 0.){
- if (previousEventNumber != EV->info()->id()) {
- // must do the below because uncorrectedNumberOfPositivePrimaries() function does not have const argument
- StEvent* TempEv = (StEvent*)EV;
- hbtAihongPid->updateEvent(uncorrectedNumberOfPositivePrimaries(*TempEv));
- // hbtAihongPid->updateEvent(uncorrectedNumberOfPositivePrimaries(*EV));
- previousEventNumber = EV->info()->id();
- }
- int localCharge = 0;
- if(mCharge == true) {
- localCharge = 1;
- }
- else {
- localCharge = -1;
- }
- hbtAihongPid->updateTrack( (int)localCharge, mP.mag(), mP.pseudoRapidity(), mNHitsDedx, mdEdx);
- mPidProbElectron= (localCharge>0) ? aihongPid->beingPositronProb() : aihongPid->beingElectronProb() ;
- mPidProbPion= (localCharge>0) ? aihongPid->beingPionPlusProb() : aihongPid->beingPionMinusProb();
- mPidProbKaon= (localCharge>0) ? aihongPid->beingKaonPlusProb() : aihongPid->beingKaonMinusProb();
- mPidProbProton= (localCharge>0) ? aihongPid->beingProtonProb() : aihongPid->beingAntiProtonProb();
- }
- mXfr = 0.;
- mYfr = 0.;
- mZfr = 0.;
- mZfr = 0.;
- }
- //_________________
- StHbtTrack::StHbtTrack(const StHbtTTreeEvent* ev,
- const StHbtTTreeTrack* t) { // copy constructor
- mTrackType = t->mTrackType;
- mTrackId = (unsigned short)t->mTrackId;
- mNHits = (unsigned char)t->mNHits;
- mNHitsPoss = (unsigned char)t->mNHitsPoss;
- mNHitsDedx = (unsigned char)t->mNHitsDedx;
- mNSigmaElectron = t->mNSigmaElectron;
- mNSigmaPion = t->mNSigmaPion;
- mNSigmaKaon = t->mNSigmaKaon;
- mNSigmaProton = t->mNSigmaProton;
- mPidProbElectron = t->mPidProbElectron/1000.;
- mPidProbPion = t->mPidProbPion/1000.;
- mPidProbKaon = t->mPidProbKaon/1000.;
- mPidProbProton = t->mPidProbProton/1000.;
- mdEdx = t->mdEdx;
- mChiSqXY = t->mChiSqXY;
- mChiSqZ = t->mChiSqZ;
- mMap[0] = t->mMap[0];
- mMap[1] = t->mMap[1];
-
- mHelix = StPhysicalHelixD(t->mHelixC,t->mHelixDip,t->mHelixPhase,
- StThreeVectorD(t->mHelixX,t->mHelixY,t->mHelixZ),
- t->mHelixH);
- mHelixGlobal = StPhysicalHelixD(t->mHelixGlobalC,t->mHelixGlobalDip,t->mHelixGlobalPhase,
- StThreeVectorD(t->mHelixGlobalX,t->mHelixGlobalY,t->mHelixGlobalZ),
- t->mHelixGlobalH);
- //ev->mMagneticField
- // cout << mHelix << endl;
- if(mHelix.charge(ev->mMagneticField*kilogauss) > 0) {
- mCharge = true;
- }
- else {
- mCharge = false;
- }
- StHbtThreeVector vertex(ev->mVertexX,ev->mVertexY,ev->mVertexZ);
- double pathlength = mHelix.pathLength(vertex);
- mP = mHelix.momentumAt(pathlength,ev->mMagneticField*kilogauss);
- mDCAxy = (mHelix.at(pathlength) - vertex).perp();
- mDCAz = (mHelix.at(pathlength) - vertex).z();
-
- double pathlengthGlobal = mHelixGlobal.pathLength(vertex);
- mDCAxyGlobal = (mHelixGlobal.at(pathlengthGlobal) - vertex).perp();
- mDCAzGlobal = (mHelixGlobal.at(pathlengthGlobal) - vertex).z();
- mPGlobal = mHelixGlobal.momentumAt(pathlengthGlobal,ev->mMagneticField*kilogauss);
- // On the fly pid probability calculation
- static unsigned int previousEventNumber = 0;
- static StHbtAihongPid* hbtAihongPid = StHbtAihongPid::Instance();
- static StuProbabilityPidAlgorithm* aihongPid = hbtAihongPid->aihongPid();
- if( (mPidProbElectron+mPidProbPion+mPidProbKaon+mPidProbProton) <= 0.){
- if (previousEventNumber != ev->mEventNumber) {
- hbtAihongPid->updateEvent((int)ev->mUncorrectedNumberOfNegativePrimaries);
- previousEventNumber = ev->mEventNumber;
- }
- int localCharge = 0;
- if(mCharge == true) {
- localCharge = 1;
- }
- else {
- localCharge = -1;
- }
-
- hbtAihongPid->updateTrack( (int)localCharge, mP.mag(), mP.pseudoRapidity(), mNHitsDedx, mdEdx);
- mPidProbElectron= (localCharge>0) ? aihongPid->beingPositronProb() : aihongPid->beingElectronProb() ;
- mPidProbPion= (localCharge>0) ? aihongPid->beingPionPlusProb() : aihongPid->beingPionMinusProb();
- mPidProbKaon= (localCharge>0) ? aihongPid->beingKaonPlusProb() : aihongPid->beingKaonMinusProb();
- mPidProbProton= (localCharge>0) ? aihongPid->beingProtonProb() : aihongPid->beingAntiProtonProb();
- }
- // Onfly pid probability calculation
- int dontskip=0;
- if(dontskip &&
- (mPidProbElectron+mPidProbPion+mPidProbKaon+mPidProbProton) <= 0.){
- static int NotFirst;
- static StuProbabilityPidAlgorithm AihongsPID;
- if(!NotFirst){
- NotFirst=1;
- StuProbabilityPidAlgorithm::readParametersFromFile("PIDTable.root");
- }
- static const StHbtTTreeEvent* evPrev;
- if(evPrev!=ev){
- // to be changed
- int tRefMult = ev->mUncorrectedNumberOfNegativePrimaries;
- double tCent;
- if (tRefMult > 225 ) tCent = 0.03;
- else if (tRefMult > 215 ) tCent = 0.05;
- else if (tRefMult > 200 ) tCent = 0.07;
- else if (tRefMult > 180 ) tCent = 0.10;
- else if (tRefMult > 140 ) tCent = 0.18;
- else if (tRefMult > 130 ) tCent = 0.20;
- else if (tRefMult > 120 ) tCent = 0.23;
- else if (tRefMult > 115 ) tCent = 0.24;
- else if (tRefMult > 100 ) tCent = 0.28;
- else tCent = 0.99;
- evPrev=ev;
- }
- // AihongsPID.processPIDAsFunction(tCent, 0., (int) mCharge,mP.mag(),
- // mP.pseudoRapidity(),mNHitsDedx,mdEdx);
- short localCharge = 0;
- if(mCharge == true) {
- localCharge = 1;
- }
- else {
- localCharge = -1;
- }
- mPidProbElectron= localCharge>0 ? AihongsPID.beingPositronProb() :
- AihongsPID.beingElectronProb();
- mPidProbPion= localCharge>0 ? AihongsPID.beingPionPlusProb():
- AihongsPID.beingPionMinusProb();
- mPidProbKaon= localCharge>0 ? AihongsPID.beingKaonPlusProb():
- AihongsPID.beingKaonMinusProb();
- mPidProbProton= localCharge>0 ? AihongsPID.beingProtonProb():
- AihongsPID.beingAntiProtonProb();
- }
- mHiddenInfo = 0;
- mXfr = 0.;
- mYfr = 0.;
- mZfr = 0.;
- mZfr = 0.;
- };
- //________________
- #include "StMuDSTMaker/COMMON/StMuDst.h"
- #include "StMuDSTMaker/COMMON/StMuEvent.h"
- #include "StMuDSTMaker/COMMON/StMuTrack.h"
- StHbtTrack::StHbtTrack(const StMuDst* dst, const StMuTrack* t) {
- //added by gnigmat
- #ifdef STHBTDEBUG
- cout << "StHbtTrack(const StMuDst* dst, const StMuTrack* t) -- copy track"
- << endl;
- #endif
- StMuEvent* ev = dst->event();
- mTrackType = t->type(); //0-global, 1-primary
- mTrackId = (unsigned short)t->id();
- mFlag = t->flag();
- mNHits = (unsigned char)( t->topologyMap().numberOfHits(kTpcId) +
- t->topologyMap().numberOfHits(kFtpcEastId) +
- t->topologyMap().numberOfHits(kFtpcWestId) );
- mNHitsFit = (unsigned char)t->nHitsFit();
- mNHitsPoss = (unsigned char)t->nHitsPoss();
- mNHitsDedx = (unsigned char)t->nHitsDedx();
- mNSigmaElectron = t->nSigmaElectron();
- mNSigmaPion = t->nSigmaPion();
- mNSigmaKaon = t->nSigmaKaon();
- mNSigmaProton = t->nSigmaProton();
- mPidProbElectron = t->pidProbElectron();
- mPidProbPion = t->pidProbPion();
- mPidProbKaon = t->pidProbKaon();
- mPidProbProton = t->pidProbProton();
- mdEdx = t->dEdx();
- mChiSqXY = t->chi2xy();
- mChiSqZ = t->chi2z();
- mMap[0] = t->topologyMap().data(0);
- mMap[1] = t->topologyMap().data(1);
- mHelix = t->helix();
- if(t->globalTrack()) {
- mHelixGlobal = t->globalTrack()->helix();
- }
- if(t->charge() > 0) {
- mCharge = true;
- }
- else {
- mCharge = false;
- }
-
- double pathlength = mHelix.pathLength(ev->primaryVertexPosition());
- mP = mHelix.momentumAt(pathlength,ev->magneticField()*kilogauss);
- StThreeVectorD dca(mHelix.at(pathlength) - ev->primaryVertexPosition());
- mDCAxy = dca.perp();
- mDCAz = dca.z();
- if(t->globalTrack()) {
- double pathlengthGlobal = mHelixGlobal.pathLength(ev->primaryVertexPosition());
- mPGlobal = mHelixGlobal.momentumAt(pathlengthGlobal,ev->magneticField()*kilogauss);
- StThreeVectorD dcaGlobal(mHelixGlobal.at(pathlengthGlobal) - ev->primaryVertexPosition());
- mDCAxyGlobal = dcaGlobal.perp();
- mDCAzGlobal = dcaGlobal.z();
- }
- //Time-of-Flight information
- mTofBeta = -999.;
- if( (mTrackType == 0) && (t->btofPidTraits().beta() > 0) ) { //global
- mTofBeta = t->btofPidTraits().beta();
- }
- if(mTrackType == 1) { //primary
- StMuTrack* mGlobTrack = dst->globalTracks(t->index2Global());
- if(mGlobTrack->btofPidTraits().beta() > 0) {
- mTofBeta = mGlobTrack->btofPidTraits().beta();
- }
- }
- // cout << "*******************" << endl;
- // cout << " vertex " << ev->primaryVertexPosition() << endl;
- // cout << " helix " << mHelix << endl;
- // cout << " helix " << mHelixGlobal << endl;
- // cout << " p " << mP << " pmag " << mP.mag() << " " << t->p() << endl;
- // cout << " p " << mPGlobal << " pmag " << mPGlobal.mag() << endl;
- // cout << " l " << pathlength << " dca " << dca << " dcamag " << dca.mag() << endl;
- // cout << " l " << pathlengthGlobal << " dca " << dcaGlobal << " dcamag " << dcaGlobal.mag() << endl;
-
- mHiddenInfo = 0;
- //
- // added by nik
- //
- mXfr = 0.;
- mYfr = 0.;
- mZfr = 0.;
- mTfr = 0.;
- };
- #endif
|