/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
* See cxx source for full Copyright notice */
+/* $Id$ */
+
#include "AliTracker.h"
+#include "TObjArray.h"
+#include "AliBarrelTrack.h"
+
+#include <TNamed.h>
+#include <TH1.h>
class TFile;
class TParticle;
class TParticlePDG;
-class TObjArray;
class AliTRDgeometry;
class AliTRDparameter;
const unsigned kMAX_LAYERS_PER_SECTOR = 1000;
const unsigned kMAX_TIME_BIN_INDEX = 216; // (30 drift + 6 ampl) * 6 planes
-const unsigned kMAX_CLUSTER_PER_TIME_BIN = 3500;
+const unsigned kMAX_CLUSTER_PER_TIME_BIN = 7000;
const unsigned kZONES = 5;
const Int_t kTRACKING_SECTORS = 18;
-class AliTRDtracker : public AliTracker {
+class AliTRDtracker : public AliTracker {
public:
Int_t Clusters2Tracks(const TFile *in, TFile *out);
Int_t PropagateBack(const TFile *in, TFile *out);
- AliCluster *GetCluster(Int_t index) const { return NULL; };
+ Int_t PropagateBack();//Almost empty see .cxx for more comments
+ Int_t Clusters2Tracks();//Almost empty see .cxx for more comments
+
+ Int_t LoadClusters() {LoadEvent(); return 0;};
+ void UnloadClusters() {UnloadEvent();};
+ AliCluster *GetCluster(Int_t index) const { return (AliCluster*) fClusters->UncheckedAt(index); };
virtual void CookLabel(AliKalmanTrack *t,Float_t wrong) const;
virtual void UseClusters(const AliKalmanTrack *t, Int_t from=0) const;
- void SetEventNumber(Int_t event) { fEvent = event; }
void SetAddTRDseeds() { fAddTRDseeds = kTRUE; }
+ void SetNoTilt() { fNoTilt = kTRUE; }
+
+ Double_t GetTiltFactor(const AliTRDcluster* c);
void ReadClusters(TObjArray *array, const Char_t *filename);
Int_t CookSectorIndex(Int_t gs) { return kTRACKING_SECTORS - 1 - gs; }
- Float_t GetSeedGap() const {return fSeedGap;}
+ Float_t GetSeedGap() const {return fgkSeedGap;}
Int_t GetMaxGap() const {return fMaxGap;}
Int_t GetTimeBinsPerPlane() const {return fTimeBinsPerPlane;}
- Float_t GetSeedStep() const {return fSeedStep;}
- Float_t GetSeedDepth() const {return fSeedDepth;}
- Float_t GetSkipDepth() const {return fSkipDepth;}
- Double_t GetMaxChi2() const {return fMaxChi2;}
- Float_t GetMaxSeedC() const {return fMaxSeedC;}
- Float_t GetMaxSeedTan() const {return fMaxSeedTan;}
- Double_t GetSeedErrorSY() const {return fSeedErrorSY;}
- Double_t GetSeedErrorSY3() const {return fSeedErrorSY3;}
- Double_t GetSeedErrorSZ() const {return fSeedErrorSZ;}
- Float_t GetLabelFraction() const {return fLabelFraction;}
- Float_t GetWideRoad() const {return fWideRoad;}
-
- Float_t GetMinClustersInTrack() const {return fMinClustersInTrack;}
- Float_t GetMinClustersInSeed() const {return fMinClustersInSeed;}
- Float_t GetMaxSeedDeltaZ() const {return fMaxSeedDeltaZ;}
- Float_t GetMaxSeedVertexZ() const {return fMaxSeedVertexZ;}
+ Float_t GetSeedStep() const {return fgkSeedStep;}
+ Float_t GetSeedDepth() const {return fgkSeedDepth;}
+ Float_t GetSkipDepth() const {return fgkSkipDepth;}
+ Double_t GetMaxChi2() const {return fgkMaxChi2;}
+ Float_t GetMaxSeedC() const {return fgkMaxSeedC;}
+ Float_t GetMaxSeedTan() const {return fgkMaxSeedTan;}
+ Double_t GetSeedErrorSY() const {return fgkSeedErrorSY;}
+ Double_t GetSeedErrorSY3() const {return fgkSeedErrorSY3;}
+ Double_t GetSeedErrorSZ() const {return fgkSeedErrorSZ;}
+ Float_t GetLabelFraction() const {return fgkLabelFraction;}
+ Float_t GetWideRoad() const {return fgkWideRoad;}
+
+ Float_t GetMinClustersInTrack() const {return fgkMinClustersInTrack;}
+ Float_t GetMinClustersInSeed() const {return fgkMinClustersInSeed;}
+ Float_t GetMaxSeedDeltaZ() const {return fgkMaxSeedDeltaZ;}
+ Float_t GetMaxSeedVertexZ() const {return fgkMaxSeedVertexZ;}
// x <-> timebin conversions useful in analysis macros
Double_t GetX(Int_t sec, Int_t plane, Int_t local_tb) const;
// ***************** internal class *******************
public:
AliTRDpropagationLayer(Double_t x, Double_t dx, Double_t rho,
- Double_t x0, Int_t tb_index);
+ Double_t x0, Int_t tb_index);
~AliTRDpropagationLayer() {
if(fTimeBinIndex >= 0) { delete[] fClusters; delete[] fIndex; }
Double_t GetX0() const { return fX0; }
Int_t GetTimeBinIndex() const { return fTimeBinIndex; }
void GetPropagationParameters(Double_t y, Double_t z,
- Double_t &dx, Double_t &rho, Double_t &x0,
+ Double_t &dx, Double_t &rho, Double_t &x0,
Bool_t &lookForCluster) const;
Int_t Find(Double_t y) const;
void SetZmax(Int_t cham, Double_t center, Double_t w)
Double_t GetZc(Int_t c) const { return fZc[c]; }
void SetHole(Double_t Zmax, Double_t Ymax,
- Double_t rho = 1.29e-3, Double_t x0 = 36.66,
- Double_t Yc = 0, Double_t Zc = 0);
-
+ Double_t rho = 1.29e-3, Double_t x0 = 36.66,
+ Double_t Yc = 0, Double_t Zc = 0);
+
+ Bool_t IsSensitive() {return (fTimeBinIndex>=0)? kTRUE: kFALSE;}
+
void Clear() {for(Int_t i=0; i<fN; i++) fClusters[i] = NULL; fN = 0;}
private:
Int_t FollowProlongation(AliTRDtrack& t, Int_t rf);
Int_t FollowBackProlongation(AliTRDtrack& t);
+ //Int_t FolowRefitInward(AliTRDtrack *seed, AliTPCtrack *track);
Int_t PropagateToTPC(AliTRDtrack& t);
Int_t PropagateToOuterPlane(AliTRDtrack& t, Double_t x);
protected:
- Int_t fEvent; // Event number
-
AliTRDgeometry *fGeom; // Pointer to TRD geometry
AliTRDparameter *fPar;
Float_t fSZ2corr; // Correction coefficient for
// cluster SigmaZ2
- static const Float_t fSeedGap; // Distance between inner and outer
+ static const Float_t fgkSeedGap; // Distance between inner and outer
// time bin in seeding
- // (fraction of all time bins)
+ // (fraction of all time bins)
- static const Float_t fSeedStep; // Step in iterations
- static const Float_t fSeedDepth; // Fraction of TRD allocated for seeding
- static const Float_t fSkipDepth; // Fraction of TRD which can be skipped
+ static const Float_t fgkSeedStep; // Step in iterations
+ static const Float_t fgkSeedDepth; // Fraction of TRD allocated fgkor seeding
+ static const Float_t fgkSkipDepth; // Fraction of TRD which can be skipped
// in track prolongation
Int_t fTimeBinsPerPlane; // number of sensitive timebins per plane
Int_t fMaxGap; // max gap (in time bins) in the track
// in track prolongation
- static const Double_t fMaxChi2; // max increment in track chi2
+ static const Double_t fgkMaxChi2; // max increment in track chi2
- static const Float_t fMinClustersInTrack; // min number of clusters in track
+ static const Float_t fgkMinClustersInTrack; // min number of clusters in track
// out of total timebins
- static const Float_t fMinFractionOfFoundClusters; // min found clusters
+ static const Float_t fgkMinFractionOfFoundClusters; // min fgkound clusters
// out of expected
- static const Float_t fMinClustersInSeed; // min fraction of clusters in seed
- static const Float_t fMaxSeedDeltaZ; // max dZ in MakeSeeds
- static const Float_t fMaxSeedDeltaZ12; // max abs(z1-z2) in MakeSeeds
- static const Float_t fMaxSeedC; // max initial curvature in MakeSeeds
- static const Float_t fMaxSeedTan; // max initial Tangens(lambda) in MakeSeeds
- static const Float_t fMaxSeedVertexZ; // max vertex Z in MakeSeeds
- static const Double_t fSeedErrorSY; // sy parameter in MakeSeeds
- static const Double_t fSeedErrorSY3; // sy3 parameter in MakeSeeds
- static const Double_t fSeedErrorSZ; // sz parameter in MakeSeeds
- static const Float_t fLabelFraction; // min fraction of same label
- static const Float_t fWideRoad; // max road width in FindProlongation
+ static const Float_t fgkMinClustersInSeed; // min fgkraction of clusters in seed
+ static const Float_t fgkMaxSeedDeltaZ; // max dZ in MakeSeeds
+ static const Float_t fgkMaxSeedDeltaZ12; // max abs(z1-z2) in MakeSeeds
+ static const Float_t fgkMaxSeedC; // max initial curvature in MakeSeeds
+ static const Float_t fgkMaxSeedTan; // max initial Tangens(lambda) in MakeSeeds
+ static const Float_t fgkMaxSeedVertexZ; // max vertex Z in MakeSeeds
+ static const Double_t fgkSeedErrorSY; // sy parameter in MakeSeeds
+ static const Double_t fgkSeedErrorSY3; // sy3 parameter in MakeSeeds
+ static const Double_t fgkSeedErrorSZ; // sz parameter in MakeSeeds
+ static const Float_t fgkLabelFraction; // min fgkraction of same label
+ static const Float_t fgkWideRoad; // max road width in FindProlongation
Bool_t fVocal;
Bool_t fAddTRDseeds;
+ Bool_t fNoTilt;
+
+
+ Bool_t AdjustSector(AliTRDtrack *track);
+
+
+ // Barrel tracks [SR, 03.04.2003]
+
+ static const Int_t kFirstPlane; // Id of the first (innermost) reference plane
+ static const Int_t kLastPlane; // Id of the last (outermost) reference plane
+
+ void SetBarrelTree(const char *mode);
+ void StoreBarrelTrack(AliTRDtrack *ps, Int_t refPlane, Int_t isIn);
+
+ TFile *fBarrelFile;
+ TTree *fBarrelTree;
+ TClonesArray *fBarrelArray;
+ AliBarrelTrack *fBarrelTrack;
+
+
ClassDef(AliTRDtracker,1) // manager base class
};