#include "AliTPCParam.h"
#include "AliClusters.h"
-extern Double_t SigmaY2(Double_t, Double_t, Double_t);
-extern Double_t SigmaZ2(Double_t, Double_t);
-
ClassImp(AliTPCtracker)
+//_____________________________________________________________________________
+AliTPCtracker::AliTPCtracker():
+ AliTracker(),
+ fkNIS(0),
+ fInnerSec(0),
+ fkNOS(0),
+ fOuterSec(0),
+ fN(0),
+ fSectors(0),
+ fParam(0),
+ fSeeds(0)
+{
+ //
+ // The default TPC tracker constructor
+ //
+}
+
//_____________________________________________________________________________
AliTPCtracker::AliTPCtracker(const AliTPCParam *par):
-AliTracker(), fkNIS(par->GetNInnerSector()/2), fkNOS(par->GetNOuterSector()/2)
+ AliTracker(),
+ fkNIS(par->GetNInnerSector()/2),
+ fInnerSec(new AliTPCSector[fkNIS]),
+ fkNOS(par->GetNOuterSector()/2),
+ fOuterSec(new AliTPCSector[fkNOS]),
+ fN(0),
+ fSectors(0),
+ fParam((AliTPCParam*) par),
+ fSeeds(0)
{
//---------------------------------------------------------------------
// The main TPC tracker constructor
//---------------------------------------------------------------------
- fInnerSec=new AliTPCSector[fkNIS];
- fOuterSec=new AliTPCSector[fkNOS];
Int_t i;
for (i=0; i<fkNIS; i++) fInnerSec[i].Setup(par,0);
for (i=0; i<fkNOS; i++) fOuterSec[i].Setup(par,1);
- fParam = (AliTPCParam*) par;
- fSeeds=0;
-
- // [SR 17.03.2003]
-
- fBarrelFile = 0;
- fBarrelTree = 0;
- fBarrelArray = 0;
- fBarrelTrack = 0;
-
}
//_____________________________________________________________________________
fSeeds->Delete();
delete fSeeds;
}
-
- // [SR, 01.04.2003]
- if (fBarrelFile) {
- fBarrelFile->Close();
- delete fBarrelFile;
- }
-}
-
-//_____________________________________________________________________________
-
-void AliTPCtracker::SetBarrelTree(const char *mode) {
- //
- // Creates a tree for BarrelTracks
- // mode = "back" or "refit"
- //
- // [SR, 01.04.2003]
- //
-
- if (!IsStoringBarrel()) return;
-
- TDirectory *sav = gDirectory;
- if (!fBarrelFile) fBarrelFile = new TFile("AliBarrelTracks.root", "UPDATE");
-
- char buff[40];
- sprintf(buff, "BarrelTPC_%d_%s", GetEventNumber(), mode);
-
- fBarrelFile->cd();
- fBarrelTree = new TTree(buff, "Barrel TPC tracks");
-
- if (!fBarrelArray) fBarrelArray = new TClonesArray("AliBarrelTrack", 4);
- for(Int_t i=0; i<4; i++) new((*fBarrelArray)[i]) AliBarrelTrack();
-
- fBarrelTree->Branch("tracks", &fBarrelArray);
-
- sav->cd();
-}
-//_____________________________________________________________________________
-
-void AliTPCtracker::StoreBarrelTrack(AliTPCtrack *ps, Int_t refPlane, Int_t isIn) {
- //
- // Stores Track at a given reference plane
- //
- // refPlane: 1-4
- // isIn: 1 - backward, 2 - refit
- //
-
- if (!IsStoringBarrel()) return;
- if (refPlane < 0 || refPlane > 4) return;
- if (isIn > 2) return;
-
- static Int_t nClusters;
- static Int_t nWrong;
- static Double_t chi2;
- static Int_t index;
-
- Int_t newClusters, newWrong;
- Double_t newChi2;
-
- if ( (refPlane == 1 && isIn == kTrackBack) ||
- (refPlane == 4 && isIn == kTrackRefit) ) {
-
- fBarrelArray->Clear();
- nClusters = nWrong = 0;
- chi2 = 0.0;
- index = 0;
- }
-
- // propagate
- Double_t refX = 0;
- if (refPlane == 1) refX = fParam->GetInnerRadiusLow();
- if (refPlane == 2) refX = fParam->GetInnerRadiusUp();
- if (refPlane == 3) refX = fParam->GetOuterRadiusLow();
- if (refPlane == 4) refX = fParam->GetOuterRadiusUp();
-
- ps->PropagateTo(refX);
-
- fBarrelTrack = (AliBarrelTrack*)(*fBarrelArray)[index++];
- ps->GetBarrelTrack(fBarrelTrack);
-
- newClusters = ps->GetNumberOfClusters() - nClusters;
- newWrong = ps->GetNWrong() - nWrong;
- newChi2 = ps->GetChi2() - chi2;
-
- nClusters = ps->GetNumberOfClusters();
- nWrong = ps->GetNWrong();
- chi2 = ps->GetChi2();
-
- fBarrelTrack->SetNClusters(newClusters, newChi2);
- fBarrelTrack->SetNWrongClusters(newWrong);
- fBarrelTrack->SetRefPlane(refPlane, isIn);
}
-
//_____________________________________________________________________________
Double_t f1(Double_t x1,Double_t y1,
Double_t x2,Double_t y2,
UInt_t index=0;
Double_t maxchi2=kMaxCHI2;
const AliTPCRow &krow=fSectors[s][nr];
- Double_t pt=t.GetConvConst()/(100/0.299792458/0.2)/t.Get1Pt();
- Double_t sy2=SigmaY2(t.GetX(),t.GetTgl(),pt);
- Double_t sz2=SigmaZ2(t.GetX(),t.GetTgl());
+ Double_t pt=1./t.Get1Pt();
+ Double_t sy2=AliTPCcluster::SigmaY2(t.GetX(),t.GetTgl(),pt);
+ Double_t sz2=AliTPCcluster::SigmaZ2(t.GetX(),t.GetTgl());
Double_t road=4.*sqrt(t.GetSigmaY2() + sy2), y=t.GetY(), z=t.GetZ();
if (road>kMaxROAD) {
Int_t s=Int_t(alpha/fSectors->GetAlpha())%fN;
Int_t idx=-1, sec=-1, row=-1;
- Int_t nc=seed.GetNumber();
+ Int_t nc=track.GetNumberOfClusters();
if (nc--) {
idx=track.GetClusterIndex(nc);
Int_t nr=fSectors->GetNRows();
for (Int_t i=0; i<nr; i++) {
Double_t x=fSectors->GetX(i), ymax=fSectors->GetMaxY(i);
- Double_t y=seed.GetYat(x);
+ Double_t y;
+ if (!seed.GetYAt(x,GetBz(),y)) return 0;
if (y > ymax) {
s = (s+1) % fN;
AliTPCcluster *cl=0;
Int_t index=0;
Double_t maxchi2=kMaxCHI2;
- Double_t pt=seed.GetConvConst()/(100/0.299792458/0.2)/seed.Get1Pt();
- Double_t sy2=SigmaY2(seed.GetX(),seed.GetTgl(),pt);
- Double_t sz2=SigmaZ2(seed.GetX(),seed.GetTgl());
+ Double_t pt=1./seed.Get1Pt();
+ Double_t sy2=AliTPCcluster::SigmaY2(seed.GetX(),seed.GetTgl(),pt);
+ Double_t sz2=AliTPCcluster::SigmaZ2(seed.GetX(),seed.GetTgl());
Double_t road=4.*sqrt(seed.GetSigmaY2() + sy2), z=seed.GetZ();
if (road>kMaxROAD) {
Warning("FollowBackProlongation","Too broad road !");
}
- seed.SetNumber(nc);
-
return 1;
}
c[13]=f30*sy1*f40+f32*sy2*f42;
c[14]=f40*sy1*f40+f42*sy2*f42+f43*sy3*f43;
- UInt_t index=kr1.GetIndex(is);
- AliTPCseed *track=new AliTPCseed(index, x, c, x1, ns*alpha+shift);
+ Int_t index=kr1.GetIndex(is);
+ AliTPCseed *track=new AliTPCseed(x1, ns*alpha+shift, x, c, index);
Float_t l=fSectors->GetPadPitchWidth();
track->SetSampledEdx(kr1[is]->GetQ()/l,0);
Int_t n=(Int_t)seedTree->GetEntries();
for (Int_t i=0; i<n; i++) {
seedTree->GetEvent(i);
- fSeeds->AddLast(new AliTPCseed(*seed,seed->GetAlpha()));
+ seed->ResetClusters();
+ fSeeds->AddLast(new AliTPCseed(*seed));
}
delete seed;
AliESDtrack* track = event->GetTrack(i);
ULong_t status = track->GetStatus();
+ if ( (status & AliESDtrack::kTPCrefit) != 0 ) continue;
if ( (status & AliESDtrack::kTPCout ) == 0 ) continue;
- if ( (status & AliESDtrack::kTPCrefit) != 0 ) continue;
-
+
+ if ( (status & AliESDtrack::kTRDout ) != 0 )
+ if ( (status & AliESDtrack::kTRDrefit ) == 0 ) continue;
+
AliTPCtrack* tpcTrack = new AliTPCtrack(*track);
- AliTPCseed* seed = new AliTPCseed(*tpcTrack, tpcTrack->GetAlpha());
+ AliTPCseed* seed=new AliTPCseed(*tpcTrack); seed->ResetClusters();
+
+ if ( (status & AliESDtrack::kTRDrefit) == 0 ) seed->ResetCovariance(10.);
fSectors = fOuterSec;
if ( (status & AliESDtrack::kTPCin ) == 0 ) continue;
if ( (status & AliESDtrack::kTPCout) != 0 ) continue;
+ if ( (status & AliESDtrack::kITSin) != 0 )
+ if ( (status & AliESDtrack::kITSout) == 0 ) continue;
const AliTPCtrack t(*esd);
- AliTPCseed s(t,t.GetAlpha());
-
- if ( (status & AliESDtrack::kITSout) == 0 ) s.ResetCovariance();
+ AliTPCseed s(t); s.ResetClusters();
- s.ResetNWrong();
- s.ResetNRotation();
-
- Int_t nc=t.GetNumberOfClusters();
- s.SetNumber(nc); //set number of the cluster to start with
+ if ( (status & AliESDtrack::kITSout) == 0 ) s.ResetCovariance(10.);
//inner sectors
fSectors=fInnerSec; fN=fkNIS;
//outer sectors
fSectors=fOuterSec; fN=fkNOS;
- nc=s.GetNumberOfClusters();
+ Int_t nc=s.GetNumberOfClusters();
alpha=s.GetAlpha() - fSectors->GetAlphaShift();
if (alpha > 2.*TMath::Pi()) alpha -= 2.*TMath::Pi();
dedx /= (nu-nl+1);
SetdEdx(dedx);
- //Very rough PID
- Double_t p=TMath::Sqrt((1.+ GetTgl()*GetTgl())/(Get1Pt()*Get1Pt()));
-
- Double_t log1=TMath::Log(p+0.45), log2=TMath::Log(p+0.12);
- if (p<0.6) {
- if (dedx < 34 + 30/(p+0.45)/(p+0.45) + 24*log1) {SetMass(0.13957); return;}
- if (dedx < 34 + 30/(p+0.12)/(p+0.12) + 24*log2) {SetMass(0.49368); return;}
- SetMass(0.93827); return;
- }
-
- if (p<1.2) {
- if (dedx < 34 + 30/(p+0.12)/(p+0.12) + 24*log2) {SetMass(0.13957); return;}
- SetMass(0.93827); return;
- }
-
- SetMass(0.13957); return;
-
+ return;
}