1 #ifndef ALIITSTRACKERHLT_H
2 #define ALIITSTRACKERHLT_H
3 /* Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
8 class TTreeSRedirector;
12 class AliITSChannelStatus;
13 class AliITSDetTypeRec;
14 class AliITSRecoParam;
15 #include "AliHLTITSTrack.h"
16 #include "AliHLTITSDetector.h"
17 #include "AliHLTITSLayer.h"
19 #include <TObjArray.h>
21 #include "AliITSRecPoint.h"
22 #include "AliTracker.h"
23 #include "AliHLTITSTrack.h"
25 //-------------------------------------------------------------------------
26 class AliITStrackerHLT : public AliTracker {
30 void StartLoadClusters( Int_t NClusters );
31 void LoadCluster( const AliITSRecPoint &cluster);
32 void Reconstruct( AliExternalTrackParam *tracksTPC, int *tracksTPCLab, int nTPCTracks );
34 AliHLTITSTrack *Tracks() const { return fTracks;}
35 Int_t NTracks() const { return fNTracks;}
36 AliHLTITSTrack *ITSOutTracks() const { return fITSOutTracks;}
37 Int_t NITSOutTracks() const { return fNITSOutTracks;}
39 Bool_t TransportToX( AliExternalTrackParam *t, double x ) const;
40 Bool_t TransportToPhiX( AliExternalTrackParam *t, double phi, double x ) const;
43 AliITStrackerHLT(const Char_t *geom);
44 virtual ~AliITStrackerHLT();
45 AliCluster *GetCluster(Int_t index) const;
46 virtual Bool_t GetTrackPoint(Int_t index, AliTrackPoint& p) const;
47 virtual Bool_t GetTrackPointTrackingError(Int_t index,
48 AliTrackPoint& p, const AliESDtrack *t);
49 AliITSRecPoint *GetClusterLayer(Int_t layn, Int_t ncl) const
50 {return fLayers[layn].GetCluster(ncl);}
51 Int_t GetNumberOfClustersLayer(Int_t layn) const
52 {return fLayers[layn].GetNumberOfClusters();}
53 Int_t LoadClusters(TTree *cf);
54 void UnloadClusters();
56 Int_t Clusters2Tracks(AliESDEvent *event);
57 Int_t PropagateBack(AliESDEvent *event);
58 Int_t RefitInward(AliESDEvent *event);
61 static Int_t CorrectForTPCtoITSDeadZoneMaterial(AliHLTITSTrack *t);
64 AliHLTITSLayer & GetLayer(Int_t layer) const;
65 AliHLTITSDetector & GetDetector(Int_t layer, Int_t n) const {return GetLayer(layer).GetDetector(n); }
67 void FollowProlongationTree(AliHLTITSTrack * otrack);
68 Int_t FitOutward(AliHLTITSTrack * track );
75 const AliITSRecoParam *GetRecoParam() const { return fRecoParam; }
76 Bool_t ComputeRoad(AliHLTITSTrack* track,Int_t ilayer,Int_t idet,Double_t &zmin,Double_t &zmax,Double_t &ymin,Double_t &ymax) const;
79 void CookLabel(AliKalmanTrack *t,Float_t wrong) const;
80 void CookLabel(AliHLTITSTrack *t,Float_t wrong) const;
82 void BuildMaterialLUT(TString material);
84 Int_t CorrectForPipeMaterial(AliHLTITSTrack *t, bool InwardDirection=1);
85 Int_t CorrectForShieldMaterial(AliHLTITSTrack *t, Int_t shieldindex, bool InwardDirection=1);
86 Int_t CorrectForLayerMaterial(AliHLTITSTrack *t, Int_t layerindex, bool InwardDirection=1);
87 void UpdateESDtrack(AliESDtrack *tESD,AliHLTITSTrack* track, ULong_t flags) const;
89 Bool_t LocalModuleCoord(Int_t ilayer,Int_t idet,const AliHLTITSTrack *track,
90 Float_t &xloc,Float_t &zloc) const;
92 static Bool_t CheckTrack( const AliExternalTrackParam *t );
97 const AliITSRecoParam *fRecoParam; //!
99 AliHLTITSLayer* fLayers; //!
101 Double_t fSPDdetzcentre[4]; // centres of SPD modules in z
103 Int_t fUseTGeo; // use TGeo to get material budget
105 Float_t fxOverX0Pipe; // material budget
106 Float_t fxTimesRhoPipe; // material budget
107 Float_t fxOverX0Shield[2]; // material budget
108 Float_t fxTimesRhoShield[2]; // material budget
109 Float_t fxOverX0Layer[6]; // material budget
110 Float_t fxTimesRhoLayer[6]; // material budget
112 AliHLTITSTrack *fTracks; // array of its-updated tracks
113 AliHLTITSTrack *fITSOutTracks; // array of tracks, fitted outward with ITS only
114 int fNTracks;// n tracks
115 int fNITSOutTracks;// n out tracks
119 AliITSRecPoint *fClusters; //!
123 AliITStrackerHLT(const AliITStrackerHLT &tracker);
124 AliITStrackerHLT & operator=(const AliITStrackerHLT &tracker);
125 ClassDef(AliITStrackerHLT,0) //HLT ITS tracker
131 /////////////////////////////////////////////////////////
132 /////////////////////////////////////////////////////////
133 /////////////////////////////////////////////////////////
139 inline void AliITStrackerHLT::CookLabel(AliKalmanTrack *t,Float_t wrong) const {
140 //--------------------------------------------------------------------
141 //This function "cooks" a track label. If label<0, this track is fake.
142 //--------------------------------------------------------------------
143 Int_t tpcLabel=t->GetLabel();
144 if (tpcLabel<0) return;
145 AliTracker::CookLabel(t,wrong);
146 if (tpcLabel!=TMath::Abs(t->GetLabel())){
149 if (tpcLabel !=t->GetLabel()) {
150 t->SetLabel(-tpcLabel);