X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TPC%2FAliTPCtrackerMI.h;h=8bda85a38c878b30ccbe2628ff4dc0ce5684b5a0;hb=8477f500cabc45260a7104663d089ade4d7200cc;hp=23caddef30bbb4af3fac168ed5eb110cf250a083;hpb=f8aae3779b58ff58faf59c4c1104d068068b06f6;p=u%2Fmrichter%2FAliRoot.git diff --git a/TPC/AliTPCtrackerMI.h b/TPC/AliTPCtrackerMI.h index 23caddef30b..8bda85a38c8 100644 --- a/TPC/AliTPCtrackerMI.h +++ b/TPC/AliTPCtrackerMI.h @@ -3,272 +3,240 @@ /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * * See cxx source for full Copyright notice */ + /* $Id$ */ //------------------------------------------------------- -// TPC trackerMI +// TPC tracker +// Parallel tracker // // Origin: //------------------------------------------------------- + +#include #include "AliTracker.h" -#include "AliTPCtrack.h" -#include "AliTPCClustersArray.h" +#include "AliTPCreco.h" +#include "AliPID.h" -#include "AliTPCreco.h" -#include "Rtypes.h" class TFile; class AliTPCParam; class AliTPCseed; class AliTPCclusterMI; -class AliTPCTrackPoint; - - - -class AliTPCclusterTracks { - public: - AliTPCclusterTracks(); - Float_t fDistance[3]; // distance to the 3 nerest track if there overlap with cluster - Short_t fTrackIndex[3]; // indexes of the tracks overlapped with clusters -}; - -class AliTPCseed; - -class AliTPCKalmanSegment: public TObject { - // - // class to store tracklet parameters - // needed to probabilistically define track beginning and track end - public: - AliTPCKalmanSegment(); - void Init(AliTPCseed* seed); // in initialization initial entrance integral chi2, fNCFoundable and fNC stored - void Finish(AliTPCseed* seed); // in finish state vector stored and chi2 and fNC... calculated - void GetState(Double_t &x, Double_t & alpha, Double_t state[5]); - void GetCovariance(Double_t covariance[15]); - void GetStatistic(Int_t & nclusters, Int_t & nfoundable, Float_t & chi2); - private: - Float_t fX; // x - state - Float_t fAlpha; // Rotation angle the local (TPC sector) - Float_t fState[5]; // state vector - Float_t fChi2; // chi2 - for given tracklet - Float_t fCovariance[15]; // 15 elements of covariance matrix - Int_t fNCFoundable; // number of foundable clusters on tracklet (effect of dead zone) - Int_t fNC; // number of accepted clusters for tracklet - // Int_t fN; // total number of padrows for given tracklet - ClassDef(AliTPCKalmanSegment,1) -}; - - -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(); - 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); - AliTPCTrackPoint * 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); - void SetClusterIndex(Int_t index){ - fClusterIndex[fRow] = index; - } - 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); - Bool_t IsActive(){ return !(fRemoval);} - void Desactivate(Int_t reason){ fRemoval = reason;} - - // Float_t GetRadius(){ return (1-fP2)/fP4;} - Int_t fRelativeSector; // ! index of current relative sector - Int_t fClusterIndex[200]; //array of cluster indexes - Float_t fClusterDensity[16]; //array with cluster densities - - Int_t fRemoval; //reason - why was track removed - 0 - means still active - TClonesArray * fPoints; // array with points along the track - TClonesArray * fEPoints; // array with exact points - calculated in special macro not used in tracking - Int_t fRow; //!current row number - Int_t fSector; //!current sector number - Float_t fCurrentSigmaY; //!expected current cluster sigma Y - Float_t fCurrentSigmaZ; //!expected current cluster sigma Z - AliTPCclusterMI * fCurrentCluster; //!pointer to the current cluster for prolongation - Int_t fCurrentClusterIndex1; //! index of the current cluster - Int_t fCurrentClusterIndex2; //! index of the current cluster - - Float_t fErrorY2; //!sigma of current cluster - Float_t fErrorZ2; //!sigma of current cluster - Int_t fNFoundable; //number of foundable clusters - dead zone taken to the account - Bool_t fInDead; // indicate if the track is in dead zone - Int_t fFirstPoint; // first cluster position - Int_t fLastPoint; // last cluster position - Int_t fNShared; // number of shared points - Bool_t fIsSeeding; //indicates if it is proces of seeading - Bool_t fStopped; // indicate that track cann't be prolongate anymore (for secondaries) - private: - Float_t fSdEdx; // sigma of dedx - Float_t fMAngular; // mean angular factor - AliTPCTrackPoint ** fTrackPoints; //!track points - array track points - Float_t fDEDX[4]; // dedx according padrows - Float_t fSDEDX[4]; // sdedx according padrows - Int_t fNCDEDX[4]; // number of clusters for dedx measurment - - ClassDef(AliTPCseed,1) -}; - - - +class AliTPCTrackerPoint; +class AliESD; +class TTree; +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(); - - virtual Int_t Clusters2Tracks(AliESD *event) {return -1;}; - virtual Int_t PropagateBack(AliESD *event) {return -1;}; - virtual Int_t RefitInward(AliESD *event) {return -1;}; - virtual Int_t LoadClusters(TTree *) {return -1;}; - + 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(); + // + 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(); - - void LoadInnerSectors(); - void LoadOuterSectors(); - AliCluster * GetCluster (Int_t index) const - {return (AliCluster*) GetClusterMI(index);} + TObjArray * GetSeeds(){return fSeeds;} + // + AliCluster * GetCluster(Int_t index) const {return (AliCluster*)GetClusterMI(index);} AliTPCclusterMI *GetClusterMI(Int_t index) const; Int_t Clusters2Tracks(); - Int_t PropagateBack() {return -1;}; - - virtual void CookLabel(AliKalmanTrack *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); + + 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); + + 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 f2(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); -public: + 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 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 AliTPCSector; class AliTPCRow { + friend class AliTPCtrackerMI; + friend class AliTPCtrackerMI::AliTPCSector; public: - AliTPCRow() {fN=0; fClusterTracks=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];} UInt_t GetIndex(Int_t i) const {return fIndex[i];} - Int_t Find(Double_t z) const; + 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;} - AliTPCclusterTracks * GetClusterTracks(Int_t index){ return ( (index 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(xforward // TObjArray * fTrackPointPool; // ! pool with track points + // TObjArray * fSeedPool; //! pool with seeds + Double_t fXRow[200]; // radius of the pad row + Double_t fYMax[200]; // max y for given pad row + Double_t fPadLength[200]; // max y for given pad row const AliTPCParam *fParam; //pointer to the parameters + TTreeSRedirector *fDebugStreamer; //!debug streamer + ClassDef(AliTPCtrackerMI,1) }; + +AliTPCtrackerMI::AliTPCRow & AliTPCtrackerMI::GetRow(Int_t sec, Int_t row) +{ + // + return (row>=fInnerSec->GetNRows()) ? fOuterSec[sec][row-fInnerSec->GetNRows()]:fInnerSec[sec][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) const { + //return (row>=fInnerSec->GetNRows()) ? fOuterSec->GetMaxY(row-fInnerSec->GetNRows()):fInnerSec->GetMaxY(row); + return fYMax[row]; +} + +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) const +{ + // + return (x>133.) ? fOuterSec->GetPadPitchLength(x):fInnerSec->GetPadPitchLength(x); + //return fPadLength[row]; +} + +Double_t AliTPCtrackerMI::GetPadPitchLength(Int_t row) const +{ + // + return fPadLength[row]; +} + + + #endif