void AliL3HoughTrack::Set(AliL3Track *track)
{
-
+
AliL3HoughTrack *tpt = (AliL3HoughTrack*)track;
SetTrackParameters(tpt->GetKappa(),tpt->GetPhi0(),tpt->GetWeight());
SetEtaIndex(tpt->GetEtaIndex());
+ SetEta(tpt->GetEta());
+ SetPsi(tpt->GetPsi());
+ SetCenterX(tpt->GetCenterX());
+ SetCenterY(tpt->GetCenterY());
+ SetFirstPoint(tpt->GetFirstPointX(),tpt->GetFirstPointY(),tpt->GetFirstPointZ());
+ SetCharge(tpt->GetCharge());
return;
fWeight = tpt->GetWeight();
}
+Int_t AliL3HoughTrack::Compare(const AliL3Track *tpt) const
+{
+ AliL3HoughTrack *track = (AliL3HoughTrack*)tpt;
+ if(track->GetWeight() < GetWeight()) return 1;
+ if(track->GetWeight() > GetWeight()) return -1;
+ return 0;
+}
+
void AliL3HoughTrack::SetTrackParameters(Double_t kappa,Double_t phi,Int_t weight)
{
SetPt(pt);
Double_t radius = 1/fabs(kappa);
SetRadius(radius);
-
+ SetFirstPoint(0,0,0);
+ SetPsi(phi);
+
//set nhits for sorting.
SetNHits(weight);
Double_t fMinDist;
Int_t fWeight;
Int_t fEtaIndex;
+ Double_t fEta;
Double_t fDLine;
Double_t fPsiLine;
-
+
Bool_t fIsHelix;
public:
AliL3HoughTrack();
virtual ~AliL3HoughTrack();
- void Set(AliL3Track *track);
-
+ virtual void Set(AliL3Track *track);
+ virtual Int_t Compare(const AliL3Track *track) const;
+
void SetTrackParameters(Double_t kappa,Double_t phi,Int_t weight);
void SetLineParameters(Double_t psi,Double_t D,Int_t weight,Int_t *rowrange,Int_t ref_row);
- Int_t GetWeight() {return fWeight;}
- Double_t GetPsiLine() {return fPsiLine;}
- Double_t GetDLine() {return fDLine;}
+ Int_t GetWeight() const {return fWeight;}
+ Double_t GetPsiLine() const {return fPsiLine;}
+ Double_t GetDLine() const {return fDLine;}
- Int_t GetEtaIndex() {return fEtaIndex;}
+ Int_t GetEtaIndex() const {return fEtaIndex;}
+ Double_t GetEta() const {return fEta;}
void GetLineCrossingPoint(Int_t padrow,Double_t *xy);
- //Bool_t GetCrossingPoint(Int_t slice,Int_t padrow,Float_t *xyz);
-
- //Double_t GetCrossingAngle(Int_t padrow);
- //Bool_t GetCrossingPoint(Int_t padrow,Float_t *xyz);
+ void SetEta(Double_t f) {fEta = f;}
+ void SetWeight(Int_t i,Bool_t update=kFALSE) {if(update) fWeight+= i; else fWeight = i;}
void SetEtaIndex(Int_t f) {fEtaIndex = f;}
void SetBestMCid(Int_t f,Double_t min_dist);
void SetDLine(Double_t f) {fDLine=f;}
}
+Int_t AliL3Track::Compare(const AliL3Track *track) const
+{
+ if(track->GetNHits() < GetNHits()) return 1;
+ if(track->GetNHits() > GetNHits()) return -1;
+ return 0;
+}
AliL3Track::~AliL3Track()
{
-
+ //Nothing to do
}
Double_t AliL3Track::GetP() const
{
- // Returns total momentum.
-
+ // Returns total momentum.
return fabs(GetPt())*sqrt(1. + GetTgl()*GetTgl());
}
{
return 0.5 * log((GetP() + GetPz()) / (GetP() - GetPz()));
}
-
+/*
Double_t AliL3Track::GetEta() const
{
return GetPseudoRapidity();
}
-
+*/
Double_t AliL3Track::GetRapidity() const
{
Double_t m_pi = 0.13957;
return 0.5 * log((m_pi + GetPz()) / (m_pi - GetPz()));
}
-void AliL3Track::Rotate(Int_t slice)
+void AliL3Track::Rotate(Int_t slice,Bool_t tolocal)
{
-
//Rotate track to global parameters
+ //If flag tolocal is set, the track is rotated
+ //to local coordinates.
AliL3Transform *transform = new AliL3Transform();
Float_t psi[1] = {GetPsi()};
- transform->Local2GlobalAngle(psi,slice);
+ if(!tolocal)
+ transform->Local2GlobalAngle(psi,slice);
+ else
+ transform->Global2LocalAngle(psi,slice);
SetPsi(psi[0]);
Float_t first[3];
first[0] = GetFirstPointX();
first[1] = GetFirstPointY();
first[2] = GetFirstPointZ();
- transform->Local2Global(first,slice);
+ if(!tolocal)
+ transform->Local2Global(first,slice);
+ else
+ transform->Global2Local(first,slice,kTRUE);
+
SetFirstPoint(first[0],first[1],first[2]);
Float_t last[3];
last[0] = GetLastPointX();
last[1] = GetLastPointY();
last[2] = GetLastPointZ();
- transform->Local2Global(last,slice);
+ if(!tolocal)
+ transform->Local2Global(last,slice);
+ else
+ transform->Global2Local(last,slice,kTRUE);
SetLastPoint(last[0],last[1],last[2]);
-
- fIsLocal=false;
+
+ if(!tolocal)
+ fIsLocal=kFALSE;
+ else
+ fIsLocal=kTRUE;
delete transform;
}
virtual ~AliL3Track();
virtual void Set(AliL3Track* track);
+ virtual Int_t Compare(const AliL3Track *track) const;
Bool_t CalculateReferencePoint(Double_t angle);//Calculate Reference Point
Bool_t CalculateEdgePoint(Double_t angle);//Calculate crossing point with line
Bool_t GetCrossingPoint(Int_t padrow,Float_t *xyz);
Double_t GetDistance(Double_t x0,Double_t x1){return 0;}
- void Rotate(Int_t slice);
+ void Rotate(Int_t slice,Bool_t tolocal=kFALSE);
Bool_t IsLocal() {return fIsLocal;}
// getter
Double_t GetCenterX() const { return fCenterX;}
Double_t GetCenterY() const { return fCenterY;}
- Int_t GetNHits() {return fNHits;}
+ Int_t GetNHits() const {return fNHits;}
Int_t GetNumberOfPoints() const {return fNHits;}
Bool_t ComesFromMainVertex() const { return fFromMainVertex;}
Double_t GetP() const;
Double_t GetPseudoRapidity() const;
- Double_t GetEta() const;
+ //Double_t GetEta() const;
Double_t GetRapidity() const;
Int_t GetCharge() const { return fQ;}
UInt_t *GetHitNumbers() {return fHitNumbers;}
// setter
+
void SetMCid(Int_t f) {fMCid = f;}
void SetFirstPoint(Double_t f,Double_t g,Double_t h) {fFirstPoint[0]=f; fFirstPoint[1]=g; fFirstPoint[2]=h;}
void SetLastPoint(Double_t f,Double_t g,Double_t h) {fLastPoint[0]=f; fLastPoint[1]=g; fLastPoint[2]=h;}
newtrack->Remove(i);
AliL3Track *track = NextTrack();
track->Set(tpt);
-
+ /*
+ AliL3Track *track;
+ if(GetTrackType()=='h')
+ track = (AliL3HoughTrack*)NextTrack();
+ else
+ track = NextTrack();
+ track->Set(tpt);
+ */
}
}
QSort(fTrack,0,fNTracks);
}
- void AliL3TrackArray::QSort( AliL3Track **a, Int_t first, Int_t last){
+void AliL3TrackArray::QSort( AliL3Track **a, Int_t first, Int_t last){
// Sort array of AliL3Track pointers using a quicksort algorithm.
// Uses TrackCompare() to compare objects.
i = first;
j = last;
for (;;) {
- while (++i < last && TrackCompare(a[i], a[first]) < 0)
- ;
- while (--j > first && TrackCompare(a[j], a[first]) > 0)
- ;
+ while (++i < last && TrackCompare(a[i], a[first]) < 0)
+ ;
+ while (--j > first && TrackCompare(a[j], a[first]) > 0)
+ ;
if (i >= j)
break;
Int_t AliL3TrackArray::TrackCompare(AliL3Track *a, AliL3Track *b){
// Compare the two tracks.
-
- if(a->GetNHits() < b->GetNHits()) return 1;
- if(a->GetNHits() > b->GetNHits()) return -1;
- return 0;
+
+ return b->Compare(a);
+
+ /*
+ if(fTrackType=='h')
+ {
+ AliL3HoughTrack *tra = (AliL3HoughTrack*)a;
+ AliL3HoughTrack *trb = (AliL3HoughTrack*)b;
+ if(tra->GetWeight() < trb->GetWeight()) return 1;
+ if(tra->GetWeight() > trb->GetWeight()) return -1;
+ }
+ else
+ {
+ if(a->GetNHits() < b->GetNHits()) return 1;
+ if(a->GetNHits() > b->GetNHits()) return -1;
+ }
+
+ return 0;
+ */
}