#else
#include "AliL3MemHandler.h"
#endif
+#include "AliL3DataHandler.h"
#include "AliL3DigitData.h"
#include "AliL3HoughEval.h"
#include "AliL3Transform.h"
-#include "AliL3Defs.h"
#include "AliL3TrackArray.h"
#include "AliL3HoughTrack.h"
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;
- fAddHistograms = kFALSE;
- fDoIterative = kFALSE;
- fWriteDigits = kFALSE;
- Init();
}
delete fPeakFinder;
if(fGlobalMerger)
delete fGlobalMerger;
- if(fTransform)
- delete fTransform;
}
void AliL3Hough::CleanUp()
if(fMemHandler[i]) delete fMemHandler[i];
}
- /*
- if(fTracks) delete [] fTracks;
- if(fEval) delete [] fEval;
- if(fHoughTransformer) delete [] fHoughTransformer;
- if(fMemHandler) delete [] fMemHandler;
+ /*
+ if(fTracks) delete [] fTracks;
+ if(fEval) delete [] fEval;
+ if(fHoughTransformer) delete [] fHoughTransformer;
+ if(fMemHandler) delete [] fMemHandler;
*/
}
-void AliL3Hough::Init()
+void AliL3Hough::Init(Char_t *path,Bool_t binary,Int_t n_eta_segments,Bool_t bit8=kFALSE)
{
- fPeakThreshold = 0;
- fNPatches = NPatches;
- fTransform = new AliL3Transform(fPath);
+ fBinary = binary;
+ strcpy(fPath,path);
+ fNEtaSegments = n_eta_segments;
+ fAddHistograms = kFALSE;
+ fDoIterative = kFALSE;
+ fWriteDigits = kFALSE;
+ fUse8bits = bit8;
+
+ AliL3Transform::Init(fPath);
+ fNPatches = AliL3Transform::GetNPatches();
fHoughTransformer = new AliL3HoughBaseTransformer*[fNPatches];
-#ifdef use_aliroot
- fMemHandler = new AliL3FileHandler*[fNPatches];
-#else
fMemHandler = new AliL3MemHandler*[fNPatches];
-#endif
fTracks = new AliL3TrackArray*[fNPatches];
fEval = new AliL3HoughEval*[fNPatches];
for(Int_t i=0; i<fNPatches; i++)
{
- fHoughTransformer[i] = new AliL3HoughTransformer(1,i,fNEtaSegments);
- fHoughTransformer[i]->SetTransformer(fTransform);
- //fHoughTransformer[i]->CreateHistograms(64,-0.003,0.003,64,-0.26,0.26);
+ fHoughTransformer[i] = new AliL3HoughTransformer(0,i,fNEtaSegments);
fHoughTransformer[i]->CreateHistograms(64,0.1,64,-30,30);
fHoughTransformer[i]->SetThreshold(3);
fEval[i] = new AliL3HoughEval();
fTracks[i] = new AliL3TrackArray("AliL3HoughTrack");
+ if(fUse8bits)
+ fMemHandler[i] = new AliL3DataHandler();
+ else
#ifdef use_aliroot
- fMemHandler[i] = new AliL3FileHandler();
- if(!fBinary)
- fMemHandler[i]->SetAliInput(fPath);
+ {
+ fMemHandler[i] = new AliL3FileHandler();
+ if(!fBinary)
+ fMemHandler[i]->SetAliInput(fPath);
+ }
#else
fMemHandler[i] = new AliL3MemHandler();
#endif
-
}
- fPeakFinder = new AliL3HoughMaxFinder("KappaPhi");
+ fPeakFinder = new AliL3HoughMaxFinder("KappaPhi",100);
fMerger = new AliL3HoughMerger(fNPatches);
fInterMerger = new AliL3HoughIntMerger();
fGlobalMerger = 0;
}
-void AliL3Hough::ReadData(Int_t slice)
+void AliL3Hough::ReadData(Int_t slice,Int_t eventnr=0)
{
//Read data from files, binary or root.
UInt_t ndigits=0;
AliL3DigitRowData *digits =0;
Char_t name[256];
+ fMemHandler[i]->Init(slice,i);
if(fBinary)//take input data from binary files
{
- sprintf(name,"%sdigits_%d_%d.raw",fPath,slice,i);
+ if(fUse8bits)
+ sprintf(name,"%sdigits_c8_%d_%d.raw",fPath,slice,i);
+ else
+ sprintf(name,"%sdigits_%d_%d.raw",fPath,slice,i);
fMemHandler[i]->SetBinaryInput(name);
digits = (AliL3DigitRowData *)fMemHandler[i]->CompBinary2Memory(ndigits);
fMemHandler[i]->CloseBinaryInput();
else //read data from root file
{
#ifdef use_aliroot
- fMemHandler[i]->Init(slice,i,NRows[i]);
- digits=(AliL3DigitRowData *)fMemHandler[i]->AliDigits2Memory(ndigits);
+ digits=(AliL3DigitRowData *)fMemHandler[i]->AliDigits2Memory(ndigits,eventnr);
+ fMemHandler[i]->FreeDigitsTree();
#else
cerr<<"You cannot read from rootfile now"<<endl;
#endif
{
if(fAddHistograms) //Nothing to merge here
return;
- fMerger->SetTransformer(fTransform);
fMerger->MergePatches(kTRUE);
}
for(Int_t i=0; i<n_patches; i++)
{
AliL3HoughBaseTransformer *tr = fHoughTransformer[i];
- Double_t eta_slice = (tr->GetEtaMax()-tr->GetEtaMin()/tr->GetNEtaSegments());
+ Double_t eta_slice = (tr->GetEtaMax()-tr->GetEtaMin())/tr->GetNEtaSegments();
fTracks[i]->Reset();
for(Int_t j=0; j<fNEtaSegments; j++)
{
AliL3Histogram *hist = tr->GetHistogram(j);
if(hist->GetNEntries()==0) continue;
+ fPeakFinder->Reset();
fPeakFinder->SetHistogram(hist);
- 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; k<n; k++)
+ fPeakFinder->FindMaxima(0,0); //Simple maxima finder
+ //fPeakFinder->FindAbsMaxima();
+ cout<<"Found "<<fPeakFinder->GetEntries()<<endl;
+ for(Int_t k=0; k<fPeakFinder->GetEntries(); k++)
{
- if(weight[k] == 0) continue;
-
+ if(fPeakFinder->GetWeight(k) == 0) continue;
AliL3HoughTrack *track = (AliL3HoughTrack*)fTracks[i]->NextTrack();
- track->SetTrackParameters(x[k],y[k],weight[k]);
+ track->SetTrackParameters(fPeakFinder->GetXPeak(k),fPeakFinder->GetYPeak(k),fPeakFinder->GetWeight(k));
track->SetEtaIndex(j);
track->SetEta((Double_t)(j*eta_slice));
- track->SetRowRange(NRows[0][0],NRows[5][1]);
+ track->SetRowRange(AliL3Transform::GetFirstRow(0),AliL3Transform::GetLastRow(5));
}
}
fTracks[i]->QSort();
}
}
+void AliL3Hough::InitEvaluate()
+{
+ //Pass the transformer objects to the AliL3HoughEval objects:
+ //This will provide the evaluation objects with all the necessary
+ //data and parameters it needs.
+
+ for(Int_t i=0; i<fNPatches; i++)
+ fEval[i]->InitTransformer(fHoughTransformer[i]);
+}
+
void AliL3Hough::Evaluate(Int_t road_width)
{
//Evaluate the tracks, by looking along the road in the raw data.
+ //If track does not cross all padrows - rows2miss, it is removed from the arrray.
-
if(!fTracks[0])
{
LOG(AliL3Log::kError,"AliL3Hough::Evaluate","Track Array")
return;
}
- printf("Number of tracks before evaluation %d\n",fTracks[0]->GetNTracks());
+ InitEvaluate();
+
AliL3TrackArray *tracks;
for(Int_t i=0; i<fNPatches; i++)
{
- fEval[i]->InitTransformer(fHoughTransformer[i]);
- continue;
fEval[i]->SetNumOfRowsToMiss(2);
fEval[i]->SetNumOfPadsToLook(road_width);
if(fAddHistograms)
if(!fEval[i]->LookInsideRoad(track,track->GetEtaIndex()))
tracks->Remove(j);
if(fAddHistograms)
- track->SetRowRange(NRows[0][0],NRows[5][1]);//All rows included
+ track->SetRowRange(AliL3Transform::GetFirstRow(0),AliL3Transform::GetLastRow(5));//All rows included
}
tracks->Compress();
tracks->QSort(); //Sort the tracks according to weight
void AliL3Hough::EvaluateWithEta()
{
+
+
if(!fTracks[0])
{
printf("AliL3Hough::EvaluateWithEta: NO TRACKS\n");
fMerger->FillTracks(fTracks[0],0);
}
-void AliL3Hough::WriteTracks(Char_t *path)
+void AliL3Hough::WriteTracks(Int_t slice,Char_t *path)
{
+ //Write the tracks in slice
+
AliL3MemHandler *mem = new AliL3MemHandler();
Char_t fname[100];
if(fAddHistograms)
{
- sprintf(fname,"%s/tracks.raw",path);
+ sprintf(fname,"%s/tracks_ho_%d.raw",path,slice);
mem->SetBinaryOutput(fname);
mem->TrackArray2Binary(fTracks[0]);
mem->CloseBinaryOutput();
{
for(Int_t i=0; i<fNPatches; i++)
{
- sprintf(fname,"%s/tracks_%d.raw",path,i);
+ sprintf(fname,"%s/tracks_ho_%d_%d.raw",path,slice,i);
mem->SetBinaryOutput(fname);
mem->TrackArray2Binary(fTracks[i]);
mem->CloseBinaryOutput();
delete mem;
}
-#ifdef use_aliroot
+
void AliL3Hough::WriteDigits(Char_t *outfile)
{
+#ifdef use_aliroot
//Write the current data to a new rootfile.
for(Int_t i=0; i<fNPatches; i++)
AliL3DigitRowData *tempPt = (AliL3DigitRowData*)fHoughTransformer[i]->GetDataPointer();
fMemHandler[i]->AliDigits2RootFile(tempPt,outfile);
}
-
+#else
+ cerr<<"AliL3Hough::WriteDigits : You need to compile with AliROOT!"<<endl;
+ return;
+#endif
}
-#endif
+