From 16d9fbbab9ec69dd6881b242e3bed4ecec95d895 Mon Sep 17 00:00:00 2001 From: hristov Date: Fri, 8 Oct 2004 11:45:11 +0000 Subject: [PATCH] TRD track crossing the material: storing the parameters and errors before the material, propagating to TOF, and resuming refit inward from the stored values (M.Ivanov) --- TRD/AliTRDtrack.cxx | 28 +++++++++++++++++++++++++++- TRD/AliTRDtrack.h | 13 +++++++++---- TRD/AliTRDtracker.cxx | 30 +++++++++++++++++++----------- TRD/AliTRDtracker.h | 1 - 4 files changed, 55 insertions(+), 17 deletions(-) diff --git a/TRD/AliTRDtrack.cxx b/TRD/AliTRDtrack.cxx index a9b1b0d1734..c10c52a487b 100644 --- a/TRD/AliTRDtrack.cxx +++ b/TRD/AliTRDtrack.cxx @@ -72,6 +72,8 @@ AliTRDtrack::AliTRDtrack(const AliTRDcluster *c, UInt_t index, fIndex[i] = 0; fIndexBackup[i] = 0; //bacup indexes MI } + fNCross =0; + fBackupTrack =0; } //_____________________________________________________________________________ @@ -115,6 +117,8 @@ AliTRDtrack::AliTRDtrack(const AliTRDtrack& t) : AliKalmanTrack(t) { fIndex[i] = 0; fIndexBackup[i] = 0; //MI backup indexes } + fNCross =0; + fBackupTrack =0; } //_____________________________________________________________________________ @@ -173,6 +177,8 @@ AliTRDtrack::AliTRDtrack(const AliKalmanTrack& t, Double_t alpha) fIndex[i] = 0; fIndexBackup[i] = 0; // MI backup indexes } + fNCross =0; + fBackupTrack =0; } //_____________________________________________________________________________ AliTRDtrack::AliTRDtrack(const AliESDtrack& t) @@ -236,13 +242,24 @@ AliTRDtrack::AliTRDtrack(const AliESDtrack& t) fdQdl[i] = 0; // fIndex[i] = 0; //MI store indexes } + fNCross =0; + fBackupTrack =0; if ((t.GetStatus()&AliESDtrack::kTIME) == 0) return; StartTimeIntegral(); Double_t times[10]; t.GetIntegratedTimes(times); SetIntegratedTimes(times); SetIntegratedLength(t.GetIntegratedLength()); -} +} + +AliTRDtrack::~AliTRDtrack() +{ + // + // + if (fBackupTrack) delete fBackupTrack; + fBackupTrack=0; +} + //_____________________________________________________________________________ void AliTRDtrack::GetBarrelTrack(AliBarrelTrack *track) { @@ -906,3 +923,12 @@ void AliTRDtrack::ResetCovariance(Float_t mult) { fCty*=0.; fCtz*=0.; fCte*=0.; fCtt*=mult; fCcy*=0.; fCcz*=0.; fCce*=0.; fCct*=0.; fCcc*=mult; } + + +void AliTRDtrack::MakeBackupTrack() +{ + // + // + if (fBackupTrack) delete fBackupTrack; + fBackupTrack = new AliTRDtrack(*this); +} diff --git a/TRD/AliTRDtrack.h b/TRD/AliTRDtrack.h index d192fd5041d..ef5d7f8d22d 100644 --- a/TRD/AliTRDtrack.h +++ b/TRD/AliTRDtrack.h @@ -23,13 +23,13 @@ class AliTRDtrack : public AliKalmanTrack { public: - AliTRDtrack():AliKalmanTrack(){} + AliTRDtrack():AliKalmanTrack(){fBackupTrack=0;} AliTRDtrack(const AliTRDcluster *c, UInt_t index, const Double_t xx[5], const Double_t cc[15], Double_t xr, Double_t alpha); AliTRDtrack(const AliTRDtrack& t); AliTRDtrack(const AliKalmanTrack& t, Double_t alpha); AliTRDtrack(const AliESDtrack& t); - + ~AliTRDtrack(); Int_t Compare(const TObject *o) const; void CookdEdx(Double_t low=0.05, Double_t up=0.70); @@ -114,6 +114,10 @@ public: Int_t GetNWrong() const {return fNWrong;} Int_t GetNRotate() const {return fNRotate;} + Int_t GetNCross() const {return fNCross;} + void IncCross() {fNCross++;} + AliTRDtrack * GetBackupTrack(){return fBackupTrack;} + void MakeBackupTrack(); // @@ -145,8 +149,9 @@ protected: Float_t fLhElectron; // Likelihood to be an electron Int_t fNWrong; // number of wrong clusters - Int_t fNRotate; - + Int_t fNRotate; // number of rotation + Int_t fNCross; // number of the cross materials + AliTRDtrack * fBackupTrack; //! backup track ClassDef(AliTRDtrack,2) // TRD reconstructed tracks }; diff --git a/TRD/AliTRDtracker.cxx b/TRD/AliTRDtracker.cxx index bc654160406..a2d3392c33d 100644 --- a/TRD/AliTRDtracker.cxx +++ b/TRD/AliTRDtracker.cxx @@ -579,13 +579,15 @@ Int_t AliTRDtracker::PropagateBack(AliESD* event) { //seed->UpdateTrackParams(track, AliESDtrack::kTRDout); //found++; - seed->UpdateTrackParams(track, AliESDtrack::kTRDbackup); + if (track->GetNCross()==0) seed->UpdateTrackParams(track, AliESDtrack::kTRDbackup); + else{ + if (track->GetBackupTrack()) seed->UpdateTrackParams(track->GetBackupTrack(), AliESDtrack::kTRDbackup); + } } //Propagation to the TOF (I.Belikov) if (track->GetStop()==kFALSE){ - if (track->GetNumberOfClusters()>15) seed->UpdateTrackParams(track, AliESDtrack::kTRDout); Double_t xtof=371.; Double_t c2=track->GetC()*xtof - track->GetEta(); @@ -594,10 +596,7 @@ Int_t AliTRDtracker::PropagateBack(AliESD* event) { continue; } Double_t xTOF0 = 371. ; - if (!PropagateToOuterPlane(*track,xTOF0)) { - delete track; - continue; - } + PropagateToOuterPlane(*track,xTOF0); // Double_t ymax=xtof*TMath::Tan(0.5*AliTRDgeometry::GetAlpha()); Double_t y=track->GetYat(xtof); @@ -621,7 +620,7 @@ Int_t AliTRDtracker::PropagateBack(AliESD* event) { }else{ if (track->GetNumberOfClusters()>15&&track->GetNumberOfClusters()>0.5*expectedClr){ seed->UpdateTrackParams(track, AliESDtrack::kTRDout); - seed->SetStatus(AliESDtrack::kTRDStop); + //seed->SetStatus(AliESDtrack::kTRDStop); seed->SetTRDtrack(new AliTRDtrack(*track)); found++; } @@ -989,6 +988,7 @@ Int_t AliTRDtracker::FollowBackProlongation(AliTRDtrack& t) // layers confirms prolongation if a close cluster is found. // Returns the number of clusters expected to be found in sensitive layers + Float_t wIndex, wTB, wChi2; Float_t wYrt, wYclosest, wYcorrect, wYwindow; Float_t wZrt, wZclosest, wZcorrect, wZwindow; @@ -1038,15 +1038,23 @@ Int_t AliTRDtracker::FollowBackProlongation(AliTRDtrack& t) // // MI -fix untill correct material desription will be implemented // - Float_t angle = t.GetAlpha(); // MI - if rotation - we go through the material - + Float_t angle = t.GetAlpha(); // MI - if rotation - we go through the material if (!AdjustSector(&t)) break; - if (TMath::Abs(angle - t.GetAlpha())>0.000001) break; //better to stop track + Int_t cross = kFALSE; + + if (TMath::Abs(angle - t.GetAlpha())>0.000001) cross = kTRUE; //better to stop track Int_t currentzone = fTrSec[s]->GetLayer(nr)->GetZone(z); - if (currentzone==-10) break; // we are in the frame + if (currentzone==-10) cross = kTRUE; // we are in the frame if (currentzone>-10){ // layer knows where we are if (zone==-10) zone = currentzone; - if (zone!=currentzone) break; + if (zone!=currentzone) cross=kTRUE; + } + if (cross) { + t.IncCross(); + if (t.GetNCross()==1) t.MakeBackupTrack(); + if (t.GetNCross()>2) break; } + // // s = t.GetSector(); diff --git a/TRD/AliTRDtracker.h b/TRD/AliTRDtracker.h index b7e8c4d7f18..f2764bc6374 100644 --- a/TRD/AliTRDtracker.h +++ b/TRD/AliTRDtracker.h @@ -7,7 +7,6 @@ #include "AliTracker.h" #include "TObjArray.h" -class TClonesArray; class TFile; class TTree; class TParticle; -- 2.43.0