From 237d3f5ced1a4b243a343328c08a3c17b40da1cc Mon Sep 17 00:00:00 2001 From: vestbo Date: Thu, 25 Apr 2002 16:49:44 +0000 Subject: [PATCH] Some additional changes related to the previous changes. AliL3Transform object has now to be passed to the AliL3HoughBaseTransformer in order to avoid giving the path where the config file is to the AliL3HoughBaseTransformer object. --- HLT/hough/AliL3Histogram.cxx | 8 ++- HLT/hough/AliL3Histogram.h | 27 +++++++++- HLT/hough/AliL3Hough.cxx | 70 ++++++++++++++++++------- HLT/hough/AliL3Hough.h | 12 +++-- HLT/hough/AliL3HoughBaseTransformer.cxx | 12 ++--- HLT/hough/AliL3HoughBaseTransformer.h | 3 +- HLT/hough/AliL3HoughEval.cxx | 4 +- HLT/hough/AliL3HoughEval.h | 6 +-- HLT/hough/AliL3HoughTrack.cxx | 12 ++--- HLT/hough/AliL3HoughTrack.h | 5 +- HLT/hough/AliL3HoughTransformer.cxx | 31 +++++++++-- HLT/hough/AliL3HoughTransformer.h | 2 +- HLT/hough/Makefile | 2 +- 13 files changed, 138 insertions(+), 56 deletions(-) diff --git a/HLT/hough/AliL3Histogram.cxx b/HLT/hough/AliL3Histogram.cxx index 6f998ce249b..2b182d14f0f 100644 --- a/HLT/hough/AliL3Histogram.cxx +++ b/HLT/hough/AliL3Histogram.cxx @@ -241,9 +241,10 @@ Double_t AliL3Histogram::GetBinCenterY(Int_t ybin) } -#ifdef use_root + void AliL3Histogram::Draw(Char_t *option) { +#ifdef use_root fRootHisto = new TH2F(fName,"",fNxbins,fXmin,fXmax,fNybins,fYmin,fYmax); for(Int_t bin=0; binDraw(option); + return; +#endif + cerr<<"AliL3Histogram::Draw : You need to compile with ROOT in order to draw histogram"< #include "AliL3RootTypes.h" + #ifdef use_root #include #endif @@ -49,10 +51,12 @@ class AliL3Histogram { void AddBinContent(Int_t bin,Int_t weight); void Add(AliL3Histogram *h1,Double_t weight=1); void SetThreshold(Int_t i) {fThreshold = i;} + void Draw(Char_t *option="hist"); #ifdef use_root - void Draw(Char_t *option="hist"); - TH2F *GetRootHisto() {return fRootHisto;} + TH2F *GetRootHisto(); +#else + void *GetRootHisto(); #endif Double_t GetXmin() {return fXmin;} @@ -74,4 +78,23 @@ class AliL3Histogram { }; +#ifdef use_root +inline TH2F *AliL3Histogram::GetRootHisto() +{ + if(!fRootHisto) + { + cerr<<"AliL3Histogram::GetRootHisto() : You must first Draw histogram before accessing it"<ReadData(slice); +// hough->Transform(); +// hough->FindTrackCandidates(); +// +// AliL3TrackArray *tracks = hough->GetTracks(patch); ClassImp(AliL3Hough) @@ -46,11 +53,22 @@ AliL3Hough::AliL3Hough() fDoIterative = kFALSE; fWriteDigits=kFALSE; fNPatches=0; + fMemHandler = 0; + fHoughTransformer = 0; + fEval = 0; + fPeakFinder = 0; + fTracks = 0; + fMerger = 0; + fInterMerger = 0; + fGlobalMerger = 0; + fTransform = 0; } AliL3Hough::AliL3Hough(Char_t *path,Bool_t binary,Int_t n_eta_segments) { + //Default ctor. + fBinary = binary; strcpy(fPath,path); fNEtaSegments = n_eta_segments; @@ -63,6 +81,8 @@ AliL3Hough::AliL3Hough(Char_t *path,Bool_t binary,Int_t n_eta_segments) AliL3Hough::~AliL3Hough() { + //dtor + CleanUp(); if(fMerger) delete fMerger; @@ -72,6 +92,8 @@ AliL3Hough::~AliL3Hough() delete fPeakFinder; if(fGlobalMerger) delete fGlobalMerger; + if(fTransform) + delete fTransform; } void AliL3Hough::CleanUp() @@ -96,8 +118,10 @@ void AliL3Hough::CleanUp() void AliL3Hough::Init() { + fPeakThreshold = 0; fNPatches = NPatches; - fHoughTransformer = new AliL3HoughTransformer*[fNPatches]; + fTransform = new AliL3Transform(fPath); + fHoughTransformer = new AliL3HoughBaseTransformer*[fNPatches]; #ifdef use_aliroot fMemHandler = new AliL3FileHandler*[fNPatches]; #else @@ -108,7 +132,9 @@ void AliL3Hough::Init() for(Int_t i=0; iCreateHistograms(64,-0.003,0.003,64,-0.26,0.26); + fHoughTransformer[i]->SetTransformer(fTransform); + //fHoughTransformer[i]->CreateHistograms(64,-0.003,0.003,64,-0.26,0.26); + fHoughTransformer[i]->CreateHistograms(64,0.1,64,-30,30); fHoughTransformer[i]->SetThreshold(3); fEval[i] = new AliL3HoughEval(); fTracks[i] = new AliL3TrackArray("AliL3HoughTrack"); @@ -124,6 +150,7 @@ void AliL3Hough::Init() fPeakFinder = new AliL3HoughMaxFinder("KappaPhi"); fMerger = new AliL3HoughMerger(fNPatches); fInterMerger = new AliL3HoughIntMerger(); + fGlobalMerger = 0; } void AliL3Hough::Process(Int_t minslice,Int_t maxslice) @@ -175,7 +202,7 @@ void AliL3Hough::ReadData(Int_t slice) } } -void AliL3Hough::Transform() +void AliL3Hough::Transform(Int_t row_range) { //Transform all data given to the transformer within the given slice //(after ReadData(slice)) @@ -183,7 +210,10 @@ void AliL3Hough::Transform() for(Int_t i=0; iReset();//Reset the histograms - fHoughTransformer[i]->TransformCircle(); + if(row_range < 0) + fHoughTransformer[i]->TransformCircle(); + else + fHoughTransformer[i]->TransformCircleC(row_range); } } @@ -191,10 +221,8 @@ void AliL3Hough::MergePatches() { if(fAddHistograms) //Nothing to merge here return; - AliL3Transform *tr = new AliL3Transform(); - fMerger->SetTransformer(tr); + fMerger->SetTransformer(fTransform); fMerger->MergePatches(kTRUE); - delete tr; } void AliL3Hough::MergeInternally() @@ -225,7 +253,7 @@ void AliL3Hough::ProcessPatchIter(Int_t patch) //transform + peakfinding + evaluation + transform +... Int_t num_of_tries = 10; - AliL3HoughTransformer *tr = fHoughTransformer[patch]; + AliL3HoughBaseTransformer *tr = fHoughTransformer[patch]; AliL3TrackArray *tracks = fTracks[patch]; tracks->Reset(); AliL3HoughEval *ev = fEval[patch]; @@ -243,7 +271,7 @@ void AliL3Hough::ProcessPatchIter(Int_t patch) hist = tr->GetHistogram(i); if(hist->GetNEntries()==0) continue; fPeakFinder->SetHistogram(hist); - Int_t n=1; + //Int_t n=1; Float_t x,y; //fPeakFinder->FindAbsMaxima(*x,*y); fPeakFinder->FindPeak(3,0.95,5,x,y); @@ -287,28 +315,33 @@ void AliL3Hough::FindTrackCandidates() n_patches = 1; //Histograms has been added. else n_patches = fNPatches; + for(Int_t i=0; iGetEtaMax()-tr->GetEtaMin()/tr->GetNEtaSegments()); fTracks[i]->Reset(); for(Int_t j=0; jGetHistogram(j); if(hist->GetNEntries()==0) continue; fPeakFinder->SetHistogram(hist); - Int_t n=10; - Float_t x[10]; - Float_t y[10]; - Int_t weight[10]; - fPeakFinder->FindPeak1(x,y,weight,n,1); + fPeakFinder->SetThreshold(fPeakThreshold); + Int_t n=20; + Float_t x[n]; + Float_t y[n]; + Int_t weight[n]; + //fPeakFinder->FindPeak1(x,y,weight,n,2,1); + fPeakFinder->FindMaxima(x,y,weight,n); for(Int_t k=0; kNextTrack(); track->SetTrackParameters(x[k],y[k],weight[k]); track->SetEtaIndex(j); - track->SetEta((Double_t)(j*tr->GetEtaSlice())); + track->SetEta((Double_t)(j*eta_slice)); track->SetRowRange(NRows[0][0],NRows[5][1]); } } @@ -333,6 +366,7 @@ void AliL3Hough::Evaluate(Int_t road_width) for(Int_t i=0; iInitTransformer(fHoughTransformer[i]); + continue; fEval[i]->SetNumOfRowsToMiss(2); fEval[i]->SetNumOfPadsToLook(road_width); if(fAddHistograms) diff --git a/HLT/hough/AliL3Hough.h b/HLT/hough/AliL3Hough.h index ff161ce5577..44f9b4ef95b 100644 --- a/HLT/hough/AliL3Hough.h +++ b/HLT/hough/AliL3Hough.h @@ -4,7 +4,7 @@ #include "AliL3RootTypes.h" class AliL3HoughMaxFinder; -class AliL3HoughTransformer; +class AliL3HoughBaseTransformer; class AliL3Histogram; class AliL3MemHandler; class AliL3FileHandler; @@ -14,6 +14,7 @@ class AliL3TrackArray; class AliL3HoughMerger; class AliL3HoughIntMerger; class AliL3HoughGlobalMerger; +class AliL3Transform; class AliL3Hough { @@ -25,18 +26,20 @@ class AliL3Hough { Bool_t fWriteDigits; Int_t fNEtaSegments; Int_t fNPatches; + Int_t fPeakThreshold; #ifdef use_aliroot AliL3FileHandler **fMemHandler; //! #else AliL3MemHandler **fMemHandler; //! #endif - AliL3HoughTransformer **fHoughTransformer; //! + AliL3HoughBaseTransformer **fHoughTransformer; //! AliL3HoughEval **fEval; //! AliL3HoughMaxFinder *fPeakFinder; //! AliL3TrackArray **fTracks; //! AliL3HoughMerger *fMerger; //! AliL3HoughIntMerger *fInterMerger; //! AliL3HoughGlobalMerger *fGlobalMerger; //! + AliL3Transform *fTransform; //! void CleanUp(); void Init(); @@ -49,7 +52,7 @@ class AliL3Hough { void Process(Int_t minslice,Int_t maxslice); void ReadData(Int_t slice); - void Transform(); + void Transform(Int_t row_range = -1); void ProcessSliceIter(); void ProcessPatchIter(Int_t patch); void MergePatches(); @@ -69,9 +72,10 @@ class AliL3Hough { void SetAddHistograms() {fAddHistograms = kTRUE;} void DoIterative() {fDoIterative = kTRUE;} void SetWriteDigits() {fWriteDigits = kTRUE;} + void SetPeakThreshold(Int_t i) {fPeakThreshold = i;} //Getters - AliL3HoughTransformer *GetTransformer(Int_t i) {if(!fHoughTransformer[i]) return 0; return fHoughTransformer[i];} + AliL3HoughBaseTransformer *GetTransformer(Int_t i) {if(!fHoughTransformer[i]) return 0; return fHoughTransformer[i];} AliL3TrackArray *GetTracks(Int_t i) {if(!fTracks[i]) return 0; return fTracks[i];} AliL3HoughEval *GetEval(Int_t i) {if(!fEval[i]) return 0; return fEval[i];} AliL3HoughMerger *GetMerger() {if(!fMerger) return 0; return fMerger;} diff --git a/HLT/hough/AliL3HoughBaseTransformer.cxx b/HLT/hough/AliL3HoughBaseTransformer.cxx index 0e804a2c35e..c04802143d2 100644 --- a/HLT/hough/AliL3HoughBaseTransformer.cxx +++ b/HLT/hough/AliL3HoughBaseTransformer.cxx @@ -15,6 +15,9 @@ // AliL3HoughBaseTransformer // // The base class for implementations of Hough Transform on ALICE TPC data. +// +// This is an abstract class, and is only meant to provide the interface +// to the different implementations. ClassImp(AliL3HoughBaseTransformer) @@ -23,7 +26,6 @@ AliL3HoughBaseTransformer::AliL3HoughBaseTransformer() //Default constructor fTransform = 0; fDigitRowData = 0; - } AliL3HoughBaseTransformer::AliL3HoughBaseTransformer(Int_t slice,Int_t patch,Int_t n_eta_segments) @@ -33,14 +35,12 @@ AliL3HoughBaseTransformer::AliL3HoughBaseTransformer(Int_t slice,Int_t patch,Int fNEtaSegments = n_eta_segments; fEtaMin = 0; fEtaMax = fSlice < 18 ? 0.9 : -0.9; - fTransform = new AliL3Transform(); fThreshold = 0; - fDigitRowData=0; + fDigitRowData = 0; + fTransform = 0; } AliL3HoughBaseTransformer::~AliL3HoughBaseTransformer() { - if(fTransform) - delete fTransform; -} +} diff --git a/HLT/hough/AliL3HoughBaseTransformer.h b/HLT/hough/AliL3HoughBaseTransformer.h index 9f294af72bd..a1a298691b4 100644 --- a/HLT/hough/AliL3HoughBaseTransformer.h +++ b/HLT/hough/AliL3HoughBaseTransformer.h @@ -22,12 +22,13 @@ class AliL3HoughBaseTransformer { protected: AliL3Transform *fTransform; //! - + public: AliL3HoughBaseTransformer(); AliL3HoughBaseTransformer(Int_t slice,Int_t patch,Int_t n_eta_segments); virtual ~AliL3HoughBaseTransformer(); + void SetTransformer(AliL3Transform *tr) {fTransform = tr;} void SetInputData(UInt_t ndigits,AliL3DigitRowData *ptr) {fDigitRowData = ptr;} virtual void CreateHistograms(Int_t nxbin,Double_t ptmin,Int_t nybin,Double_t phimin,Double_t phimax) = 0; diff --git a/HLT/hough/AliL3HoughEval.cxx b/HLT/hough/AliL3HoughEval.cxx index 3a64d62be80..05e3a4ca3e7 100644 --- a/HLT/hough/AliL3HoughEval.cxx +++ b/HLT/hough/AliL3HoughEval.cxx @@ -14,7 +14,7 @@ #include "AliL3TrackArray.h" #include "AliL3Logging.h" #include "AliL3HoughEval.h" -#include "AliL3HoughTransformer.h" +#include "AliL3HoughBaseTransformer.h" #include "AliL3DigitData.h" #include "AliL3HoughTrack.h" #include "AliL3Transform.h" @@ -54,7 +54,7 @@ AliL3HoughEval::~AliL3HoughEval() } } -void AliL3HoughEval::InitTransformer(AliL3HoughTransformer *transformer) +void AliL3HoughEval::InitTransformer(AliL3HoughBaseTransformer *transformer) { fHoughTransformer = transformer; fSlice = fHoughTransformer->GetSlice(); diff --git a/HLT/hough/AliL3HoughEval.h b/HLT/hough/AliL3HoughEval.h index 029d314bee7..f88d7f0fd1b 100644 --- a/HLT/hough/AliL3HoughEval.h +++ b/HLT/hough/AliL3HoughEval.h @@ -4,7 +4,7 @@ #include "AliL3RootTypes.h" -class AliL3HoughTransformer; +class AliL3HoughBaseTransformer; class AliL3Transform; class AliL3HoughTrack; class AliL3DigitRowData; @@ -29,14 +29,14 @@ class AliL3HoughEval { Bool_t fRemoveFoundTracks; AliL3Transform *fTransform; //! - AliL3HoughTransformer *fHoughTransformer; //! + AliL3HoughBaseTransformer *fHoughTransformer; //! AliL3DigitRowData **fRowPointers; //! public: AliL3HoughEval(); virtual ~AliL3HoughEval(); - void InitTransformer(AliL3HoughTransformer *transformer); + void InitTransformer(AliL3HoughBaseTransformer *transformer); void GenerateLUT(); void DisplayEtaSlice(Int_t eta_index,AliL3Histogram *hist); Bool_t LookInsideRoad(AliL3HoughTrack *track,Int_t eta_index,Bool_t remove=kFALSE); diff --git a/HLT/hough/AliL3HoughTrack.cxx b/HLT/hough/AliL3HoughTrack.cxx index 8746654041a..9baff670de7 100644 --- a/HLT/hough/AliL3HoughTrack.cxx +++ b/HLT/hough/AliL3HoughTrack.cxx @@ -24,7 +24,6 @@ AliL3HoughTrack::AliL3HoughTrack() fWeight = 0; fMinDist=0; - fTransform = new AliL3Transform(); fDLine = 0; fPsiLine = 0; fIsHelix = true; @@ -34,9 +33,7 @@ AliL3HoughTrack::AliL3HoughTrack() AliL3HoughTrack::~AliL3HoughTrack() { - //Destructor - if(fTransform) - delete fTransform; + } void AliL3HoughTrack::Set(AliL3Track *track) @@ -205,6 +202,7 @@ void AliL3HoughTrack::SetLineParameters(Double_t psi,Double_t D,Int_t weight,Int //Transform line parameters to coordinate system of slice: + /* D = D + fTransform->Row2X(ref_row)*cos(psi); fDLine = D; @@ -213,7 +211,7 @@ void AliL3HoughTrack::SetLineParameters(Double_t psi,Double_t D,Int_t weight,Int SetNHits(weight); SetRowRange(rowrange[0],rowrange[1]); fIsHelix = false; - + */ } void AliL3HoughTrack::SetBestMCid(Int_t mcid,Double_t min_dist) @@ -230,7 +228,7 @@ void AliL3HoughTrack::SetBestMCid(Int_t mcid,Double_t min_dist) void AliL3HoughTrack::GetLineCrossingPoint(Int_t padrow,Double_t *xy) { - + /* if(fIsHelix) { printf("AliL3HoughTrack::GetLineCrossingPoint : Track is not a line\n"); @@ -244,7 +242,7 @@ void AliL3HoughTrack::GetLineCrossingPoint(Int_t padrow,Double_t *xy) Double_t yhit = a*xhit + b; xy[0] = xhit; xy[1] = yhit; - + */ } /* diff --git a/HLT/hough/AliL3HoughTrack.h b/HLT/hough/AliL3HoughTrack.h index 9261fb28d27..b687308c7f2 100644 --- a/HLT/hough/AliL3HoughTrack.h +++ b/HLT/hough/AliL3HoughTrack.h @@ -3,13 +3,10 @@ #include "AliL3Track.h" -class AliL3Transform; - class AliL3HoughTrack : public AliL3Track { private: - - AliL3Transform *fTransform; //! + Double_t fMinDist; Int_t fWeight; Int_t fEtaIndex; diff --git a/HLT/hough/AliL3HoughTransformer.cxx b/HLT/hough/AliL3HoughTransformer.cxx index 399a7534593..753f6e122bf 100644 --- a/HLT/hough/AliL3HoughTransformer.cxx +++ b/HLT/hough/AliL3HoughTransformer.cxx @@ -28,8 +28,7 @@ AliL3HoughTransformer::AliL3HoughTransformer() AliL3HoughTransformer::AliL3HoughTransformer(Int_t slice,Int_t patch,Int_t n_eta_segments) : AliL3HoughBaseTransformer(slice,patch,n_eta_segments) { //Normal constructor - - fParamSpace = 0; + fParamSpace = 0; } AliL3HoughTransformer::~AliL3HoughTransformer() @@ -123,7 +122,14 @@ void AliL3HoughTransformer::TransformCircle() AliL3DigitRowData *tempPt = GetDataPointer(); if(!tempPt) { - printf("\nAliL3HoughTransformer::TransformCircle : No input data!!!\n\n"); + LOG(AliL3Log::kError,"AliL3HoughTransformer::TransformCircle","Data") + <<"No input data "<