// Author: Anders Vestbo <mailto:vestbo@fi.uib.no>
//*-- Copyright © ALICE HLT Group
+/** \class AliL3HoughTransformer
+<pre>
+//_____________________________________________________________
+// AliL3HoughTransformer
+//
+// Hough transformation class
+//
+</pre>
+*/
+
#include "AliL3StandardIncludes.h"
#include "AliL3Logging.h"
#include "AliL3DigitData.h"
#include "AliL3HistogramAdaptive.h"
-#if __GNUC__ == 3
+#if __GNUC__ >= 3
using namespace std;
#endif
-/** \class AliL3HoughTransformer
-<pre>
-//_____________________________________________________________
-// AliL3HoughTransformer
-//
-// Hough transformation class
-//
-</pre>
-*/
-
ClassImp(AliL3HoughTransformer)
AliL3HoughTransformer::AliL3HoughTransformer()
#endif
}
-AliL3HoughTransformer::AliL3HoughTransformer(Int_t slice,Int_t patch,Int_t n_eta_segments,Bool_t DoEtaOverlap,Bool_t /*DoMC*/) : AliL3HoughBaseTransformer(slice,patch,n_eta_segments)
+AliL3HoughTransformer::AliL3HoughTransformer(Int_t slice,Int_t patch,Int_t netasegments,Bool_t DoEtaOverlap,Bool_t /*DoMC*/) : AliL3HoughBaseTransformer(slice,patch,netasegments)
{
//Normal constructor
fParamSpace = 0;
AliL3HoughTransformer::~AliL3HoughTransformer()
{
+ // Dtor
DeleteHistograms();
#ifdef do_mc
if(fTrackID)
void AliL3HoughTransformer::DeleteHistograms()
{
+ // Clean up
if(!fParamSpace)
return;
for(Int_t i=0; i<GetNEtaSegments(); i++)
delete fParamSpace[i];
}
delete [] fParamSpace;
+ fParamSpace = 0;
}
void AliL3HoughTransformer::CreateHistograms(Float_t ptmin,Float_t ptmax,Float_t ptres,
}
}
-void AliL3HoughTransformer::CreateHistograms(Int_t nxbin,Float_t pt_min,
+void AliL3HoughTransformer::CreateHistograms(Int_t nxbin,Float_t ptmin,
Int_t nybin,Float_t phimin,Float_t phimax)
{
//Create the histograms (parameter space).
//The arguments give the range and binning;
//nxbin = #bins in kappa
//nybin = #bins in phi0
- //pt_min = mimium Pt of track (corresponding to maximum kappa)
- //phi_min = mimimum phi0
- //phi_max = maximum phi0
+ //ptmin = mimium Pt of track (corresponding to maximum kappa)
+ //phimin = mimimum phi0
+ //phimax = maximum phi0
- Double_t x = AliL3Transform::GetBFact()*AliL3Transform::GetBField()/pt_min;
+ Double_t x = AliL3Transform::GetBFact()*AliL3Transform::GetBField()/ptmin;
//Double_t torad = AliL3Transform::Pi()/180;
CreateHistograms(nxbin,-1.*x,x,nybin,phimin/**torad*/,phimax/**torad*/);
void AliL3HoughTransformer::CreateHistograms(Int_t nxbin,Float_t xmin,Float_t xmax,
Int_t nybin,Float_t ymin,Float_t ymax)
{
+ //Create the histograms (parameter space).
+ //nxbin = #bins in X
+ //nybin = #bins in Y
+ //xmin xmax ymin ymax = histogram limits in X and Y
fParamSpace = new AliL3Histogram*[GetNEtaSegments()];
{
AliL3Histogram *hist = fParamSpace[0];
Int_t ncells = (hist->GetNbinsX()+2)*(hist->GetNbinsY()+2);
- cout<<"Transformer: Allocating "<<GetNEtaSegments()*ncells*sizeof(TrackIndex)<<" bytes to fTrackID"<<endl;
- fTrackID = new TrackIndex*[GetNEtaSegments()];
+ cout<<"Transformer: Allocating "<<GetNEtaSegments()*ncells*sizeof(AliL3TrackIndex)<<" bytes to fTrackID"<<endl;
+ fTrackID = new AliL3TrackIndex*[GetNEtaSegments()];
for(Int_t i=0; i<GetNEtaSegments(); i++)
- fTrackID[i] = new TrackIndex[ncells];
+ fTrackID[i] = new AliL3TrackIndex[ncells];
}
#endif
}
AliL3Histogram *hist = fParamSpace[0];
Int_t ncells = (hist->GetNbinsX()+2)*(hist->GetNbinsY()+2);
for(Int_t i=0; i<GetNEtaSegments(); i++)
- memset(fTrackID[i],0,ncells*sizeof(TrackIndex));
+ memset(fTrackID[i],0,ncells*sizeof(AliL3TrackIndex));
}
#endif
}
-Int_t AliL3HoughTransformer::GetEtaIndex(Double_t eta)
+Int_t AliL3HoughTransformer::GetEtaIndex(Double_t eta) const
{
//Return the histogram index of the corresponding eta.
return (Int_t)index;
}
-void AliL3HoughTransformer::GetEtaIndexes(Double_t eta,Int_t *indexes)
+void AliL3HoughTransformer::GetEtaIndexes(Double_t eta,Int_t *indexes) const
{
//Return histogram indexes in case of overlapping etaslices.
}
}
-inline AliL3Histogram *AliL3HoughTransformer::GetHistogram(Int_t eta_index)
+AliL3Histogram *AliL3HoughTransformer::GetHistogram(Int_t etaindex)
{
- if(!fParamSpace || eta_index >= GetNEtaSegments() || eta_index < 0)
+ // Return a pointer to the histogram which contains etaindex eta slice
+ if(!fParamSpace || etaindex >= GetNEtaSegments() || etaindex < 0)
return 0;
- if(!fParamSpace[eta_index])
+ if(!fParamSpace[etaindex])
return 0;
- return fParamSpace[eta_index];
+ return fParamSpace[etaindex];
}
-Double_t AliL3HoughTransformer::GetEta(Int_t eta_index,Int_t /*slice*/)
+Double_t AliL3HoughTransformer::GetEta(Int_t etaindex,Int_t /*slice*/) const
{
- Double_t eta_slice = (GetEtaMax()-GetEtaMin())/GetNEtaSegments();
+ // Return eta calculated in the middle of the eta slice
+ Double_t etaslice = (GetEtaMax()-GetEtaMin())/GetNEtaSegments();
Double_t eta=0;
if(fEtaOverlap)
{
- Int_t index = eta_index + 1;
- eta=(Double_t)((index)*eta_slice);
+ Int_t index = etaindex + 1;
+ eta=(Double_t)((index)*etaslice);
}
else
- eta=(Double_t)((eta_index+0.5)*eta_slice);
+ eta=(Double_t)((etaindex+0.5)*etaslice);
return eta;
}
//Transform the input data with a circle HT.
//The function loops over all the data, and transforms each pixel with the equations:
//
- //kappa = 2/R*sin(phi - phi0)
+ //kappa = 2/r*sin(phi - phi0)
//
- //where R = sqrt(x*x +y*y), and phi = arctan(y/x)
+ //where r = sqrt(x*x +y*y), and phi = arctan(y/x)
//
//Each pixel then transforms into a curve in the (kappa,phi0)-space. In order to find
//which histogram in which the pixel should be transformed, the eta-value is calculated
Double_t eta = AliL3Transform::GetEta(xyz);
//Get the corresponding index, which determines which histogram to fill:
- Int_t eta_index = GetEtaIndex(eta);
+ Int_t etaindex = GetEtaIndex(eta);
- if(eta_index < 0 || eta_index >= GetNEtaSegments())
+ if(etaindex < 0 || etaindex >= GetNEtaSegments())
continue;
//Get the correct histogrampointer:
- AliL3Histogram *hist = fParamSpace[eta_index];
+ AliL3Histogram *hist = fParamSpace[etaindex];
if(!hist)
{
- cerr<<"AliL3HoughTransformer::TransformCircle : Error getting histogram in index "<<eta_index<<endl;
+ cerr<<"AliL3HoughTransformer::TransformCircle : Error getting histogram in index "<<etaindex<<endl;
continue;
}
//Do the transformation:
- Float_t R = sqrt(xyz[0]*xyz[0] + xyz[1]*xyz[1]);
+ Float_t r = sqrt(xyz[0]*xyz[0] + xyz[1]*xyz[1]);
Float_t phi = AliL3Transform::GetPhi(xyz);
for(Int_t b=hist->GetFirstYbin(); b<=hist->GetLastYbin(); b++)
{
Float_t phi0 = hist->GetBinCenterY(b);
- Float_t kappa = 2*sin(phi - phi0)/R;
+ Float_t kappa = 2*sin(phi - phi0)/r;
//hist->Fill(kappa,phi0,(int)rint(log((Float_t)charge)));
hist->Fill(kappa,phi0,charge);
//hist->Fill(kappa,phi0,1);
if(label < 0) break;
UInt_t c;
for(c=0; c<MaxTrack; c++)
- if(fTrackID[eta_index][bin].fLabel[c] == label || fTrackID[eta_index][bin].fNHits[c] == 0)
+ if(fTrackID[etaindex][bin].fLabel[c] == label || fTrackID[etaindex][bin].fNHits[c] == 0)
break;
if(c == MaxTrack-1) cerr<<"AliL3HoughTransformer::TransformCircle : Array reached maximum!! "<<c<<endl;
- fTrackID[eta_index][bin].fLabel[c] = label;
- fTrackID[eta_index][bin].fNHits[c]++;
+ fTrackID[etaindex][bin].fLabel[c] = label;
+ fTrackID[etaindex][bin].fNHits[c]++;
}
}
#endif
}
}
-struct Digit {
- Int_t row;
- Double_t r;
- Double_t phi;
- Int_t charge;
- Digit *next;
+struct AliL3Digit {
+ Int_t fRow; // Digit padrow
+ Double_t fR; // Digit radius in local coordinate system
+ Double_t fPhi; // Digit Phi angle in local coordinate system
+ Int_t fCharge; // Digit charge
+ AliL3Digit *fNext; // Next digit
};
-struct EtaContainer {
- Digit *first;
- Digit *last;
+struct AliL3EtaContainer {
+ AliL3Digit *fFirst; //First digit
+ AliL3Digit *fLast; //Last digit
};
-void AliL3HoughTransformer::TransformCircleC(Int_t *row_range,Int_t every)
+void AliL3HoughTransformer::TransformCircleC(Int_t *rowrange,Int_t every)
{
//Circle transform, using combinations of every 2 points lying
//on different padrows and within the same etaslice.
Int_t minrow = AliL3Transform::GetFirstRow(GetPatch());
Int_t maxrow = AliL3Transform::GetLastRow(GetPatch());
- if(row_range)
+ if(rowrange)
{
- minrow = row_range[0];
- maxrow = row_range[1];
+ minrow = rowrange[0];
+ maxrow = rowrange[1];
if(minrow < AliL3Transform::GetFirstRow(GetPatch()) || minrow >= AliL3Transform::GetLastRow(GetPatch()))
minrow = AliL3Transform::GetFirstRow(GetPatch());
if(maxrow < AliL3Transform::GetFirstRow(GetPatch()) || maxrow >= AliL3Transform::GetLastRow(GetPatch()))
}
Int_t bound = (GetNEtaSegments()+1)*(AliL3Transform::GetNRows(GetPatch())+1);
- EtaContainer *etaPt = new EtaContainer[bound];
- memset(etaPt,0,bound*sizeof(EtaContainer));
+ AliL3EtaContainer *etaPt = new AliL3EtaContainer[bound];
+ memset(etaPt,0,bound*sizeof(AliL3EtaContainer));
- Digit *digits = new Digit[counter];
- cout<<"Allocating "<<counter*sizeof(Digit)<<" bytes to digitsarray"<<endl;
- memset(digits,0,counter*sizeof(Digit));
+ AliL3Digit *digits = new AliL3Digit[counter];
+ cout<<"Allocating "<<counter*sizeof(AliL3Digit)<<" bytes to digitsarray"<<endl;
+ memset(digits,0,counter*sizeof(AliL3Digit));
- Int_t sector,row,tot_charge,pad,time,charge;
- Double_t r1,r2,phi1,phi2,eta,kappa,phi_0;
+ Int_t sector,row,totcharge,pad,time,charge;
+ Double_t r1,r2,phi1,phi2,eta,kappa,phi0;
Float_t xyz[3];
counter=0;
AliL3Transform::Raw2Local(xyz,sector,row,(Int_t)pad,(Int_t)time);
eta = AliL3Transform::GetEta(xyz);
- digits[counter].row = i;
- digits[counter].r = sqrt(xyz[0]*xyz[0] + xyz[1]*xyz[1]);
- digits[counter].phi = atan2(xyz[1],xyz[0]);
- digits[counter].charge = charge;
+ digits[counter].fRow = i;
+ digits[counter].fR = sqrt(xyz[0]*xyz[0] + xyz[1]*xyz[1]);
+ digits[counter].fPhi = atan2(xyz[1],xyz[0]);
+ digits[counter].fCharge = charge;
if(!fEtaOverlap)
{
- Int_t eta_index = GetEtaIndex(eta);
+ Int_t etaindex = GetEtaIndex(eta);
- Int_t index = (GetNEtaSegments()+1)*(i-AliL3Transform::GetFirstRow(GetPatch())) + eta_index;
+ Int_t index = (GetNEtaSegments()+1)*(i-AliL3Transform::GetFirstRow(GetPatch())) + etaindex;
if(index > 0 && index < bound)
{
- if(etaPt[index].first == 0)
- etaPt[index].first = &digits[counter];
+ if(etaPt[index].fFirst == 0)
+ etaPt[index].fFirst = &digits[counter];
else
- (etaPt[index].last)->next = &digits[counter];
- etaPt[index].last = &digits[counter];
+ (etaPt[index].fLast)->fNext = &digits[counter];
+ etaPt[index].fLast = &digits[counter];
}
}
else
{
- Int_t eta_index[2];
- GetEtaIndexes(eta,eta_index);
+ Int_t etaindex[2];
+ GetEtaIndexes(eta,etaindex);
Int_t index[2];
- index[0] = (GetNEtaSegments()+1)*(i-AliL3Transform::GetFirstRow(GetPatch())) + eta_index[0];
- index[1] = (GetNEtaSegments()+1)*(i-AliL3Transform::GetFirstRow(GetPatch())) + eta_index[1];
+ index[0] = (GetNEtaSegments()+1)*(i-AliL3Transform::GetFirstRow(GetPatch())) + etaindex[0];
+ index[1] = (GetNEtaSegments()+1)*(i-AliL3Transform::GetFirstRow(GetPatch())) + etaindex[1];
if(index[0] == index[1])
{
cerr<<"Same etaindexes "<<index[0]<<" "<<index[1]<<endl;
Int_t ind = index[0];
if(ind > 0 && ind < bound)
{
- if(etaPt[ind].first == 0)
- etaPt[ind].first = &digits[counter];
+ if(etaPt[ind].fFirst == 0)
+ etaPt[ind].fFirst = &digits[counter];
else
- (etaPt[ind].last)->next = &digits[counter];
- etaPt[ind].last = &digits[counter];
+ (etaPt[ind].fLast)->fNext = &digits[counter];
+ etaPt[ind].fLast = &digits[counter];
}
ind = index[1];
if(ind > 0 && ind < bound)
{
- if(etaPt[ind].first == 0)
- etaPt[ind].first = &digits[counter];
+ if(etaPt[ind].fFirst == 0)
+ etaPt[ind].fFirst = &digits[counter];
else
- (etaPt[ind].last)->next = &digits[counter];
- etaPt[ind].last = &digits[counter];
+ (etaPt[ind].fLast)->fNext = &digits[counter];
+ etaPt[ind].fLast = &digits[counter];
}
}
cout<<"Doing the combinatorics"<<endl;
- Digit *dPt1,*dPt2;
+ AliL3Digit *dPt1,*dPt2;
for(Int_t e=0; e<GetNEtaSegments(); e++)
{
{
Int_t index1 = (GetNEtaSegments()+1)*(i-AliL3Transform::GetFirstRow(GetPatch())) + e;
- for(dPt1 = (Digit*)etaPt[index1].first; dPt1 != 0; dPt1 = (Digit*)dPt1->next)
+ for(dPt1 = (AliL3Digit*)etaPt[index1].fFirst; dPt1 != 0; dPt1 = (AliL3Digit*)dPt1->fNext)
{
for(Int_t j=i+every; j<=maxrow; j+=every)
{
Int_t index2 = (GetNEtaSegments()+1)*(j-AliL3Transform::GetFirstRow(GetPatch())) + e;
- for(dPt2 = (Digit*)etaPt[index2].first; dPt2 != 0; dPt2 = (Digit*)dPt2->next)
+ for(dPt2 = (AliL3Digit*)etaPt[index2].fFirst; dPt2 != 0; dPt2 = (AliL3Digit*)dPt2->fNext)
{
- if(dPt1->row == dPt2->row)
+ if(dPt1->fRow == dPt2->fRow)
{
cerr<<"same row; indexes "<<index1<<" "<<index2<<endl;
exit(5);
}
//Do the transform:
- r1 = dPt1->r;
- phi1 = dPt1->phi;
- r2 = dPt2->r;
- phi2 = dPt2->phi;
- phi_0 = atan( (r2*sin(phi1)-r1*sin(phi2))/(r2*cos(phi1)-r1*cos(phi2)) );
- kappa = 2*sin(phi2-phi_0)/r2;
- tot_charge = dPt1->charge + dPt2->charge;
- hist->Fill(kappa,phi_0,tot_charge);
+ r1 = dPt1->fR;
+ phi1 = dPt1->fPhi;
+ r2 = dPt2->fR;
+ phi2 = dPt2->fPhi;
+ phi0 = atan( (r2*sin(phi1)-r1*sin(phi2))/(r2*cos(phi1)-r1*cos(phi2)) );
+ kappa = 2*sin(phi2-phi0)/r2;
+ totcharge = dPt1->fCharge + dPt2->fCharge;
+ hist->Fill(kappa,phi0,totcharge);
}
}
}
-void AliL3HoughTransformer::TransformLine(Int_t *row_range,Float_t *phirange)
+void AliL3HoughTransformer::TransformLine(Int_t *rowrange,Float_t *phirange)
{
//Do a line transform on the data.
Int_t minrow = AliL3Transform::GetFirstRow(GetPatch());
Int_t maxrow = AliL3Transform::GetLastRow(GetPatch());
- if(row_range)
+ if(rowrange)
{
- minrow = row_range[0];
- maxrow = row_range[1];
+ minrow = rowrange[0];
+ maxrow = rowrange[1];
if(minrow < AliL3Transform::GetFirstRow(GetPatch()) || minrow >= AliL3Transform::GetLastRow(GetPatch()))
minrow = AliL3Transform::GetFirstRow(GetPatch());
if(maxrow < AliL3Transform::GetFirstRow(GetPatch()) || maxrow >= AliL3Transform::GetLastRow(GetPatch()))
continue;
}
Float_t eta = AliL3Transform::GetEta(xyz);
- Int_t eta_index = GetEtaIndex(eta);//(Int_t)(eta/etaslice);
- if(eta_index < 0 || eta_index >= GetNEtaSegments())
+ Int_t etaindex = GetEtaIndex(eta);//(Int_t)(eta/etaslice);
+ if(etaindex < 0 || etaindex >= GetNEtaSegments())
continue;
xyz[0] = xyz[0] - AliL3Transform::Row2X(minrow);
//Get the correct histogram:
- AliL3Histogram *hist = fParamSpace[eta_index];
+ AliL3Histogram *hist = fParamSpace[etaindex];
if(!hist)
{
- printf("AliL3HoughTransformer::TransformLine : Error getting histogram in index %d\n",eta_index);
+ printf("AliL3HoughTransformer::TransformLine : Error getting histogram in index %d\n",etaindex);
continue;
}
for(Int_t xbin=hist->GetFirstXbin(); xbin<hist->GetLastXbin(); xbin++)
}
-struct LDigit {
- Int_t row;
- Int_t charge;
- Float_t y;
- LDigit *next;
+struct AliL3LDigit {
+ Int_t fRow; // Digit rowpad
+ Int_t fCharge; // Digit charge
+ Float_t fY; // Y position of the digit in the local coor system
+ AliL3LDigit *fNext; // Next digit
};
-struct LEtaContainer {
- LDigit *first;
- LDigit *last;
+struct AliL3LEtaContainer {
+ AliL3LDigit *fFirst; //First digit
+ AliL3LDigit *fLast; //Last digit
};
void AliL3HoughTransformer::TransformLineC(Int_t *rowrange,Float_t *phirange)
{
+ //Circle transform ??
AliL3DigitRowData *tempPt = GetDataPointer();
if(!tempPt)
LOG(AliL3Log::kError,"AliL3HoughTransformer::TransformCircleC","Data")
}
Int_t bound = (GetNEtaSegments()+1)*(AliL3Transform::GetNRows(GetPatch())+1);
- LEtaContainer *etaPt = new LEtaContainer[bound];
- memset(etaPt,0,bound*sizeof(LEtaContainer));
+ AliL3LEtaContainer *etaPt = new AliL3LEtaContainer[bound];
+ memset(etaPt,0,bound*sizeof(AliL3LEtaContainer));
- LDigit *digits = new LDigit[counter];
- cout<<"Allocating "<<counter*sizeof(LDigit)<<" bytes to digitsarray"<<endl;
- memset(digits,0,counter*sizeof(LDigit));
+ AliL3LDigit *digits = new AliL3LDigit[counter];
+ cout<<"Allocating "<<counter*sizeof(AliL3LDigit)<<" bytes to digitsarray"<<endl;
+ memset(digits,0,counter*sizeof(AliL3LDigit));
Int_t sector,row;
Float_t xyz[3];
Float_t phi = atan2(xyz[1],xyz[0]);
if(phi < phirange[0] || phi > phirange[1]) continue;
- digits[counter].row = i;
- digits[counter].y = xyz[1];
- digits[counter].charge = charge;
+ digits[counter].fRow = i;
+ digits[counter].fY = xyz[1];
+ digits[counter].fCharge = charge;
- Int_t eta_index = GetEtaIndex(eta);
- Int_t index = (GetNEtaSegments()+1)*(i-AliL3Transform::GetFirstRow(GetPatch())) + eta_index;
+ Int_t etaindex = GetEtaIndex(eta);
+ Int_t index = (GetNEtaSegments()+1)*(i-AliL3Transform::GetFirstRow(GetPatch())) + etaindex;
if(index > 0 && index < bound)
{
- if(etaPt[index].first == 0)
- etaPt[index].first = &digits[counter];
+ if(etaPt[index].fFirst == 0)
+ etaPt[index].fFirst = &digits[counter];
else
- (etaPt[index].last)->next = &digits[counter];
- etaPt[index].last = &digits[counter];
+ (etaPt[index].fLast)->fNext = &digits[counter];
+ etaPt[index].fLast = &digits[counter];
}
counter++;
}
cout<<"Doing the combinatorics"<<endl;
- LDigit *dPt1,*dPt2;
+ AliL3LDigit *dPt1,*dPt2;
for(Int_t e=0; e<GetNEtaSegments(); e++)
{
{
Int_t index1 = (GetNEtaSegments()+1)*(i-AliL3Transform::GetFirstRow(GetPatch())) + e;
- for(dPt1 = (LDigit*)etaPt[index1].first; dPt1 != 0; dPt1 = (LDigit*)dPt1->next)
+ for(dPt1 = (AliL3LDigit*)etaPt[index1].fFirst; dPt1 != 0; dPt1 = (AliL3LDigit*)dPt1->fNext)
{
for(Int_t j=i+1; j<=rowrange[1]; j++)
{
Int_t index2 = (GetNEtaSegments()+1)*(j-AliL3Transform::GetFirstRow(GetPatch())) + e;
- for(dPt2 = (LDigit*)etaPt[index2].first; dPt2 != 0; dPt2 = (LDigit*)dPt2->next)
+ for(dPt2 = (AliL3LDigit*)etaPt[index2].fFirst; dPt2 != 0; dPt2 = (AliL3LDigit*)dPt2->fNext)
{
- if(dPt1->row == dPt2->row)
+ if(dPt1->fRow == dPt2->fRow)
{
cerr<<"same row; indexes "<<index1<<" "<<index2<<endl;
exit(5);
}
//Do the transform:
- float x1 = AliL3Transform::Row2X(dPt1->row) - AliL3Transform::Row2X(rowrange[0]);
- float x2 = AliL3Transform::Row2X(dPt2->row) - AliL3Transform::Row2X(rowrange[0]);
- float y1 = dPt1->y;
- float y2 = dPt2->y;
+ float x1 = AliL3Transform::Row2X(dPt1->fRow) - AliL3Transform::Row2X(rowrange[0]);
+ float x2 = AliL3Transform::Row2X(dPt2->fRow) - AliL3Transform::Row2X(rowrange[0]);
+ float y1 = dPt1->fY;
+ float y2 = dPt2->fY;
float theta = atan2(x2-x1,y1-y2);
float rho = x1*cos(theta)+y1*sin(theta);
hist->Fill(theta,rho,1);//dPt1->charge+dPt2->charge);
delete [] digits;
}
-Int_t AliL3HoughTransformer::GetTrackID(Int_t eta_index,Double_t kappa,Double_t psi)
+#ifdef do_mc
+Int_t AliL3HoughTransformer::GetTrackID(Int_t etaindex,Double_t kappa,Double_t psi) const
{
+ // Returns the MC label for a given peak found in the Hough space
if(!fDoMC)
{
cerr<<"AliL3HoughTransformer::GetTrackID : Flag switched off"<<endl;
return -1;
}
-#ifdef do_mc
- if(eta_index < 0 || eta_index > GetNEtaSegments())
+ if(etaindex < 0 || etaindex > GetNEtaSegments())
{
- cerr<<"AliL3HoughTransformer::GetTrackID : Wrong etaindex "<<eta_index<<endl;
+ cerr<<"AliL3HoughTransformer::GetTrackID : Wrong etaindex "<<etaindex<<endl;
return -1;
}
- AliL3Histogram *hist = fParamSpace[eta_index];
+ AliL3Histogram *hist = fParamSpace[etaindex];
Int_t bin = hist->FindBin(kappa,psi);
Int_t label=-1;
Int_t max=0;
for(UInt_t i=0; i<MaxTrack; i++)
{
- Int_t nhits=fTrackID[eta_index][bin].fNHits[i];
+ Int_t nhits=fTrackID[etaindex][bin].fNHits[i];
if(nhits == 0) break;
if(nhits > max)
{
max = nhits;
- label = fTrackID[eta_index][bin].fLabel[i];
+ label = fTrackID[etaindex][bin].fLabel[i];
}
}
//nhits = max;
return label;
-#endif
+#else
+ Int_t AliL3HoughTransformer::GetTrackID(Int_t /*etaindex*/,Double_t /*kappa*/,Double_t /*psi*/) const
+{
+ // Returns the MC label for a given peak found in the Hough space
+ if(!fDoMC)
+ {
+ cerr<<"AliL3HoughTransformer::GetTrackID : Flag switched off"<<endl;
+ return -1;
+ }
+
cout<<"AliL3HoughTransformer::GetTrackID : Compile with do_mc flag!"<<endl;
return -1;
+#endif
}