fUse8bits = bit8;
AliL3Transform::Init(fPath);
- fPeakThreshold = 0;
fNPatches = AliL3Transform::GetNPatches();
fHoughTransformer = new AliL3HoughBaseTransformer*[fNPatches];
fMemHandler = new AliL3MemHandler*[fNPatches];
}
-void AliL3Hough::ReadData(Int_t slice)
+void AliL3Hough::ReadData(Int_t slice,Int_t eventnr=0)
{
//Read data from files, binary or root.
else //read data from root file
{
#ifdef use_aliroot
- 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(hist->GetNEntries()==0) continue;
fPeakFinder->Reset();
fPeakFinder->SetHistogram(hist);
- fPeakFinder->SetThreshold(fPeakThreshold);
- fPeakFinder->FindMaxima(); //Simple maxima finder
+ fPeakFinder->FindMaxima(0,0); //Simple maxima finder
+ //fPeakFinder->FindAbsMaxima();
+ cout<<"Found "<<fPeakFinder->GetEntries()<<endl;
for(Int_t k=0; k<fPeakFinder->GetEntries(); k++)
{
if(fPeakFinder->GetWeight(k) == 0) continue;
{
//Pass the transformer objects to the AliL3HoughEval objects:
//This will provide the evaluation objects with all the necessary
- //data it needs.
+ //data and parameters it needs.
for(Int_t i=0; i<fNPatches; i++)
fEval[i]->InitTransformer(fHoughTransformer[i]);
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
+
Bool_t fUse8bits;
Int_t fNEtaSegments;
Int_t fNPatches;
- Int_t fPeakThreshold;
AliL3MemHandler **fMemHandler; //!
AliL3HoughBaseTransformer **fHoughTransformer; //!
AliL3HoughEval **fEval; //!
void Init(Char_t *path,Bool_t binary,Int_t n_eta_segments,Bool_t bit8=kFALSE);
void Process(Int_t minslice,Int_t maxslice);
- void ReadData(Int_t slice);
+ void ReadData(Int_t slice,Int_t eventnr=0);
void Transform(Int_t row_range = -1);
void ProcessSliceIter();
void ProcessPatchIter(Int_t patch);
void Evaluate(Int_t road_width=1);
void EvaluateWithEta();
void WriteTracks(Int_t slice,Char_t *path="./");
-#ifdef use_aliroot
void WriteDigits(Char_t *outfile="output_digits.root");
-#endif
void InitEvaluate();
//Setters
void SetAddHistograms() {fAddHistograms = kTRUE;}
void DoIterative() {fDoIterative = kTRUE;}
void SetWriteDigits() {fWriteDigits = kTRUE;}
- void SetPeakThreshold(Int_t i) {fPeakThreshold = i;}
//Getters
AliL3HoughBaseTransformer *GetTransformer(Int_t i) {if(!fHoughTransformer[i]) return 0; return fHoughTransformer[i];}
AliL3HoughMerger *GetMerger() {if(!fMerger) return 0; return fMerger;}
AliL3HoughIntMerger *GetInterMerger() {if(!fInterMerger) return 0; return fInterMerger;}
AliL3MemHandler *GetMemHandler(Int_t i) {if(!fMemHandler[i]) return 0; return fMemHandler[i];}
-
+ AliL3HoughMaxFinder *GetMaxFinder() {return fPeakFinder;}
ClassDef(AliL3Hough,1) //Hough transform base class
Float_t xyz[3];
Int_t total_charge=0;//total charge along the road
- Double_t etaslice = (fEtaMax - fEtaMin)/fNEtaSegments;
-
-
+
//Check if the track is leaving the sector at some point
Float_t maxrow=300;
Double_t angle=AliL3Transform::Pi()/18;
return;
}
- Double_t etaslice = (fEtaMax - fEtaMin)/fNEtaSegments;
for(Int_t padrow = AliL3Transform::GetFirstRow(fPatch); padrow <= AliL3Transform::GetLastRow(fPatch); padrow++)
{
Int_t prow = padrow - AliL3Transform::GetFirstRow(fPatch);
AliL3Transform::Slice2Sector(fSlice,padrow,sector,row);
AliL3Transform::Raw2Local(xyz,sector,row,pad,time);
Double_t eta = AliL3Transform::GetEta(xyz);
- Int_t pixel_index = (Int_t)(eta/etaslice);
+ Int_t pixel_index = fHoughTransformer->GetEtaIndex(eta);//(Int_t)(eta/etaslice);
if(pixel_index != eta_index) continue;
hist->Fill(xyz[0],xyz[1],charge);
}
#include <stdlib.h>
#include <string.h>
+#include <TNtuple.h>
+#include <TFile.h>
+
#include "AliL3Histogram.h"
#include "AliL3TrackArray.h"
#include "AliL3HoughTrack.h"
fYPeaks=0;
fNPeaks=0;
fNMax=0;
+ fNtuppel = 0;
}
fXPeaks = new Float_t[fNMax];
fYPeaks = new Float_t[fNMax];
fWeight = new Int_t[fNMax];
+ fNtuppel = 0;
+ fThreshold=0;
}
delete [] fYPeaks;
if(fWeight)
delete [] fWeight;
+ if(fNtuppel)
+ delete fNtuppel;
}
void AliL3HoughMaxFinder::Reset()
fNPeaks=0;
}
+void AliL3HoughMaxFinder::CreateNtuppel()
+{
+ fNtuppel = new TNtuple("ntuppel","Peak charateristics","kappa:phi0:weigth:content3:content5:content1:content7");
+ //content#; neighbouring bins of the peak.
+
+}
+
+void AliL3HoughMaxFinder::WriteNtuppel(Char_t *filename)
+{
+ TFile *file = TFile::Open(filename,"RECREATE");
+ if(!file)
+ {
+ cerr<<"AliL3HoughMaxFinder::WriteNtuppel : Error opening file "<<filename<<endl;
+ return;
+ }
+ fNtuppel->Write();
+ file->Close();
+}
+
void AliL3HoughMaxFinder::FindAbsMaxima()
{
+
if(!fCurrentHisto)
{
- printf("AliL3HoughMaxFinder::FindAbsMaxima : No histogram!\n");
+ cerr<<"AliL3HoughMaxFinder::FindAbsMaxima : No histogram"<<endl;
return;
}
AliL3Histogram *hist = fCurrentHisto;
return;
}
+
Double_t max_x = hist->GetBinCenterX(max_xbin);
Double_t max_y = hist->GetBinCenterY(max_ybin);
fXPeaks[fNPeaks] = max_x;
fYPeaks[fNPeaks] = max_y;
fWeight[fNPeaks] = (Int_t)max_value;
fNPeaks++;
-
+
+ if(fNtuppel)
+ {
+ Int_t bin3 = hist->GetBin(max_xbin-1,max_ybin);
+ Int_t bin5 = hist->GetBin(max_xbin+1,max_ybin);
+ Int_t bin1 = hist->GetBin(max_xbin,max_ybin-1);
+ Int_t bin7 = hist->GetBin(max_xbin,max_ybin+1);
+
+ fNtuppel->Fill(max_x,max_y,max_value,hist->GetBinContent(bin3),hist->GetBinContent(bin5),hist->GetBinContent(bin1),hist->GetBinContent(bin7));
+ }
+
}
void AliL3HoughMaxFinder::FindBigMaxima()
}
-void AliL3HoughMaxFinder::FindMaxima()
+void AliL3HoughMaxFinder::FindMaxima(Double_t grad_x,Double_t grad_y)
{
//Locate all the maxima in input histogram.
//Maxima is defined as bins with more entries than the
Int_t bin[9];
Double_t value[9];
- Double_t grad_x = 3;
- Double_t grad_y = 3;
-
for(Int_t xbin=xmin+1; xbin<xmax-1; xbin++)
{
for(Int_t ybin=ymin+1; ybin<ymax-1; ybin++)
Float_t max_x = fCurrentHisto->GetBinCenterX(xbin);
Float_t max_y = fCurrentHisto->GetBinCenterY(ybin);
-
+ cout<<"Checking for threshols "<<value[4]<<" "<<fThreshold<<endl;
if((Int_t)value[4] <= fThreshold) continue;//central bin below threshold
if(fNPeaks > fNMax)
value[4]/value[1] < grad_y || value[4]/value[7] < grad_y)
continue;
-
fXPeaks[fNPeaks] = max_x;
fYPeaks[fNPeaks] = max_y;
fWeight[fNPeaks] = (Int_t)value[4];
class AliL3Histogram;
class AliL3TrackArray;
class AliL3HoughTrack;
+class TNtuple;
struct AxisWindow
{
Char_t fHistoType;
+ TNtuple *fNtuppel; //!
+
+
public:
AliL3HoughMaxFinder();
AliL3HoughMaxFinder(Char_t *histotype,Int_t nmax,AliL3Histogram *hist=0);
virtual ~AliL3HoughMaxFinder();
void Reset();
-
+ void CreateNtuppel();
+ void WriteNtuppel(Char_t *filename);
+
//Simple maxima finders:
void FindAbsMaxima();
void FindBigMaxima();
- void FindMaxima();
+ void FindMaxima(Double_t grad_x,Double_t grad_y);
//More sophisticated peak finders:
AliL3TrackArray *LookForPeaks(AliL3Histogram *hist,Int_t nbins);
fPsiLine = 0;
fIsHelix = true;
fEtaIndex = -1;
+ fEta = 0;
+
}