Skip to content
Snippets Groups Projects
Commit 3fd218c9 authored by Sergey Gorbunov's avatar Sergey Gorbunov
Browse files

store track time at 3 positions: track start, first hit, last hit

parent a837de70
No related branches found
No related tags found
1 merge request!1081store the track time at 3 positions
Pipeline #20895 passed
Showing
with 105 additions and 65 deletions
......@@ -27,8 +27,12 @@ CbmTrack::CbmTrack()
, fPidHypo(0)
, fParamFirst()
, fParamLast()
, fTime(0.)
, fTimeError(0.)
, fStartTime(0.)
, fStartTimeError(0.)
, fFirstHitTime(0.)
, fFirstHitTimeError(0.)
, fLastHitTime(0.)
, fLastHitTimeError(0.)
, fFlag(0)
, fChiSq(0.)
, fNDF(0)
......@@ -45,8 +49,12 @@ CbmTrack::CbmTrack(const CbmTrack& rhs)
, fPidHypo(rhs.fPidHypo)
, fParamFirst(rhs.fParamFirst)
, fParamLast(rhs.fParamLast)
, fTime(rhs.fTime)
, fTimeError(rhs.fTimeError)
, fStartTime(rhs.fStartTime)
, fStartTimeError(rhs.fStartTimeError)
, fFirstHitTime(rhs.fFirstHitTime)
, fFirstHitTimeError(rhs.fFirstHitTimeError)
, fLastHitTime(rhs.fLastHitTime)
, fLastHitTimeError(rhs.fLastHitTimeError)
, fFlag(rhs.fFlag)
, fChiSq(rhs.fChiSq)
, fNDF(rhs.fNDF)
......@@ -66,8 +74,12 @@ CbmTrack& CbmTrack::operator=(const CbmTrack& rhs)
fPidHypo = rhs.fPidHypo;
fParamFirst = rhs.fParamFirst;
fParamLast = rhs.fParamLast;
fTime = rhs.fTime;
fTimeError = rhs.fTimeError;
fStartTime = rhs.fStartTime;
fStartTimeError = rhs.fStartTimeError;
fFirstHitTime = rhs.fFirstHitTime;
fFirstHitTimeError = rhs.fFirstHitTimeError;
fLastHitTime = rhs.fLastHitTime;
fLastHitTimeError = rhs.fLastHitTimeError;
fFlag = rhs.fFlag;
fChiSq = rhs.fChiSq;
fNDF = rhs.fNDF;
......
......@@ -66,8 +66,12 @@ public:
const FairTrackParam* GetParamFirst() const { return &fParamFirst; }
const FairTrackParam* GetParamLast() const { return &fParamLast; }
CbmMatch* GetMatch() const { return fMatch; }
double GetTime() const { return fTime; }
double GetTimeError() const { return fTimeError; }
double GetStartTime() const { return fStartTime; }
double GetStartTimeError() const { return fStartTimeError; }
double GetFirstHitTime() const { return fFirstHitTime; }
double GetFirstHitTimeError() const { return fFirstHitTimeError; }
double GetLastHitTime() const { return fLastHitTime; }
double GetLastHitTimeError() const { return fLastHitTimeError; }
/** Modifiers **/
void SetPidHypo(int32_t pid) { fPidHypo = pid; }
......@@ -78,8 +82,12 @@ public:
void SetParamFirst(const FairTrackParam* par) { fParamFirst = *par; }
void SetParamLast(const FairTrackParam* par) { fParamLast = *par; }
void SetMatch(CbmMatch* match);
void SetTime(double time) { fTime = time; }
void SetTimeError(double error) { fTimeError = error; }
void SetStartTime(double time) { fStartTime = time; }
void SetStartTimeError(double error) { fStartTimeError = error; }
void SetFirstHitTime(double time) { fFirstHitTime = time; }
void SetFirstHitTimeError(double error) { fFirstHitTimeError = error; }
void SetLastHitTime(double time) { fLastHitTime = time; }
void SetLastHitTimeError(double error) { fLastHitTimeError = error; }
virtual std::string ToString() const;
......@@ -98,8 +106,16 @@ protected:
FairTrackParam fParamLast;
/** Track start time **/
double fTime;
double fTimeError;
double fStartTime;
double fStartTimeError;
/** Track time at the first hit **/
double fFirstHitTime;
double fFirstHitTimeError;
/** Track time at the last hit **/
double fLastHitTime;
double fLastHitTimeError;
/** Quality flag **/
int32_t fFlag;
......@@ -114,7 +130,7 @@ protected:
/** Monte-Carlo information **/
CbmMatch* fMatch;
ClassDef(CbmTrack, 4);
ClassDef(CbmTrack, 5);
};
#endif
......@@ -31,8 +31,8 @@ CbmStsTrack::~CbmStsTrack() {}
std::string CbmStsTrack::ToString() const
{
stringstream ss;
ss << "CbmStsTrack: time " << fTime << " ns | hits STS " << GetNofStsHits() << " MVD " << GetNofMvdHits() << " | q/p "
<< GetParamFirst()->GetQp() << " | chisq " << GetChiSq() << " | NDF " << GetNDF() << " | STS hits ";
ss << "CbmStsTrack: start time " << fStartTime << " ns | hits STS " << GetNofStsHits() << " MVD " << GetNofMvdHits()
<< " | q/p " << GetParamFirst()->GetQp() << " | chisq " << GetChiSq() << " | NDF " << GetNDF() << " | STS hits ";
for (int32_t iHit = 0; iHit < GetNofStsHits(); iHit++) {
ss << GetStsHitIndex(iHit) << " ";
}
......
......@@ -32,8 +32,8 @@ CbmTofTrack::~CbmTofTrack() {}
std::string CbmTofTrack::ToString() const
{
stringstream ss;
ss << "CbmTofTrack: time " << fTime << " ns | hits STS " << GetNofTofHits() << " | q/p " << GetParamFirst()->GetQp()
<< " | chisq " << GetChiSq() << " | NDF " << GetNDF() << " | STS hits ";
ss << "CbmTofTrack: start time " << fStartTime << " ns | hits STS " << GetNofTofHits() << " | q/p "
<< GetParamFirst()->GetQp() << " | chisq " << GetChiSq() << " | NDF " << GetNDF() << " | STS hits ";
for (int32_t iHit = 0; iHit < GetNofTofHits(); iHit++) {
ss << GetTofHitIndex(iHit) << " ";
}
......
......@@ -508,7 +508,7 @@ void L1Algo::L1KFTrackFitter()
int ista = nStations - 1;
time_last = iif(w_time[ista] > fvec::Zero(), time_last, fvec::Zero());
dt2_last = iif(w_time[ista] > fvec::Zero(), dt2_last, fvec(100.));
dt2_last = iif(w_time[ista] > fvec::Zero(), dt2_last, fvec(1.e6));
FilterFirst(fit, x_last, y_last, time_last, dt2_last, d_xx_lst, d_yy_lst, d_xy_lst);
......@@ -751,7 +751,7 @@ void L1Algo::L1KFTrackFitter()
}
}
void L1Algo::GuessVecNoField(L1TrackParFit& t, fvec& x_last, fvec& x_2last, fvec& y_last, fvec& y_2last, fvec& z_end,
fvec& z_2last, fvec& time_last, fvec* w_time, fvec& dt2_last)
fvec& z_2last, fvec& time_last, fvec* /*w_time*/, fvec& dt2_last)
{
fvec dzi = fvec(1.) / (z_end - z_2last);
......
......@@ -209,8 +209,12 @@ void CbmL1GlobalTrackFinder::CbmL1TrackToCbmStsTrack(CbmL1Track l1track, CbmStsT
track->SetChiSq(T->chi2);
track->SetNDF(T->NDF);
track->SetPidHypo(T->T[4] >= 0 ? 211 : -211);
track->SetTime(T->Tpv[6]);
track->SetTimeError(T->Cpv[20]);
track->SetStartTime(T->Tpv[6]);
track->SetStartTimeError(T->Cpv[20]);
track->SetFirstHitTime(T->T[6]);
track->SetFirstHitTimeError(T->C[20]);
track->SetLastHitTime(T->TLast[6]);
track->SetLastHitTimeError(T->CLast[20]);
FairTrackParam fpar(*track->GetParamFirst()), lpar(*track->GetParamLast());
CbmKFMath::CopyTC2TrackParam(&fpar, T->T, T->C);
......
......@@ -84,8 +84,12 @@ Int_t CbmL1StsTrackFinder::CopyL1Tracks(CbmEvent* event)
t->SetChiSq(T.chi2);
t->SetNDF(T.NDF);
t->SetPidHypo(T.T[4] >= 0 ? 211 : -211);
t->SetTime(T.Tpv[6]);
t->SetTimeError(T.Cpv[20]);
t->SetStartTime(T.Tpv[6]);
t->SetStartTimeError(T.Cpv[20]);
t->SetFirstHitTime(T.T[6]);
t->SetFirstHitTimeError(T.C[20]);
t->SetLastHitTime(T.TLast[6]);
t->SetLastHitTimeError(T.CLast[20]);
for (vector<int>::iterator ih = it->Hits.begin(); ih != it->Hits.end(); ++ih) {
CbmL1HitStore& h = L1->fvHitStore[*ih];
......
......@@ -92,8 +92,8 @@ void CbmBuildEventsFromTracksReal::Exec(Option_t*)
for (unsigned int iTrack = 0; iTrack < nTracks; iTrack++) {
CbmStsTrack* track = (CbmStsTrack*) fStsTracks->At(iTrack);
Double_t time = track->GetTime();
Double_t timeEr = track->GetTimeError();
Double_t time = track->GetStartTime();
Double_t timeEr = track->GetStartTimeError();
SortTracks structure;
......@@ -129,14 +129,14 @@ void CbmBuildEventsFromTracksReal::Exec(Option_t*)
for (unsigned int iTrack = 0; iTrack < Tracks.size(); iTrack++) {
if (Tracks[iTrack].used) continue;
float time1 = Tracks[iTrack].Track.GetTime();
float timeC1 = Tracks[iTrack].Track.GetTimeError();
float time1 = Tracks[iTrack].Track.GetStartTime();
float timeC1 = Tracks[iTrack].Track.GetStartTimeError();
for (unsigned int iClusterTrack = 0; iClusterTrack < cluster.size(); iClusterTrack++) {
CbmStsTrack* stsTrack = (CbmStsTrack*) fStsTracks->At(cluster[iClusterTrack]);
float time2 = stsTrack->GetTime();
float timeC2 = stsTrack->GetTimeError();
float time2 = stsTrack->GetStartTime();
float timeC2 = stsTrack->GetStartTimeError();
float dt = fabs(time1 - time2);
float error = sqrt(timeC1 + timeC2); ///&&????????????????
......@@ -157,9 +157,9 @@ void CbmBuildEventsFromTracksReal::Exec(Option_t*)
for (unsigned int iClusterTrack = 0; iClusterTrack < cluster.size(); iClusterTrack++) {
CbmStsTrack* stsTrack = (CbmStsTrack*) fStsTracks->At(cluster[iClusterTrack]);
if (time_min > stsTrack->GetTime()) time_min = stsTrack->GetTime();
if (time_min > stsTrack->GetStartTime()) time_min = stsTrack->GetStartTime();
if (time_max < stsTrack->GetTime()) time_max = stsTrack->GetTime();
if (time_max < stsTrack->GetStartTime()) time_max = stsTrack->GetStartTime();
}
if (cluster.size() > 1) clusters.push_back(cluster);
......
......@@ -40,7 +40,7 @@ private:
static bool CompareTrackTime(const SortTracks& a, const SortTracks& b)
{
return (a.Track.GetTime() < b.Track.GetTime());
return (a.Track.GetStartTime() < b.Track.GetStartTime());
}
TClonesArray* fStsTracks; ///< Input array (class CbmStsDigi)
......
......@@ -323,7 +323,7 @@ void CbmEventBuilderQa::Exec(Option_t* /*opt*/)
CbmStsTrack* track = (CbmStsTrack*) fStsTracks->At(iTrack);
fTimeHisto[0]->Fill(track->GetTime());
fTimeHisto[0]->Fill(track->GetStartTime());
UInt_t NHits = track->GetNofStsHits();
......@@ -381,8 +381,8 @@ void CbmEventBuilderQa::Exec(Option_t* /*opt*/)
CbmMCTrack* mcTrack = (CbmMCTrack*) fMCTracks->Get(0, mcEvent, mcTrackId);
double mcTime = mcTrack->GetStartT() + fEventList->GetEventTime(mcEvent + 1, link.GetFile());
double residual = track->GetTime() - mcTime;
double pull = residual / track->GetTimeError();
double residual = track->GetStartTime() - mcTime;
double pull = residual / track->GetStartTimeError();
fTimeHisto[1]->Fill(residual);
fTimeHisto[2]->Fill(pull);
}
......@@ -504,12 +504,12 @@ void CbmEventBuilderQa::Exec(Option_t* /*opt*/)
CbmStsTrack* track = (CbmStsTrack*) fStsTracks->At(stsTrackIndex);
if ((track->GetTime()) > tLastTrack) tLastTrack = (track->GetTime());
if ((track->GetTime()) < tFirstTrack) tFirstTrack = (track->GetTime());
if ((track->GetStartTime()) > tLastTrack) tLastTrack = (track->GetStartTime());
if ((track->GetStartTime()) < tFirstTrack) tFirstTrack = (track->GetStartTime());
double mcTime = mcTrack->GetStartT() + fEventList->GetEventTime(mcEvent + 1, link.GetFile());
fTimeHisto[24]->Fill(fabs(track->GetTime() - mcTime) / track->GetTimeError());
fTimeHisto[24]->Fill(fabs(track->GetStartTime() - mcTime) / track->GetStartTimeError());
if (fMCEvents[mcEvent].IsReconstructable()) EventMatch.AddTrack(mcEvent);
......@@ -518,8 +518,8 @@ void CbmEventBuilderQa::Exec(Option_t* /*opt*/)
const int stsTrackIndex1 = event->GetStsTrackIndex(iTr1);
CbmStsTrack* track1 = (CbmStsTrack*) fStsTracks->At(stsTrackIndex1);
fTimeHisto[25]->Fill(fabs(track->GetTime() - track1->GetTime())
/ sqrt(track->GetTimeError() + track1->GetTimeError()));
fTimeHisto[25]->Fill(fabs(track->GetStartTime() - track1->GetStartTime())
/ sqrt(track->GetStartTimeError() + track1->GetStartTimeError()));
}
for (int iEvent1 = 0; iEvent1 < fEvents->GetEntriesFast(); iEvent1++) {
......@@ -532,10 +532,10 @@ void CbmEventBuilderQa::Exec(Option_t* /*opt*/)
const int stsTrackIndex1 = event1->GetStsTrackIndex(iTr1);
CbmStsTrack* track1 = (CbmStsTrack*) fStsTracks->At(stsTrackIndex1);
if (fabs(track->GetTime() - track1->GetTime()) > 8.5) continue;
if (fabs(track->GetStartTime() - track1->GetStartTime()) > 8.5) continue;
fTimeHisto[26]->Fill(fabs(track->GetTime() - track1->GetTime())
/ sqrt(track->GetTimeError() + track1->GetTimeError()));
fTimeHisto[26]->Fill(fabs(track->GetStartTime() - track1->GetStartTime())
/ sqrt(track->GetStartTimeError() + track1->GetStartTimeError()));
}
}
}
......@@ -589,10 +589,10 @@ void CbmEventBuilderQa::Exec(Option_t* /*opt*/)
const int stsTrackIndex = event->GetStsTrackIndex(i);
CbmStsTrack* track = (CbmStsTrack*) fStsTracks->At(stsTrackIndex);
fTimeHisto[6]->Fill(track->GetTime());
fTimeHisto[6]->Fill(track->GetStartTime());
fTimeHisto[11 + iCol]->Fill(track->GetTime());
fTimeHisto[11 + iCol]->Fill(track->GetStartTime());
UInt_t NHits = track->GetNofStsHits();
......
......@@ -67,7 +67,7 @@ private:
static bool CompareTrackTime(const SortEvents& a, const SortEvents& b)
{
return (a.track.GetTime() < b.track.GetTime());
return (a.track.GetStartTime() < b.track.GetStartTime());
}
bool CalculateIsReconstructable(const int iMCFile, const int iMCEvent,
......
......@@ -107,7 +107,7 @@ void CbmLitFitTracks::DoFit()
Int_t stsTrackId = track->GetPreviousTrackId();
CbmStsTrack* stsTrack = static_cast<CbmStsTrack*>(fStsTracks->At(stsTrackId));
CbmTrackParam cbmLPar;
cbmLPar.Set(*stsTrack->GetParamLast(), stsTrack->GetTime(), stsTrack->GetTimeError());
cbmLPar.Set(*stsTrack->GetParamLast(), stsTrack->GetLastHitTime(), stsTrack->GetLastHitTimeError());
CbmLitTrackParam lpar;
CbmLitConverterFairTrackParam::FairTrackParamToCbmLitTrackParam(&cbmLPar, &lpar);
track->SetParamFirst(&lpar);
......
......@@ -104,10 +104,10 @@ public:
CbmLitTrackParam paramFirst, paramLast;
//TODO remove this const typecasting
CbmTrackParam cbmParamFirst;
cbmParamFirst.Set(*stsTrack->GetParamFirst(), stsTrack->GetTime(), stsTrack->GetTimeError());
cbmParamFirst.Set(*stsTrack->GetParamFirst(), stsTrack->GetFirstHitTime(), stsTrack->GetFirstHitTimeError());
CbmLitConverterFairTrackParam::FairTrackParamToCbmLitTrackParam(&cbmParamFirst, &paramFirst);
CbmTrackParam cbmParamLast;
cbmParamLast.Set(*stsTrack->GetParamLast(), stsTrack->GetTime(), stsTrack->GetTimeError());
cbmParamLast.Set(*stsTrack->GetParamLast(), stsTrack->GetLastHitTime(), stsTrack->GetLastHitTimeError());
CbmLitConverterFairTrackParam::FairTrackParamToCbmLitTrackParam(&cbmParamLast, &paramLast);
Double_t firstTime;
Double_t lastTime;
......@@ -137,10 +137,10 @@ public:
ltrack->SetPDG(track->GetPidHypo());
CbmLitTrackParam paramFirst, paramLast;
CbmTrackParam cbmParamFirst;
cbmParamFirst.Set(*track->GetParamFirst(), track->GetTime(), track->GetTimeError());
cbmParamFirst.Set(*track->GetParamFirst(), track->GetFirstHitTime(), track->GetFirstHitTimeError());
CbmLitConverterFairTrackParam::FairTrackParamToCbmLitTrackParam(&cbmParamFirst, &paramFirst);
CbmTrackParam cbmParamLast;
cbmParamLast.Set(*track->GetParamLast(), track->GetTime(), track->GetTimeError());
cbmParamLast.Set(*track->GetParamLast(), track->GetLastHitTime(), track->GetLastHitTimeError());
CbmLitConverterFairTrackParam::FairTrackParamToCbmLitTrackParam(&cbmParamLast, &paramLast);
ltrack->SetParamFirst(&paramFirst);
ltrack->SetParamLast(&paramLast);
......@@ -330,6 +330,10 @@ public:
static void GetStsTrackTimes(const CbmStsTrack* track, Double_t& firstTime, Double_t& lastTime)
{
firstTime = track->GetFirstHitTime();
lastTime = track->GetLastHitTime();
return;
static FairRootManager* ioman = 0;
static CbmVertex* primVertex = 0;
static TClonesArray* stsHits = 0;
......@@ -359,10 +363,10 @@ public:
CbmLitTrackParam paramFirst;
CbmLitTrackParam paramLast;
CbmTrackParam cbmParamFirst;
cbmParamFirst.Set(*track->GetParamFirst(), track->GetTime(), track->GetTimeError());
cbmParamFirst.Set(*track->GetParamFirst(), track->GetFirstHitTime(), track->GetFirstHitTimeError());
CbmLitConverterFairTrackParam::FairTrackParamToCbmLitTrackParam(&cbmParamFirst, &paramFirst);
CbmTrackParam cbmParamLast;
cbmParamLast.Set(*track->GetParamLast(), track->GetTime(), track->GetTimeError());
cbmParamLast.Set(*track->GetParamLast(), track->GetLastHitTime(), track->GetLastHitTimeError());
CbmLitConverterFairTrackParam::FairTrackParamToCbmLitTrackParam(&cbmParamLast, &paramLast);
Double_t x = paramFirst.GetX();
......
......@@ -143,7 +143,7 @@ void CbmGlobalTrackingTask::Exec(Option_t* /*opt*/)
#endif //CBM_GLOBALTB_PRINT_PERF
//fTofGeometry.Find(param->GetX(), param->GetCovariance(0, 0), param->GetY(), param->GetCovariance(1, 1), param->GetZ(),
//track->GetTime(), track->GetTimeError(), param->GetTx(), TMath::Sqrt(param->GetCovariance(2, 2)), param->GetTy(), TMath::Sqrt(param->GetCovariance(3, 3)), tofHitInd);
fTofGeometry.Find(param, track->GetTime(), track->GetTimeError(), tofHitInd, trackLength);
fTofGeometry.Find(param, track->GetLastHitTime(), track->GetLastHitTimeError(), tofHitInd, trackLength);
globalTrack->SetTofHitIndex(tofHitInd);
globalTrack->SetLength(stsTrackLength + trackLength);
globalTrack->SetParamFirst(track->GetParamFirst());
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment