X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ITS%2FAliITStrackerV2.h;h=e49294df733c75dc9bdf07467fe2dfedb35c99f7;hb=8661a211bbe5bf500e52341e4ce048c6ee3601b4;hp=d01c771eb8aba5728628a9582ec81b032e149dc8;hpb=006b5f7f77935e0f4f604586fa5222296a2c254b;p=u%2Fmrichter%2FAliRoot.git diff --git a/ITS/AliITStrackerV2.h b/ITS/AliITStrackerV2.h index d01c771eb8a..e49294df733 100644 --- a/ITS/AliITStrackerV2.h +++ b/ITS/AliITStrackerV2.h @@ -1,111 +1,166 @@ -#ifndef ALIITSTRACKER_H -#define ALIITSTRACKER_H +#ifndef ALIITSTRACKERV2_H +#define ALIITSTRACKERV2_H /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * * See cxx source for full Copyright notice */ //------------------------------------------------------------------------- // ITS tracker -// -// Origin: Iouri Belikov, CERN, Jouri.Belikov@cern.ch +// reads AliITSRecPoint clusters and creates AliITStrackV2 tracks +// Origin: Iouri Belikov, CERN, Jouri.Belikov@cern.ch //------------------------------------------------------------------------- #include "AliTracker.h" -#include "AliITSrecoV2.h" +#include "AliITSRecoParam.h" #include "AliITStrackV2.h" +#include "AliITSgeomTGeo.h" -class AliITSclusterV2; -class AliITSgeom; -class TFile; + +class AliITSRecPoint; +class AliESDEvent; +class TTree; //------------------------------------------------------------------------- class AliITStrackerV2 : public AliTracker { public: - AliITStrackerV2():AliTracker(){} - AliITStrackerV2(const AliITSgeom *geom) throw (const Char_t *); - + AliITStrackerV2(); + AliITStrackerV2(const Char_t *geom); + ~AliITStrackerV2(){} AliCluster *GetCluster(Int_t index) const; - Int_t Clusters2Tracks(const TFile *in, TFile *out); - Int_t PropagateBack(const TFile *in, TFile *out) {return 0;} - -private: - - Double_t GetEffectiveThickness(Double_t phi, Double_t z) const; - + AliITSRecPoint *GetCluster(Int_t l, Int_t c) const { + return fgLayers[l].GetCluster(c); + } + Int_t GetNumberOfClustersLayer(Int_t n) const { + return fgLayers[n].GetNumberOfClusters(); + } + Int_t LoadClusters(TTree *cf); + void UnloadClusters(); + Int_t Clusters2Tracks(AliESDEvent *event); + Int_t PropagateBack(AliESDEvent *event); + Int_t RefitInward(AliESDEvent *event); + Bool_t RefitAt(Double_t x, AliITStrackV2 *seed, + const AliITStrackV2 *t, Bool_t extra=kFALSE); + void SetupFirstPass(Int_t *flags, Double_t *cuts=0); + void SetupSecondPass(Int_t *flags, Double_t *cuts=0); + + void SetLastLayerToTrackTo(Int_t l=0) {fLastLayerToTrackTo=l;} + void SetLayersNotToSkip(Int_t *l); + + void UseClusters(const AliKalmanTrack *t, Int_t from=0) const; + + class AliITSdetector { + public: + AliITSdetector():fR(0.),fPhi(0.){} + AliITSdetector(Double_t r,Double_t phi):fR(r),fPhi(phi){} + Double_t GetR() const {return fR;} + Double_t GetPhi() const {return fPhi;} + private: + Double_t fR; // polar coordinates + Double_t fPhi; // of this detector + }; + + class AliITSlayer { + public: + enum {kNsector=5, kMaxClusterPerSector=AliITSRecoParam::fgkMaxClusterPerLayer/kNsector}; + AliITSlayer(); + AliITSlayer(Double_t r, Double_t p, Double_t z, Int_t nl, Int_t nd); + ~AliITSlayer(); + Int_t InsertCluster(AliITSRecPoint *c); + void ResetClusters(); + Int_t SelectClusters(Float_t zmi, Float_t zma, Float_t ymi, Float_t yma); + const AliITSRecPoint *GetNextCluster(Int_t &ci); + void ResetRoad(); + Double_t GetRoad() const {return fRoad;} + Double_t GetR() const {return fR;} + AliITSRecPoint *GetCluster(Int_t i) const { return fClusters[i]; } + AliITSdetector &GetDetector(Int_t n) const { return fDetectors[n]; } + Int_t FindDetectorIndex(Double_t phi, Double_t z) const; + Double_t GetThickness(Double_t y, Double_t z, Double_t &x0) const; + Int_t GetNladders() const {return fNladders;} + Int_t GetNdetectors() const {return fNdetectors;} + Int_t GetNumberOfClusters() const; + protected: + AliITSlayer(const AliITSlayer&); + AliITSlayer &operator=(const AliITSlayer &tr); + Double_t fR; // mean radius of this layer + Double_t fPhiOffset; // offset of the first detector in Phi + Int_t fNladders; // number of ladders + Double_t fZOffset; // offset of the first detector in Z + Int_t fNdetectors; // detectors/ladder + AliITSdetector *fDetectors; // array of detectors + + AliITSRecPoint *fClusters[AliITSRecoParam::fgkMaxClusterPerLayer]; // pointers to clusters + Int_t fN[kNsector]; // numbers of clusters sector by sector + + Int_t fIndex[AliITSRecoParam::fgkMaxClusterPerLayer]; // indexes of selected clusters + Int_t fNsel; // number of selected clusters + + Double_t fRoad; // road defined by the cluster density + Int_t FindClusterIndex(Float_t z, Int_t s) const; + }; + +protected: + AliITStrackerV2(const AliITStrackerV2&); + void CookLabel(AliKalmanTrack *t,Float_t wrong) const; + Double_t GetEffectiveThickness(Double_t y, Double_t z) const; void FollowProlongation(); Int_t TakeNextProlongation(); - void ResetBestTrack() { fBestTrack.~AliITStrackV2(); new(&fBestTrack) AliITStrackV2(fTrackToFollow); } - void ResetTrackToFollow(const AliITStrackV2 &t) { fTrackToFollow.~AliITStrackV2(); new(&fTrackToFollow) AliITStrackV2(t); } + Int_t fI; // index of the current layer + static AliITSlayer fgLayers[AliITSgeomTGeo::kNLayers];// ITS layers + AliITStrackV2 fTracks[AliITSgeomTGeo::kNLayers]; // track estimations at the ITS layers + AliITStrackV2 fBestTrack; // "best" track + AliITStrackV2 fTrackToFollow; // followed track + Int_t fPass; // current pass through the data + Int_t fConstraint[2]; // constraint flags -class AliITSdetector { -private: - Double_t fR; // polar coordinates - Double_t fPhi; // of this detector - -public: - AliITSdetector(){} - AliITSdetector(Double_t r,Double_t phi) {fR=r; fPhi=phi;} - - void *operator new(size_t s,AliITSdetector *p) {return p;} - - Double_t GetR() const {return fR;} - Double_t GetPhi() const {return fPhi;} -}; - -class AliITSlayer { - Double_t fR; // mean radius of this layer - Double_t fPhiOffset; // offset of the first detector in Phi - Int_t fNladders; // number of ladders - Double_t fZOffset; // offset of the first detector in Z - Int_t fNdetectors; // detectors/ladder - AliITSdetector *fDetectors; // array of detectors - - Int_t fN; // number of clusters - AliITSclusterV2 *fClusters[kMaxClusterPerLayer]; // pointers to clusters - - Double_t fZmax; // edges - Double_t fYmin; // of the - Double_t fYmax; // "window" - Int_t fI; // index of the current cluster within the "window" + Int_t fLayersNotToSkip[AliITSgeomTGeo::kNLayers]; // layer masks + Int_t fLastLayerToTrackTo; // the innermost layer to track to - Int_t FindClusterIndex(Double_t z) const; - -public: - AliITSlayer(); - AliITSlayer(Double_t r, Double_t p, Double_t z, Int_t nl, Int_t nd); - ~AliITSlayer(); - Int_t InsertCluster(AliITSclusterV2 *c); - void SelectClusters(Double_t zmin,Double_t zmax,Double_t ymin,Double_t ymax); - const AliITSclusterV2 *GetNextCluster(Int_t &ci); - - void *operator new(size_t s, AliITSlayer *p) {return p;} - - Double_t GetR() const {return fR;} - AliITSclusterV2 *GetCluster(Int_t i) const {return fClusters[i];} - AliITSdetector &GetDetector(Int_t n) const { return fDetectors[n]; } - Int_t FindDetectorIndex(Double_t phi, Double_t z) const; - Double_t GetThickness(Double_t phi, Double_t z) const; - - Int_t InRoad() const ; -}; - - Int_t fI; // index of the current layer - static AliITSlayer fLayers[kMaxLayer]; // ITS layers - AliITStrackV2 fTracks[kMaxLayer]; // track estimations at the ITS layers - AliITStrackV2 fBestTrack; // "best" track - AliITStrackV2 fTrackToFollow; // followed track - - Double_t fYV; // Y-coordinate of the primary vertex - Double_t fZV; // Z-coordinate of the primary vertex +private: + AliITStrackerV2 &operator=(const AliITStrackerV2 &tr); + ClassDef(AliITStrackerV2,1) //ITS tracker V2 }; +inline void AliITStrackerV2::SetupFirstPass(Int_t *flags, Double_t *cuts) { + // This function sets up flags and cuts for the first tracking pass + // + // flags[0] - vertex constaint flag + // negative means "skip the pass" + // 0 means "no constraint" + // positive means "normal constraint" + + fConstraint[0]=flags[0]; + if (cuts==0) return; +} + +inline void AliITStrackerV2::SetupSecondPass(Int_t *flags, Double_t *cuts) { + // This function sets up flags and cuts for the second tracking pass + // + // flags[0] - vertex constaint flag + // negative means "skip the pass" + // 0 means "no constraint" + // positive means "normal constraint" + + fConstraint[1]=flags[0]; + if (cuts==0) return; +} + +inline void AliITStrackerV2::CookLabel(AliKalmanTrack *t,Float_t wrong) const { + //-------------------------------------------------------------------- + //This function "cooks" a track label. If label<0, this track is fake. + //-------------------------------------------------------------------- + Int_t tpcLabel=t->GetLabel(); + if (tpcLabel<0) return; + AliTracker::CookLabel(t,wrong); + if (tpcLabel != t->GetLabel()) t->SetLabel(-tpcLabel); +} #endif