X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TPC%2FAliTPCtrackerMI.h;h=8bda85a38c878b30ccbe2628ff4dc0ce5684b5a0;hb=bf21645b8f2ac125bfc929f644c54c7b32f7055e;hp=80ed26b9de282ead3f61782307e47be659082de1;hpb=e325274cff6c34971ca4660a8a4a5c55ab2eec63;p=u%2Fmrichter%2FAliRoot.git diff --git a/TPC/AliTPCtrackerMI.h b/TPC/AliTPCtrackerMI.h index 80ed26b9de2..8bda85a38c8 100644 --- a/TPC/AliTPCtrackerMI.h +++ b/TPC/AliTPCtrackerMI.h @@ -7,18 +7,18 @@ /* $Id$ */ //------------------------------------------------------- -// TPC trackerMI +// TPC tracker +// Parallel tracker // // Origin: //------------------------------------------------------- + +#include #include "AliTracker.h" -#include "AliTPCtrack.h" -#include "TClonesArray.h" -//#include "AliTPCClustersArray.h" +#include "AliTPCreco.h" +#include "AliPID.h" + -#include "AliTPCreco.h" -#include "Rtypes.h" -#include "AliComplexCluster.h" class TFile; class AliTPCParam; class AliTPCseed; @@ -26,159 +26,96 @@ class AliTPCclusterMI; class AliTPCTrackerPoint; class AliESD; class TTree; - - -class AliTPCseed : public AliTPCtrack { - public: - AliTPCseed(); - virtual ~AliTPCseed(); - AliTPCseed(const AliTPCtrack &t); - AliTPCseed(const AliKalmanTrack &t, Double_t a); - Int_t Compare(const TObject *o) const; - void Reset(Bool_t all = kTRUE); - Int_t GetProlongation(Double_t xr, Double_t &y, Double_t & z) const; - virtual Double_t GetPredictedChi2(const AliTPCclusterMI *cluster) const; - virtual Int_t Update(const AliTPCclusterMI* c, Double_t chi2, UInt_t i); - AliTPCTrackerPoint * GetTrackPoint(Int_t i); - void RebuildSeed(); // rebuild seed to be ready for storing - AliTPCseed(UInt_t index, const Double_t xx[5], - const Double_t cc[15], Double_t xr, Double_t alpha); - - Double_t GetDensityFirst(Int_t n); - Double_t GetSigma2C(){return fC44;} - void GetClusterStatistic(Int_t first, Int_t last, Int_t &found, Int_t &foundable, Int_t &shared, Bool_t plus2); - - void Modify(Double_t factor); - void SetClusterIndex2(Int_t row, Int_t index){ - fIndex[row] = index; - } - Int_t GetClusterIndex2(Int_t row){ - return fIndex[row]; - } - Int_t GetClusterSector(Int_t row){ - Int_t pica = -1; - if (fIndex[row]>=0) pica = ((fIndex[row]&0xff000000)>>24); - return pica; - } - - void SetErrorY2(Float_t sy2){fErrorY2=sy2;} - void SetErrorZ2(Float_t sz2){fErrorZ2=sz2;} - void CookdEdx(Double_t low=0.05, Double_t up=0.70, Int_t i1=0, Int_t i2=159, Bool_t onlyused = kFALSE); - // void CookdEdx2(Double_t low=0.05, Double_t up=0.70); - Bool_t IsActive(){ return !(fRemoval);} - void Desactivate(Int_t reason){ fRemoval = reason;} - // - // - AliTPCclusterMI* fClusterPointer[160]; //! array of cluster pointers - - TClonesArray * fPoints; // array with points along the track - TClonesArray * fEPoints; // array with exact points - calculated in special macro not used in tracking - //---CURRENT VALUES - Int_t fRow; //!current row number - Int_t fSector; //!current sector number - Int_t fRelativeSector; //! index of current relative sector - Float_t fCurrentSigmaY2; //!expected current cluster sigma Y - Float_t fCurrentSigmaZ2; //!expected current cluster sigma Z - Float_t fErrorY2; //!sigma of current cluster - Float_t fErrorZ2; //!sigma of current cluster - AliTPCclusterMI * fCurrentCluster; //!pointer to the current cluster for prolongation - Int_t fCurrentClusterIndex1; //! index of the current cluster - Bool_t fInDead; //! indicate if the track is in dead zone - Bool_t fIsSeeding; //!indicates if it is proces of seeading - Int_t fNoCluster; //!indicates number of rows without clusters - Int_t fSort; //!indicate criteria for sorting - Bool_t fBSigned; //indicates that clusters of this trackes are signed to be used - // - // - Float_t fDEDX[4]; // dedx according padrows - Float_t fSDEDX[4]; // sdedx according padrows - Int_t fNCDEDX[4]; // number of clusters for dedx measurment - // - Int_t fSeedType; //seeding type - Int_t fSeed1; //first row for seeding - Int_t fSeed2; //last row for seeding - Int_t fOverlapLabels[12]; //track labels and the length of the overlap - private: - Float_t fMAngular; // mean angular factor - AliTPCTrackerPoint fTrackPoints[160]; //!track points - array track points - - ClassDef(AliTPCseed,1) -}; - - - +class AliESDkink; +class TTreeSRedirector; +class AliTrackPoint; class AliTPCtrackerMI : public AliTracker { public: - AliTPCtrackerMI():AliTracker(),fkNIS(0),fkNOS(0) { - fInnerSec=fOuterSec=0; fSeeds=0; - } - AliTPCtrackerMI(const AliTPCParam *par); - ~AliTPCtrackerMI(); + AliTPCtrackerMI():AliTracker(),fkNIS(0),fkNOS(0) { + fInnerSec=fOuterSec=0; fSeeds=0; + } + AliTPCtrackerMI(const AliTPCParam *par); + AliTPCtrackerMI(const AliTPCtrackerMI& r); //dummy copy constructor + AliTPCtrackerMI &operator=(const AliTPCtrackerMI& r);//dummy assignment operator + virtual ~AliTPCtrackerMI(); // - //to be implemented later - virtual Int_t Clusters2Tracks (AliESD *){return 0;} - virtual Int_t RefitInward (AliESD *){return 0;} - virtual Int_t LoadClusters (TTree *){return 0;} + void SetIteration(Int_t iteration){fIteration = iteration;} + virtual Int_t Clusters2Tracks (AliESD *esd); + virtual Int_t RefitInward (AliESD *esd); + virtual Int_t LoadClusters (TTree * tree); + Int_t LoadClusters(); + void UnloadClusters(); + void Transform(AliCluster * cluster); // void SetIO(); //set default IO from folders void SetIO(TTree * input, TTree * output, AliESD * event); + void FillESD(TObjArray* arr); void WriteTracks(); + void WriteTracks(TTree * tree); void DeleteSeeds(); void SetDebug(Int_t debug){ fDebug = debug;} + void FindKinks(TObjArray * array, AliESD * esd); + void FindV0s(TObjArray * array, AliESD * esd); + void UpdateKinkQualityM(AliTPCseed * seed); + void UpdateKinkQualityD(AliTPCseed * seed); + Int_t CheckKinkPoint(AliTPCseed*seed, AliTPCseed &mother, AliTPCseed &daughter, AliESDkink &kink); + Int_t RefitKink(AliTPCseed &mother, AliTPCseed &daughter, AliESDkink &kink); Int_t ReadSeeds(const TFile *in); - Int_t LoadClusters(); - void UnloadClusters(); TObjArray * GetSeeds(){return fSeeds;} // - AliCluster * GetCluster (int) const {return 0;} + AliCluster * GetCluster(Int_t index) const {return (AliCluster*)GetClusterMI(index);} AliTPCclusterMI *GetClusterMI(Int_t index) const; - Int_t Clusters2Tracks(const TFile *in, TFile *out){return 0;} Int_t Clusters2Tracks(); - virtual void CookLabel(AliTPCseed *t,Float_t wrong) const; + virtual void CookLabel(AliKalmanTrack *tk,Float_t wrong) const; + virtual Int_t CookLabel(AliTPCseed *t,Float_t wrong, Int_t first,Int_t last ) const; void RotateToLocal(AliTPCseed *seed); Int_t FollowProlongation(AliTPCseed& t, Int_t rf=0, Int_t step=1); Int_t FollowProlongationFast(AliTPCseed& t, Int_t rf=0, Int_t step=1); - + Bool_t GetTrackPoint(Int_t index, AliTrackPoint &p ) const; + Int_t FollowBackProlongation(AliTPCseed& t, Int_t rf); Int_t FollowToNext(AliTPCseed& t, Int_t nr); Int_t FollowToNextFast(AliTPCseed& t, Int_t nr); Int_t UpdateClusters(AliTPCseed& t, Int_t nr); Int_t FollowToNextCluster( AliTPCseed& t, Int_t nr); - virtual Int_t PropagateBack (const TFile *, TFile *){return 0;} Int_t PropagateBack(TObjArray * arr); Int_t PropagateBack(AliESD * event); Int_t PropagateBack(AliTPCseed *pt, Int_t row0, Int_t row1); Int_t PropagateForward(); Int_t PropagateForward2(TObjArray * arr); - Int_t CheckKinkPoint(AliTPCseed*seed, Float_t th); - void SortTracks(TObjArray * arr, Int_t mode); + void SortTracks(TObjArray * arr, Int_t mode) const; virtual Double_t ErrY2(AliTPCseed* seed, AliTPCclusterMI * cl = 0); virtual Double_t ErrZ2(AliTPCseed* seed, AliTPCclusterMI * cl = 0); - Double_t f1(Double_t x1,Double_t y1, Double_t x2,Double_t y2, Double_t x3,Double_t y3); - Double_t f1old(Double_t x1,Double_t y1, Double_t x2,Double_t y2, Double_t x3,Double_t y3); - Double_t f2(Double_t x1,Double_t y1, Double_t x2,Double_t y2, Double_t x3,Double_t y3); - Double_t f2old(Double_t x1,Double_t y1, Double_t x2,Double_t y2, Double_t x3,Double_t y3); + Double_t F1(Double_t x1,Double_t y1, Double_t x2,Double_t y2, Double_t x3,Double_t y3); + Double_t F1old(Double_t x1,Double_t y1, Double_t x2,Double_t y2, Double_t x3,Double_t y3); + Double_t F2(Double_t x1,Double_t y1, Double_t x2,Double_t y2, Double_t x3,Double_t y3); + Double_t F2old(Double_t x1,Double_t y1, Double_t x2,Double_t y2, Double_t x3,Double_t y3); - Double_t f3(Double_t x1,Double_t y1, Double_t x2,Double_t y2, Double_t z1,Double_t z2); - Double_t f3n(Double_t x1,Double_t y1, Double_t x2,Double_t y2, Double_t z1,Double_t z2, + Double_t F3(Double_t x1,Double_t y1, Double_t x2,Double_t y2, Double_t z1,Double_t z2); + Double_t F3n(Double_t x1,Double_t y1, Double_t x2,Double_t y2, Double_t z1,Double_t z2, Double_t c); Bool_t GetProlongation(Double_t x1, Double_t x2, Double_t x[5], Double_t &y, Double_t &z); -public: + public: //**************** Internal tracker class ********************** + class AliTPCSector; class AliTPCRow { + friend class AliTPCtrackerMI; + friend class AliTPCtrackerMI::AliTPCSector; public: - AliTPCRow() {fN=0;} + AliTPCRow(); ~AliTPCRow(); void InsertCluster(const AliTPCclusterMI *c, UInt_t index); + void ResetClusters(); operator int() const {return fN;} Int_t GetN() const {return fN;} const AliTPCclusterMI* operator[](Int_t i) const {return fClusters[i];} @@ -190,80 +127,58 @@ public: void SetX(Double_t x) {fX=x;} Double_t GetX() const {return fX;} +private: + AliTPCRow & operator=(const AliTPCRow & ); + AliTPCRow(const AliTPCRow& /*r*/); //dummy copy constructor Float_t fDeadZone; // the width of the dead zone - // void RebuildRow(){;} -// AliTPCclusterMI *fClusters1; //array with clusters 1 - Int_t fN1; + Int_t fN1; //number of clusters on left side AliTPCclusterMI *fClusters2; //array with clusters 2 - Int_t fN2; - Short_t fFastCluster[510]; - private: + Int_t fN2; // number of clusters on right side of the TPC + Short_t fFastCluster[510]; //index of the nearest cluster at given position Int_t fN; //number of clusters const AliTPCclusterMI *fClusters[kMaxClusterPerRow]; //pointers to clusters // indexes for cluster at given position z // AliTPCclusterMI *fClustersArray; // UInt_t fIndex[kMaxClusterPerRow]; //indeces of clusters Double_t fX; //X-coordinate of this row - //private: - AliTPCRow(const AliTPCRow& r); //dummy copy constructor - AliTPCRow &operator=(const AliTPCRow& r); //dummy assignment operator + }; //**************** Internal tracker class ********************** class AliTPCSector { + friend class AliTPCtrackerMI; public: AliTPCSector() { fN=0; fRow = 0; } ~AliTPCSector() { delete[] fRow; } - AliTPCRow& operator[](Int_t i) const { return *(fRow+i); } - Int_t GetNRows() const { return fN; } - void Setup(const AliTPCParam *par, Int_t flag); - Double_t GetX(Int_t l) const {return fRow[l].GetX();} - Double_t GetMaxY(Int_t l) const { - return GetX(l)*TMath::Tan(0.5*GetAlpha()); - } - Double_t GetAlpha() const {return fAlpha;} - Double_t GetAlphaShift() const {return fAlphaShift;} - //Int_t GetFirst(){return fFirstRow;} - Int_t GetRowNumber(Double_t x) const { - //return pad row number for this x - Double_t r; - if (fN < 64){ - r=fRow[fN-1].GetX(); - if (x > r) return fN; - r=fRow[0].GetX(); - if (x < r) return -1; - return Int_t((x-r)/fPadPitchLength + 0.5);} - else{ - r=fRow[fN-1].GetX(); - if (x > r) return fN; - r=fRow[0].GetX(); - if (x < r) return -1; - Double_t r1=fRow[64].GetX(); - if(x=fInnerSec->GetNRows()) ? fOuterSec[sec][row-fInnerSec->GetNRows()]:fInnerSec[sec][row]; } -Double_t AliTPCtrackerMI::GetXrow(Int_t row) { +Double_t AliTPCtrackerMI::GetXrow(Int_t row) const { // return (row>=fInnerSec->GetNRows()) ? fOuterSec->GetX(row-fInnerSec->GetNRows()):fInnerSec->GetX(row); return fXRow[row]; } -Double_t AliTPCtrackerMI::GetMaxY(Int_t row) { +Double_t AliTPCtrackerMI::GetMaxY(Int_t row) const { //return (row>=fInnerSec->GetNRows()) ? fOuterSec->GetMaxY(row-fInnerSec->GetNRows()):fInnerSec->GetMaxY(row); return fYMax[row]; } -Int_t AliTPCtrackerMI::GetRowNumber(Double_t x) +Int_t AliTPCtrackerMI::GetRowNumber(Double_t x) const { // return (x>133.) ? fOuterSec->GetRowNumber(x)+fInnerSec->GetNRows():fInnerSec->GetRowNumber(x); } -Double_t AliTPCtrackerMI::GetPadPitchLength(Double_t x) +Double_t AliTPCtrackerMI::GetPadPitchLength(Double_t x) const { // return (x>133.) ? fOuterSec->GetPadPitchLength(x):fInnerSec->GetPadPitchLength(x); //return fPadLength[row]; } -Double_t AliTPCtrackerMI::GetPadPitchLength(Int_t row) +Double_t AliTPCtrackerMI::GetPadPitchLength(Int_t row) const { // return fPadLength[row];