From 952051c586a6cbb83c914c62aae5c6a9c4108159 Mon Sep 17 00:00:00 2001 From: abercuci Date: Mon, 1 Nov 2010 09:42:56 +0000 Subject: [PATCH] move tracker config. params to AliTRDReconstructor class --- TRD/AliTRDReconstructor.cxx | 6 ++++ TRD/AliTRDReconstructor.h | 26 +++++++++++---- TRD/AliTRDtrackV1.cxx | 2 +- TRD/AliTRDtrackerV1.cxx | 63 +++++++++++++++++-------------------- TRD/AliTRDtrackerV1.h | 11 ++----- 5 files changed, 58 insertions(+), 50 deletions(-) diff --git a/TRD/AliTRDReconstructor.cxx b/TRD/AliTRDReconstructor.cxx index 8d0891987e2..6b1e018467b 100644 --- a/TRD/AliTRDReconstructor.cxx +++ b/TRD/AliTRDReconstructor.cxx @@ -76,6 +76,12 @@ Char_t const * AliTRDReconstructor::fgTaskFlags[AliTRDrecoParam::kTRDreconstruct ,"pd" }; Int_t AliTRDReconstructor::fgNTimeBins = -1; +const Float_t AliTRDReconstructor::fgkMinClustersInTrack = 0.5; // +const Float_t AliTRDReconstructor::fgkLabelFraction = 0.8; // +const Double_t AliTRDReconstructor::fgkMaxChi2 = 12.0; // +const Double_t AliTRDReconstructor::fgkMaxSnp = 0.95; // Maximum local sine of the azimuthal angle +const Double_t AliTRDReconstructor::fgkMaxStep = 2.0; // Maximal step size in propagation +const Double_t AliTRDReconstructor::fgkEpsilon = 1.e-5; // Precision of radial coordinate //_____________________________________________________________________________ AliTRDReconstructor::AliTRDReconstructor() diff --git a/TRD/AliTRDReconstructor.h b/TRD/AliTRDReconstructor.h index 0d960d2652b..ea0298dfc75 100644 --- a/TRD/AliTRDReconstructor.h +++ b/TRD/AliTRDReconstructor.h @@ -48,21 +48,27 @@ public: virtual void FillESD(AliRawReader *, TTree *clusterTree, AliESDEvent *esd) const { FillESD((TTree * )NULL, clusterTree, esd); } virtual void FillESD(TTree *digitsTree, TTree *clusterTree, AliESDEvent *esd) const; - static TClonesArray* GetClusters() {return fgClusters;} - static TClonesArray* GetTracklets() {return fgTracklets;} - static Int_t GetNTimeBins() {return fgNTimeBins;} + static TClonesArray* GetClusters() {return fgClusters;} + static TClonesArray* GetTracklets() { return fgTracklets;} + static Int_t GetNTimeBins() { return fgNTimeBins;} Int_t GetNdEdxSlices() const { return (Int_t)AliTRDpidUtil::GetNdEdxSlices(GetPIDMethod());} AliTRDpidUtil::ETRDPIDMethod GetPIDMethod() const { return GetRecoParam()->IsPIDNeuralNetwork() ? AliTRDpidUtil::kNN : AliTRDpidUtil::kLQ;} - static const AliTRDrecoParam* GetRecoParam() { return dynamic_cast(AliReconstructor::GetRecoParam(2)); } + static const AliTRDrecoParam* GetRecoParam() { return dynamic_cast(AliReconstructor::GetRecoParam(2)); } + static Float_t GetMinClustersInTrack() { return fgkMinClustersInTrack;} + static Float_t GetLabelFraction() { return fgkLabelFraction;} + static Double_t GetMaxChi2() { return fgkMaxChi2;} + static Double_t GetMaxSnp() { return fgkMaxSnp;} + static Double_t GetMaxStep() { return fgkMaxStep;} + static Double_t GetEpsilon() { return fgkEpsilon;} virtual Bool_t HasDigitConversion() const { return fSteerParam&kDigitsConversion; }; - Bool_t IsCosmic() const { return GetRecoParam()->GetEventSpecie() & AliRecoParam::kCosmic;} + Bool_t IsCosmic() const { return GetRecoParam()->GetEventSpecie() & AliRecoParam::kCosmic;} Bool_t IsWritingClusters() const { return fSteerParam&kWriteClusters;} Bool_t IsWritingTracklets() const { return fSteerParam&kWriteTracklets;} Bool_t IsHLT() const { return fSteerParam&kHLT;} Bool_t IsSeeding() const { return fSteerParam&kSeeding;} Bool_t IsProcessingTracklets() const { return fSteerParam&kProcTracklets;} - Bool_t IsDebugStreaming() const { return fSteerParam&kDebug;} + Bool_t IsDebugStreaming() const { return fSteerParam&kDebug;} Bool_t UseClusterRadialCorrection() const { return fSteerParam&kClRadialCorr;} static void Options(UInt_t steer=0); @@ -82,6 +88,14 @@ private: static Char_t const *fgTaskNames[AliTRDrecoParam::kTRDreconstructionTasks]; //! tasks names static Char_t const *fgTaskFlags[AliTRDrecoParam::kTRDreconstructionTasks]; //! tasks flags UInt_t fSteerParam; // steering bits + // configuration vars for tracking + static const Double_t fgkMaxChi2; // Max increment in track chi2 + static const Float_t fgkMinClustersInTrack; // Min number of clusters in track + static const Float_t fgkLabelFraction; // Min fraction of same label + static const Double_t fgkMaxSnp; // Maximal snp for tracking + static const Double_t fgkMaxStep; // Maximal step for tracking + static const Double_t fgkEpsilon; // Precision of radial coordinate + TTreeSRedirector *fDebugStream[AliTRDrecoParam::kTRDreconstructionTasks];// Debug Streamer container; static TClonesArray *fgClusters; // list of clusters for local reconstructor diff --git a/TRD/AliTRDtrackV1.cxx b/TRD/AliTRDtrackV1.cxx index 2678d56de1e..c2d15bdeedc 100644 --- a/TRD/AliTRDtrackV1.cxx +++ b/TRD/AliTRDtrackV1.cxx @@ -626,7 +626,7 @@ Bool_t AliTRDtrackV1::PropagateTo(Double_t xk, Double_t xx0, Double_t xrho) // "xrho" - thickness*density [g/cm^2] // - if (TMath::Abs(xk - GetX())<1.e-2) return kTRUE; // 100mum limit + if (TMath::Abs(xk - GetX()) (fgkMaxStep + track.GetX()) && !PropagateToX(track, AliTRDgeometry::GetXtrdBeg(), fgkMaxStep)){ + if(AliTRDgeometry::GetXtrdBeg() > (AliTRDReconstructor::GetMaxStep() + track.GetX()) && !PropagateToX(track, AliTRDgeometry::GetXtrdBeg(), AliTRDReconstructor::GetMaxStep())){ seed->UpdateTrackParams(&track, AliESDtrack::kTRDStop); continue; } @@ -328,7 +325,7 @@ Int_t AliTRDtrackerV1::PropagateBack(AliESDEvent *event) seed->UpdateTrackParams(&track, AliESDtrack::kTRDStop); continue; } - if(TMath::Abs(track.GetSnp()) > fgkMaxSnp) { + if(TMath::Abs(track.GetSnp()) > AliTRDReconstructor::GetMaxSnp()) { seed->UpdateTrackParams(&track, AliESDtrack::kTRDStop); continue; } @@ -375,7 +372,7 @@ Int_t AliTRDtrackerV1::PropagateBack(AliESDEvent *event) // Make backup for back propagation Int_t foundClr = track.GetNumberOfClusters(); if (foundClr >= foundMin) { - track.CookLabel(1. - fgkLabelFraction); + track.CookLabel(1. - AliTRDReconstructor::GetLabelFraction()); //if(track.GetBackupTrack()) UseClusters(track.GetBackupTrack()); // Sign only gold tracks @@ -430,7 +427,7 @@ Int_t AliTRDtrackerV1::PropagateBack(AliESDEvent *event) xtof = TMath::Sqrt(glob[0]*glob[0]+glob[1]*glob[1]); } } - if(xtof > (fgkMaxStep + track.GetX()) && !PropagateToX(track, xtof, fgkMaxStep)){ + if(xtof > (AliTRDReconstructor::GetMaxStep() + track.GetX()) && !PropagateToX(track, xtof, AliTRDReconstructor::GetMaxStep())){ seed->UpdateTrackParams(&track, AliESDtrack::kTRDStop); continue; } @@ -438,7 +435,7 @@ Int_t AliTRDtrackerV1::PropagateBack(AliESDEvent *event) seed->UpdateTrackParams(&track, AliESDtrack::kTRDStop); continue; } - if(TMath::Abs(track.GetSnp()) > fgkMaxSnp){ + if(TMath::Abs(track.GetSnp()) > AliTRDReconstructor::GetMaxSnp()){ seed->UpdateTrackParams(&track, AliESDtrack::kTRDStop); continue; } @@ -514,7 +511,7 @@ Int_t AliTRDtrackerV1::RefitInward(AliESDEvent *event) } // Prolongate to TPC - if (PropagateToX(track, xTPC, fgkMaxStep)) { // -with update + if (PropagateToX(track, xTPC, AliTRDReconstructor::GetMaxStep())) { // -with update seed->UpdateTrackParams(&track, AliESDtrack::kTRDrefit); found++; kUPDATE = kTRUE; @@ -524,7 +521,7 @@ Int_t AliTRDtrackerV1::RefitInward(AliESDEvent *event) // Prolongate to TPC without update if(!kUPDATE) { AliTRDtrackV1 tt(*seed); - if (PropagateToX(tt, xTPC, fgkMaxStep)) seed->UpdateTrackParams(&tt, AliESDtrack::kTRDbackup); + if (PropagateToX(tt, xTPC, AliTRDReconstructor::GetMaxStep())) seed->UpdateTrackParams(&tt, AliESDtrack::kTRDbackup); } } AliInfo(Form("Number of seeds: TRDout[%d]", nseed)); @@ -572,12 +569,12 @@ Int_t AliTRDtrackerV1::FollowProlongation(AliTRDtrackV1 &t) } Double_t x = tracklet->GetX();//GetX0(); // reject tracklets which are not considered for inward refit - if(x > t.GetX()+fgkMaxStep) continue; + if(x > t.GetX()+AliTRDReconstructor::GetMaxStep()) continue; // append tracklet to track t.SetTracklet(tracklet, index); - if (x < (t.GetX()-fgkMaxStep) && !PropagateToX(t, x+fgkMaxStep, fgkMaxStep)) break; + if (x < (t.GetX()-AliTRDReconstructor::GetMaxStep()) && !PropagateToX(t, x+AliTRDReconstructor::GetMaxStep(), AliTRDReconstructor::GetMaxStep())) break; if (!AdjustSector(&t)) break; // Start global position @@ -755,7 +752,7 @@ Int_t AliTRDtrackerV1::FollowBackProlongation(AliTRDtrackV1 &t) !matrix ){ AliDebug(4, Form("Missing Geometry ly[%d]. Guess radial position", ily)); // propagate to the default radial position - if(fR[ily] > (fgkMaxStep + t.GetX()) && !PropagateToX(t, fR[ily], fgkMaxStep)){ + if(fR[ily] > (AliTRDReconstructor::GetMaxStep() + t.GetX()) && !PropagateToX(t, fR[ily], AliTRDReconstructor::GetMaxStep())){ n=-1; t.SetStatus(AliTRDtrackV1::kPropagation); AliDebug(4, "Failed Propagation [Missing Geometry]"); @@ -767,7 +764,7 @@ Int_t AliTRDtrackerV1::FollowBackProlongation(AliTRDtrackV1 &t) AliDebug(4, "Failed Adjust Sector [Missing Geometry]"); break; } - if(TMath::Abs(t.GetSnp()) > fgkMaxSnp){ + if(TMath::Abs(t.GetSnp()) > AliTRDReconstructor::GetMaxSnp()){ n=-1; t.SetStatus(AliTRDtrackV1::kSnp); AliDebug(4, "Failed Max Snp [Missing Geometry]"); @@ -783,8 +780,8 @@ Int_t AliTRDtrackerV1::FollowBackProlongation(AliTRDtrackV1 &t) matrix->LocalToMaster(loc, glb); // Propagate to the radial distance of the current layer - x = glb[0] - fgkMaxStep; - if(x > (fgkMaxStep + t.GetX()) && !PropagateToX(t, x, fgkMaxStep)){ + x = glb[0] - AliTRDReconstructor::GetMaxStep(); + if(x > (AliTRDReconstructor::GetMaxStep() + t.GetX()) && !PropagateToX(t, x, AliTRDReconstructor::GetMaxStep())){ n=-1; t.SetStatus(AliTRDtrackV1::kPropagation); AliDebug(4, Form("Failed Initial Propagation to x[%7.2f]", x)); @@ -796,10 +793,10 @@ Int_t AliTRDtrackerV1::FollowBackProlongation(AliTRDtrackV1 &t) AliDebug(4, "Failed Adjust Sector Start"); break; } - if(TMath::Abs(t.GetSnp()) > fgkMaxSnp) { + if(TMath::Abs(t.GetSnp()) > AliTRDReconstructor::GetMaxSnp()) { n=-1; t.SetStatus(AliTRDtrackV1::kSnp); - AliDebug(4, Form("Failed Max Snp[%f] MaxSnp[%f]", t.GetSnp(), fgkMaxSnp)); + AliDebug(4, Form("Failed Max Snp[%f] MaxSnp[%f]", t.GetSnp(), AliTRDReconstructor::GetMaxSnp())); break; } Bool_t doRecalculate = kFALSE; @@ -819,14 +816,14 @@ Int_t AliTRDtrackerV1::FollowBackProlongation(AliTRDtrackV1 &t) continue; } matrix->LocalToMaster(loc, glb); - x = glb[0] - fgkMaxStep; + x = glb[0] - AliTRDReconstructor::GetMaxStep(); } // check if track is well inside fiducial volume - if (!t.GetProlongation(x+fgkMaxStep, y, z)) { + if (!t.GetProlongation(x+AliTRDReconstructor::GetMaxStep(), y, z)) { n=-1; t.SetStatus(AliTRDtrackV1::kProlongation); - AliDebug(4, Form("Failed Prolongation to x[%7.2f] y[%7.2f] z[%7.2f]", x+fgkMaxStep, y, z)); + AliDebug(4, Form("Failed Prolongation to x[%7.2f] y[%7.2f] z[%7.2f]", x+AliTRDReconstructor::GetMaxStep(), y, z)); break; } if(fGeom->IsOnBoundary(det, y, z, .5)){ @@ -921,7 +918,7 @@ Int_t AliTRDtrackerV1::FollowBackProlongation(AliTRDtrackV1 &t) continue; } x = ptrTracklet->GetX(); //GetX0(); - if(x > (fgkMaxStep + t.GetX()) && !PropagateToX(t, x, fgkMaxStep)) { + if(x > (AliTRDReconstructor::GetMaxStep() + t.GetX()) && !PropagateToX(t, x, AliTRDReconstructor::GetMaxStep())) { n=-1; t.SetStatus(AliTRDtrackV1::kPropagation); AliDebug(4, Form("Failed Propagation to Tracklet x[%7.2f]", x)); @@ -933,10 +930,10 @@ Int_t AliTRDtrackerV1::FollowBackProlongation(AliTRDtrackV1 &t) AliDebug(4, "Failed Adjust Sector"); break; } - if(TMath::Abs(t.GetSnp()) > fgkMaxSnp) { + if(TMath::Abs(t.GetSnp()) > AliTRDReconstructor::GetMaxSnp()) { n=-1; t.SetStatus(AliTRDtrackV1::kSnp); - AliDebug(4, Form("Failed Max Snp[%f] MaxSnp[%f]", t.GetSnp(), fgkMaxSnp)); + AliDebug(4, Form("Failed Max Snp[%f] MaxSnp[%f]", t.GetSnp(), AliTRDReconstructor::GetMaxSnp())); break; } Double_t cov[3]; ptrTracklet->GetCovAt(x, cov); @@ -1695,8 +1692,8 @@ Double_t AliTRDtrackerV1::FitKalman(AliTRDtrackV1 *track, AliTRDseedV1 * const t while(ip < np){ //don't do anything if next marker is after next update point. - if((up?-1:1) * (points[ip].GetX() - x) - fgkMaxStep < 0) break; - if(((up?-1:1) * (points[ip].GetX() - track->GetX()) < 0) && !PropagateToX(*track, points[ip].GetX(), fgkMaxStep)) return -1.; + if((up?-1:1) * (points[ip].GetX() - x) - AliTRDReconstructor::GetMaxStep() < 0) break; + if(((up?-1:1) * (points[ip].GetX() - track->GetX()) < 0) && !PropagateToX(*track, points[ip].GetX(), AliTRDReconstructor::GetMaxStep())) return -1.; Double_t xyz[3]; // should also get the covariance track->GetXYZ(xyz); @@ -1707,10 +1704,10 @@ Double_t AliTRDtrackerV1::FitKalman(AliTRDtrackV1 *track, AliTRDseedV1 * const t // printf("plane[%d] tracklet[%p] x[%f]\n", iplane, ptrTracklet, x); // Propagate closer to the next update point - if(((up?-1:1) * (x - track->GetX()) + fgkMaxStep < 0) && !PropagateToX(*track, x + (up?-1:1)*fgkMaxStep, fgkMaxStep)) return -1.; + if(((up?-1:1) * (x - track->GetX()) + AliTRDReconstructor::GetMaxStep() < 0) && !PropagateToX(*track, x + (up?-1:1)*AliTRDReconstructor::GetMaxStep(), AliTRDReconstructor::GetMaxStep())) return -1.; if(!AdjustSector(track)) return -1; - if(TMath::Abs(track->GetSnp()) > fgkMaxSnp) return -1; + if(TMath::Abs(track->GetSnp()) > AliTRDReconstructor::GetMaxSnp()) return -1; //load tracklet to the tracker and the track /* Int_t index; @@ -1759,7 +1756,7 @@ Double_t AliTRDtrackerV1::FitKalman(AliTRDtrackV1 *track, AliTRDseedV1 * const t // extrapolation while(ip < np){ - if(((up?-1:1) * (points[ip].GetX() - track->GetX()) < 0) && !PropagateToX(*track, points[ip].GetX(), fgkMaxStep)) return -1.; + if(((up?-1:1) * (points[ip].GetX() - track->GetX()) < 0) && !PropagateToX(*track, points[ip].GetX(), AliTRDReconstructor::GetMaxStep())) return -1.; Double_t xyz[3]; // should also get the covariance track->GetXYZ(xyz); @@ -1804,15 +1801,13 @@ Int_t AliTRDtrackerV1::PropagateToX(AliTRDtrackV1 &t, Double_t xToGo, Double_t m // Returns 1 if track reaches the plane, and 0 otherwise // - const Double_t kEpsilon = 0.00001; - // Current track X-position Double_t xpos = t.GetX(); // Direction: inward or outward Double_t dir = (xpos < xToGo) ? 1.0 : -1.0; - while (((xToGo - xpos) * dir) > kEpsilon) { + while (((xToGo - xpos) * dir) > AliTRDReconstructor::GetEpsilon()) { Double_t xyz0[3]; Double_t xyz1[3]; diff --git a/TRD/AliTRDtrackerV1.h b/TRD/AliTRDtrackerV1.h index d6c084da42d..28e12c322cd 100644 --- a/TRD/AliTRDtrackerV1.h +++ b/TRD/AliTRDtrackerV1.h @@ -84,6 +84,7 @@ public: static Int_t GetNTimeBins() { return fgNTimeBins;} static void GetExtrapolationConfig(Int_t iconfig, Int_t planes[2]); static void GetSeedingConfig(Int_t iconfig, Int_t planes[4]); + static TLinearFitter* GetTiltedRiemanFitter(); static TLinearFitter* GetTiltedRiemanFitterConstraint(); static AliRieman* GetRiemanFitter(); @@ -200,7 +201,6 @@ private: Float_t GetChi2Z(const AliTRDseedV1 *const tracklets) const; Float_t GetChi2Phi(const AliTRDseedV1 *const tracklets) const; -private: const AliTRDReconstructor *fkReconstructor; // reconstructor manager const AliTRDrecoParam *fkRecoParam; // reco param for the current event AliTRDgeometry *fGeom; // Pointer to TRD geometry @@ -211,13 +211,6 @@ private: TClonesArray *fTracksESD; // List of ESD tracks in current SM Float_t fR[kNPlanes]; //! rough radial position of each TRD layer - // should go to the recoParam - static const Double_t fgkMaxChi2; // Max increment in track chi2 - static const Float_t fgkMinClustersInTrack; // Min number of clusters in track - static const Float_t fgkLabelFraction; // Min fraction of same label - static const Double_t fgkMaxSnp; // Maximal snp for tracking - static const Double_t fgkMaxStep; // Maximal step for tracking - // stand alone tracking static Double_t fgTopologicQA[kNConfigs]; // Topologic quality Double_t fTrackQuality[kMaxTracksStack]; // Track quality @@ -231,7 +224,7 @@ private: static TLinearFitter *fgTiltedRiemanConstrained; // Fitter for the tilted Rieman fit with vertex constraint static AliRieman *fgRieman; // Fitter for the untilted Rieman fit - ClassDef(AliTRDtrackerV1, 5) // TRD tracker - tracklet based tracking + ClassDef(AliTRDtrackerV1, 6) // TRD tracker - tracklet based tracking }; #endif -- 2.43.0