X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TPC%2FAliTPCtrackerMI.h;h=03197c9a2d08bc3b7cc1d6806e81cfc06903791b;hb=73ce6137cfeffee5a66c4f0bb6480c8969f91431;hp=38111eaa9fa6f466972a7cdac04a7ee3e5cffee2;hpb=91162307f887aa0fbda9c0587da62b1a10b63672;p=u%2Fmrichter%2FAliRoot.git diff --git a/TPC/AliTPCtrackerMI.h b/TPC/AliTPCtrackerMI.h index 38111eaa9fa..03197c9a2d0 100644 --- a/TPC/AliTPCtrackerMI.h +++ b/TPC/AliTPCtrackerMI.h @@ -7,287 +7,136 @@ /* $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 "AliTPCclusterMI.h" +#include "AliTPCtrackerSector.h" + -#include "AliTPCreco.h" -#include "Rtypes.h" -#include "AliComplexCluster.h" class TFile; class AliTPCParam; class AliTPCseed; -class AliTPCclusterMI; class AliTPCTrackerPoint; -class AliESD; +class AliESDEvent; 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){ - return fIndex[row]>=0 ? ((fIndex[row]&0xff000000)>>24) :-1; - } - - 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(); + AliTPCtrackerMI(const AliTPCParam *par); + 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 (AliESDEvent *esd); + virtual Int_t RefitInward (AliESDEvent *esd); + virtual Int_t LoadClusters (TTree * tree); + virtual Int_t LoadClusters (TObjArray * arr); // another input + virtual Int_t LoadClusters (TClonesArray * arr); // another input + Int_t LoadClusters(); + void UnloadClusters(); + Int_t LoadInnerSectors(); + Int_t LoadOuterSectors(); + virtual void FillClusterArray(TObjArray* array) const; + void Transform(AliTPCclusterMI * cluster); // - void SetIO(); //set default IO from folders - void SetIO(TTree * input, TTree * output, AliESD * event); - void WriteTracks(); + void FillESD(TObjArray* arr); void DeleteSeeds(); void SetDebug(Int_t debug){ fDebug = debug;} + void FindKinks(TObjArray * array, AliESDEvent * esd); + // + void FindCurling(TObjArray * array, AliESDEvent * esd, Int_t iter); + void FindSplitted(TObjArray * array, AliESDEvent * esd, Int_t iter); + void FindMultiMC(TObjArray * array, AliESDEvent * esd, Int_t iter); + // + void FindV0s(TObjArray * array, AliESDEvent * 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(AliESDEvent * 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: -//**************** Internal tracker class ********************** - class AliTPCRow { - public: - AliTPCRow() {fN=0;} - ~AliTPCRow(); - void InsertCluster(const AliTPCclusterMI *c, UInt_t index); - operator int() const {return fN;} - Int_t GetN() const {return fN;} - const AliTPCclusterMI* operator[](Int_t i) const {return fClusters[i];} - UInt_t GetIndex(Int_t i) const {return fIndex[i];} - inline Int_t Find(Double_t z) const; - AliTPCclusterMI * FindNearest(Double_t y, Double_t z, Double_t roady, Double_t roadz) const; - AliTPCclusterMI * FindNearest2(Double_t y, Double_t z, Double_t roady, Double_t roadz, UInt_t & index) const; - AliTPCclusterMI * FindNearest3(Double_t y, Double_t z, Double_t roady, Double_t roadz, UInt_t & index) const; - - void SetX(Double_t x) {fX=x;} - Double_t GetX() const {return fX;} - Float_t fDeadZone; // the width of the dead zone - // void RebuildRow(){;} -// - AliTPCclusterMI *fClusters1; //array with clusters 1 - Int_t fN1; - AliTPCclusterMI *fClusters2; //array with clusters 2 - Int_t fN2; - Short_t fFastCluster[510]; - private: - 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 { - 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) { +Bool_t AliTPCtrackerMI::IsActive(Int_t sec, Int_t row) +{ + // + // check if the given sector row is active + // + return (row>=fInnerSec->GetNRows()) ? fOuterSec[sec][row-fInnerSec->GetNRows()].GetN()>0:fInnerSec[sec][row].GetN()>0; +} + + +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];