ROOT logo
AliRoot » ITS » AliITStrackerMI

class AliITStrackerMI: public AliTracker

               Implementation of the ITS tracker class
    It reads AliITSRecPoint clusters and creates AliITStrackMI tracks
                   and fills with them the ESD
          Origin: Marian Ivanov, CERN, Marian.Ivanov@cern.ch
          Current support and development:
                     Andrea Dainese, andrea.dainese@lnl.infn.it
     dE/dx analysis by: Boris Batyunya, JINR, Boris.Batiounia@cern.ch
     Params moved to AliITSRecoParam by: Andrea Dainese, INFN
     Material budget from TGeo by: Ludovic Gaudichet & Andrea Dainese, INFN

Function Members (Methods)

public:
AliITStrackerMI()
AliITStrackerMI(const Char_t* geom)
virtual~AliITStrackerMI()
voidTObject::AbstractMethod(const char* method) const
virtual voidTObject::AppendPad(Option_t* option = "")
virtual voidTObject::Browse(TBrowser* b)
static TClass*Class()
virtual const char*TObject::ClassName() const
virtual voidTObject::Clear(Option_t* = "")
virtual TObject*TObject::Clone(const char* newname = "") const
virtual Int_tClusters2Tracks(AliESDEvent* event)
virtual Int_tAliTracker::Clusters2TracksHLT(AliESDEvent* event, const AliESDEvent*)
virtual Int_tTObject::Compare(const TObject* obj) const
virtual voidTObject::Copy(TObject& object) const
static Int_tCorrectForTPCtoITSDeadZoneMaterial(AliITStrackMI* t)
virtual voidTObject::Delete(Option_t* option = "")MENU
virtual Int_tTObject::DistancetoPrimitive(Int_t px, Int_t py)
virtual voidTObject::Draw(Option_t* option = "")
virtual voidTObject::DrawClass() constMENU
virtual TObject*TObject::DrawClone(Option_t* option = "") constMENU
virtual voidTObject::Dump() constMENU
virtual voidTObject::Error(const char* method, const char* msgfmt) const
virtual voidTObject::Execute(const char* method, const char* params, Int_t* error = 0)
virtual voidTObject::Execute(TMethod* method, TObjArray* params, Int_t* error = 0)
virtual voidTObject::ExecuteEvent(Int_t event, Int_t px, Int_t py)
virtual voidTObject::Fatal(const char* method, const char* msgfmt) const
virtual voidFillClusterArray(TObjArray* array) const
static voidAliTracker::FillResiduals(const AliExternalTrackParam* t, const AliCluster* c, Bool_t updated = kTRUE)
static voidAliTracker::FillResiduals(const AliExternalTrackParam* t, Double_t* p, Double_t* cov, UShort_t id, Bool_t updated = kTRUE)
Int_tFindClusterOfTrack(int label, int lr, int* store) const
virtual TObject*TObject::FindObject(const char* name) const
virtual TObject*TObject::FindObject(const TObject* obj) const
static Double_tAliTrackerBase::FitTrack(AliExternalTrackParam* trackParam, AliTrackPointArray* pointArray, Double_t mass, Double_t maxStep)
voidFlagFakes(const TObjArray& itsTracks)
voidFollowProlongationTree(AliITStrackMI* otrack, Int_t esdindex, Bool_t constrain)
Int_tForceSkippingOfLayer(Int_t l) const
TObjArray*GetBestHypothesys()
static voidAliTrackerBase::GetBxByBz(const Double_t* r, Double_t* b)
static Double_tAliTrackerBase::GetBz()
static Double_tAliTrackerBase::GetBz(const Double_t* r)
virtual AliCluster*GetCluster(Int_t index) const
AliITSRecPoint*GetClusterLayer(Int_t layn, Int_t ncl) const
voidGetDCASigma(const AliITStrackMI* track, Float_t& sigmarfi, Float_t& sigmaz)
TTreeSRedirector*GetDebugStreamer() const
AliITStrackerMI::AliITSdetector&GetDetector(Int_t layer, Int_t n) const
virtual Option_t*TObject::GetDrawOption() const
static Long_tTObject::GetDtorOnly()
const AliEventInfo*AliTracker::GetEventInfo() const
virtual const char*TObject::GetIconName() const
AliITStrackerMI::AliITSlayer&GetLayer(Int_t layer) const
virtual const char*TObject::GetName() const
Int_tGetNearestLayer(const Double_t* xr) const
Int_tGetNumberOfClustersLayer(Int_t layn) const
virtual char*TObject::GetObjectInfo(Int_t px, Int_t py) const
static Bool_tTObject::GetObjectStat()
virtual Option_t*TObject::GetOption() const
TObjArray*GetOriginal()
virtual AliPlaneEff*GetPlaneEff()
Double_tGetPredictedChi2MI(AliITStrackMI* track, const AliITSRecPoint* cluster, Int_t layer)
static TObjArray**AliTracker::GetResidualsArray()
Double_tAliTrackerBase::GetSigmaX() const
Double_tAliTrackerBase::GetSigmaY() const
Double_tAliTrackerBase::GetSigmaZ() const
virtual const char*TObject::GetTitle() const
TObjArray*GetTrackHypothesys()
virtual Bool_tGetTrackPoint(Int_t index, AliTrackPoint& p) const
virtual Bool_tGetTrackPointTrackingError(Int_t index, AliTrackPoint& p, const AliESDtrack* t)
static Double_tAliTrackerBase::GetTrackPredictedChi2(AliExternalTrackParam* track, Double_t mass, Double_t step, const AliExternalTrackParam* backup)
virtual UInt_tTObject::GetUniqueID() const
Double_tAliTrackerBase::GetX() const
Double_tAliTrackerBase::GetY() const
Double_tAliTrackerBase::GetZ() const
virtual Bool_tTObject::HandleTimer(TTimer* timer)
virtual ULong_tTObject::Hash() const
virtual voidTObject::Info(const char* method, const char* msgfmt) const
virtual Bool_tTObject::InheritsFrom(const char* classname) const
virtual Bool_tTObject::InheritsFrom(const TClass* cl) const
virtual voidTObject::Inspect() constMENU
voidTObject::InvertBit(UInt_t f)
virtual TClass*IsA() const
virtual Bool_tTObject::IsEqual(const TObject* obj) const
virtual Bool_tTObject::IsFolder() const
Bool_tTObject::IsOnHeap() const
virtual Bool_tTObject::IsSortable() const
Bool_tTObject::IsZombie() const
virtual Int_tLoadClusters(TTree* cf)
virtual voidTObject::ls(Option_t* option = "") const
static Double_tAliTrackerBase::MakeC(Double_t x1, Double_t y1, Double_t x2, Double_t y2, Double_t x3, Double_t y3)
static AliExternalTrackParam*AliTrackerBase::MakeSeed(AliTrackPoint& point0, AliTrackPoint& point1, AliTrackPoint& point2)
static Double_tAliTrackerBase::MakeSnp(Double_t x1, Double_t y1, Double_t x2, Double_t y2, Double_t x3, Double_t y3)
static Double_tAliTrackerBase::MakeTgl(Double_t x1, Double_t y1, Double_t x2, Double_t y2, Double_t z1, Double_t z2)
static Double_tAliTrackerBase::MakeTgl(Double_t x1, Double_t y1, Double_t x2, Double_t y2, Double_t z1, Double_t z2, Double_t c)
voidTObject::MayNotUse(const char* method) const
static Double_tAliTrackerBase::MeanMaterialBudget(const Double_t* start, const Double_t* end, Double_t* mparam)
virtual Bool_tTObject::Notify()
voidTObject::Obsolete(const char* method, const char* asOfVers, const char* removedFromVers) const
static voidTObject::operator delete(void* ptr)
static voidTObject::operator delete(void* ptr, void* vp)
static voidTObject::operator delete[](void* ptr)
static voidTObject::operator delete[](void* ptr, void* vp)
void*TObject::operator new(size_t sz)
void*TObject::operator new(size_t sz, void* vp)
void*TObject::operator new[](size_t sz)
void*TObject::operator new[](size_t sz, void* vp)
virtual voidTObject::Paint(Option_t* option = "")
virtual voidTObject::Pop()
virtual Int_tAliTracker::PostProcess(AliESDEvent*)
virtual voidTObject::Print(Option_t* option = "") const
virtual Int_tPropagateBack(AliESDEvent* event)
static Bool_tAliTrackerBase::PropagateTrackTo(AliExternalTrackParam* track, Double_t x, Double_t m, Double_t maxStep, Bool_t rotateTo = kTRUE, Double_t maxSnp = 0.8, Int_t sign = 0, Bool_t addTimeStep = kFALSE, Bool_t correctMaterialBudget = kTRUE)
static Int_tAliTrackerBase::PropagateTrackTo2(AliExternalTrackParam* track, Double_t x, Double_t m, Double_t maxStep, Bool_t rotateTo = kTRUE, Double_t maxSnp = 0.8, Int_t sign = 0, Bool_t addTimeStep = kFALSE, Bool_t correctMaterialBudget = kTRUE)
static Bool_tAliTrackerBase::PropagateTrackToBxByBz(AliExternalTrackParam* track, Double_t x, Double_t m, Double_t maxStep, Bool_t rotateTo = kTRUE, Double_t maxSnp = 0.8, Int_t sign = 0, Bool_t addTimeStep = kFALSE)
virtual Int_tTObject::Read(const char* name)
virtual voidTObject::RecursiveRemove(TObject* obj)
Bool_tRefitAt(Double_t x, AliITStrackMI* track, const AliITStrackMI* clusters, Bool_t extra = kFALSE, Bool_t planeeff = kFALSE)
Bool_tRefitAt(Double_t x, AliITStrackMI* track, const Int_t* clusters, Bool_t extra = kFALSE, Bool_t planeeff = kFALSE)
virtual Int_tRefitInward(AliESDEvent* event)
voidTObject::ResetBit(UInt_t f)
virtual voidTObject::SaveAs(const char* filename = "", Option_t* option = "") constMENU
virtual voidTObject::SavePrimitive(basic_ostream<char,char_traits<char> >& out, Option_t* option = "")
voidTObject::SetBit(UInt_t f)
voidTObject::SetBit(UInt_t f, Bool_t set)
voidSetCurrentEsdTrack(Int_t i)
voidSetDetTypeRec(const AliITSDetTypeRec* detTypeRec)
virtual voidTObject::SetDrawOption(Option_t* option = "")MENU
static voidTObject::SetDtorOnly(void* obj)
voidAliTracker::SetEventInfo(AliEventInfo* evInfo)
static voidAliTracker::SetFillResiduals(AliRecoParam::EventSpecie_t es, Bool_t flag = kTRUE)
voidSetForceSkippingOfLayer()
voidSetLastLayerToTrackTo(Int_t l = 0)
static voidTObject::SetObjectStat(Bool_t stat)
static voidAliTracker::SetResidualsArray(TObjArray** arr)
virtual voidTObject::SetUniqueID(UInt_t uid)
voidSetupFirstPass(const Int_t* flags, const Double_t* cuts = 0)
voidSetupSecondPass(const Int_t* flags, const Double_t* cuts = 0)
voidAliTrackerBase::SetVertex(const Double_t* xyz, const Double_t* ers = 0)
virtual voidShowMembers(TMemberInspector&)
virtual voidStreamer(TBuffer&)
voidStreamerNVirtual(TBuffer& ClassDef_StreamerNVirtual_b)
virtual voidTObject::SysError(const char* method, const char* msgfmt) const
Bool_tTObject::TestBit(UInt_t f) const
Int_tTObject::TestBits(UInt_t f) const
static Bool_tAliTrackerBase::UniformField()
virtual voidUnloadClusters()
Int_tUpdateMI(AliITStrackMI* track, const AliITSRecPoint* cl, Double_t chi2, Int_t layer) const
static voidAliTrackerBase::UpdateTrack(AliExternalTrackParam&, const AliExternalTrackParam&)
virtual voidUseClusters(const AliKalmanTrack* t, Int_t from = 0) const
virtual voidTObject::UseCurrentStyle()
virtual voidTObject::Warning(const char* method, const char* msgfmt) const
virtual Int_tTObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0)
virtual Int_tTObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0) const
protected:
voidAddTrackHypothesys(AliITStrackMI* track, Int_t esdindex)
voidBuildMaterialLUT(TString material)
Int_tCheckDeadZone(AliITStrackMI* track, Int_t ilayer, Int_t idet, Double_t dz, Double_t dy, Bool_t noClusters = kFALSE) const
Int_tCheckSkipLayer(const AliITStrackMI* track, Int_t ilayer, Int_t idet) const
Bool_tComputeRoad(AliITStrackMI* track, Int_t ilayer, Int_t idet, Double_t& zmin, Double_t& zmax, Double_t& ymin, Double_t& ymax) const
voidCookdEdx(AliITStrackMI* track)
virtual voidCookLabel(AliKalmanTrack* t, Float_t wrong) const
voidCookLabel(AliITStrackMI* t, Float_t wrong) const
Int_tCorrectForLayerMaterial(AliITStrackMI* t, Int_t layerindex, Double_t* oldGlobXYZ, TString direction = "inward")
Int_tCorrectForPipeMaterial(AliITStrackMI* t, TString direction = "inward")
Int_tCorrectForShieldMaterial(AliITStrackMI* t, TString shield, TString direction = "inward")
voidDeleteTrksMaterialLUT()
virtual voidTObject::DoError(int level, const char* location, const char* fmt, va_list va) const
AliITStrackMI*GetBest2Tracks(Int_t trackID1, Int_t treackID2, Float_t th0, Float_t th1, AliITStrackMI* original)
AliITStrackMI*GetBestHypothesys(Int_t esdindex, AliITStrackMI* original, Int_t checkmax)
voidGetBestHypothesysMIP(TObjArray& itsTracks)
Double_tGetEffectiveThickness()
Int_tGetEffectiveThicknessLbyL(Double_t* xMS, Double_t* x2x0MS)
Float_t*GetErrY(Int_t trackindex) const
Float_t*GetErrZ(Int_t trackindex) const
Double_tGetInterpolatedChi2(const AliITStrackMI* forwardtrack, const AliITStrackMI* backtrack)
Double_tGetMatchingChi2(const AliITStrackMI* track1, const AliITStrackMI* track2)
Double_tGetNormalizedChi2(AliITStrackMI* track, Int_t mode)
Float_tGetNumberOfSharedClusters(AliITStrackMI* track, Int_t id, Int_t* list, AliITSRecPoint** clist)
Float_t*GetNy(Int_t trackindex) const
Float_t*GetNz(Int_t trackindex) const
Int_tGetOverlapTrack(const AliITStrackMI* track, Int_t trackID, Int_t& shared, Int_t* clusterlist, Int_t* overlist)
Int_tGetParticleId(const AliESDtrack* track) const
Int_tGetParticleId(const AliITStrackV2* track) const
Double_tGetSPDDeadZoneProbability(Double_t zpos, Double_t zerr) const
Double_tGetTruncatedChi2(const AliITStrackMI* track, Float_t fac)
Float_t*GetWeight(Int_t index)
Bool_tIsOKForPlaneEff(const AliITStrackMI* track, const Int_t* clusters, Int_t ilayer)
Bool_tLocalModuleCoord(Int_t ilayer, Int_t idet, const AliITStrackMI* track, Float_t& xloc, Float_t& zloc) const
voidMakeCoefficients(Int_t ntracks)
voidMakeTrksMaterialLUT(Int_t ntracks)
voidTObject::MakeZombie()
Double_tNormalizedChi2(AliITStrackMI* track, Int_t layer)
voidReadBadFromDetTypeRec()
voidRegisterClusterTracks(const AliITStrackMI* track, Int_t id)
voidResetBestTrack()
voidResetTrackToFollow(const AliITStrackMI& t)
voidSignDeltas(const TObjArray* clusterArray, Float_t zv)
voidSortTrackHypothesys(Int_t esdindex, Int_t maxcut, Int_t mode)
voidUnRegisterClusterTracks(const AliITStrackMI* track, Int_t id)
voidUpdateESDtrack(AliITStrackMI* track, ULong_t flags) const
voidUseTrackForPlaneEff(const AliITStrackMI* track, Int_t ilayer)
private:
AliITStrackerMI(const AliITStrackerMI& tracker)
AliITStrackerMI&operator=(const AliITStrackerMI& tracker)

Data Members

protected:
Bool_tfAfterV0indicates V0 founded
TObjArrayfBestHypothesys! array with track hypothesys- ARRAY is the owner of tracks- MI
AliITStrackMIfBestTrack"best" track
Int_tfBestTrackIndex[100000]! index of the best track
Float_t*fCoefficients! working array with errors and mean cluster shape
Int_tfConstraint[2]constraint flags
Int_tfCurrentEsdTrack! current esd track - MI
TTreeSRedirector*fDebugStreamer!debug streamer
AliESDEvent*fEsd! pointer to the ESD event
Bool_tfFlagFakesrequest fakes flagging
Int_tfForceSkippingOfLayer[6]layers to be skipped
Int_tfIindex of the current layer
AliITSChannelStatus*fITSChannelStatus! bitmaps with channel status for SPD and SDD
AliITSPIDResponse*fITSPid! parameters for ITS pid
Int_tfLastLayerToTrackTothe innermost layer to track to
Int_tfNtracksnumber of tracks to prolong
TObjArrayfOriginal! array with seeds from the TPC
Int_tfPasscurrent pass through the data
AliITSPlaneEff*fPlaneEff! Pointer to the ITS plane efficicency
Bool_t*fSPDChipIntPlaneEff! Map of the SPD chips already intersected by a track (for FO studies)
Double_tfSPDdetzcentre[4]centres of SPD modules in z
Bool_tfSelectBestMIP03use Chi2MIP[0]*Chi2MIP[3] in hypothesis analysis instead of Chi2MIP[0]
TObjArrayfTrackHypothesys! array with track hypothesys- ARRAY is the owner of tracks- MI
AliITStrackMIfTrackToFollowfollowed track
TStringfTrackingPhasecurrent tracking phase
AliITStrackMIfTracks[6]track estimations at the ITS layers
Bool_tfUseImproveKalmanuse Kalman version of Improve
Int_tfUseTGeouse TGeo to get material budget
static AliITStrackerMI::AliITSlayerfgLayers[6]ITS layers
const AliITSDetTypeRec*fkDetTypeRec! ITS det type rec, from AliITSReconstructor
Float_tfxOverX0Layer[6]material budget
Float_t*fxOverX0LayerTrks! material budget
Float_tfxOverX0Pipematerial budget
Float_t*fxOverX0PipeTrks! material budget
Float_tfxOverX0Shield[2]material budget
Float_t*fxOverX0ShieldTrks! material budget
Float_tfxTimesRhoLayer[6]material budget
Float_t*fxTimesRhoLayerTrks! material budget
Float_tfxTimesRhoPipematerial budget
Float_t*fxTimesRhoPipeTrks! material budget
Float_tfxTimesRhoShield[2]material budget
Float_t*fxTimesRhoShieldTrks! material budget

Class Charts

Inheritance Chart:
TObject
AliTrackerBase
AliTracker
AliITStrackerMI
AliITStrackerSA

Function documentation

AliITStrackerMI()
Default constructor
AliITStrackerMI(const Char_t* geom)
This is the AliITStrackerMI constructor

~AliITStrackerMI()
destructor

void ReadBadFromDetTypeRec()
This function read ITS bad detectors, chips, channels from AliITSDetTypeRec
i.e. from OCDB

Int_t LoadClusters(TTree* cf)
This function loads ITS clusters

void UnloadClusters()
This function unloads ITS clusters

void FillClusterArray(TObjArray* array) const
 Publishes all pointers to clusters known to the tracker into the
 passed object array.
 The ownership is not transfered - the caller is not expected to delete
 the clusters.

Int_t CorrectForTPCtoITSDeadZoneMaterial(AliITStrackMI* t)
 Correction for the material between the TPC and the ITS

Int_t Clusters2Tracks(AliESDEvent* event)
 This functions reconstructs ITS tracks
 The clusters must be already loaded !

Int_t PropagateBack(AliESDEvent* event)
 This functions propagates reconstructed ITS tracks back
 The clusters must be loaded !

Int_t RefitInward(AliESDEvent* event)
 This functions refits ITS tracks using the
 "inward propagated" TPC tracks
 The clusters must be loaded !

AliCluster * GetCluster(Int_t index) const
       Return pointer to a given cluster

Bool_t GetTrackPoint(Int_t index, AliTrackPoint& p) const
 Get track space point with index i

Bool_t GetTrackPointTrackingError(Int_t index, AliTrackPoint& p, const AliESDtrack* t)
 Get track space point with index i
 (assign error estimated during the tracking)

void FollowProlongationTree(AliITStrackMI* otrack, Int_t esdindex, Bool_t constrain)
 Follow prolongation tree


Bool_t ComputeRoad(AliITStrackMI* track, Int_t ilayer, Int_t idet, Double_t& zmin, Double_t& zmax, Double_t& ymin, Double_t& ymax) const
 This function computes the rectangular road for this track

Double_t GetEffectiveThickness()
 Returns the thickness between the current layer and the vertex (units X0)

Int_t GetEffectiveThicknessLbyL(Double_t* xMS, Double_t* x2x0MS)
 Returns the array of layers between the current layer and the vertex


Bool_t RefitAt(Double_t x, AliITStrackMI* track, const AliITStrackMI* clusters, Bool_t extra = kFALSE, Bool_t planeeff = kFALSE)
 This function refits the track "track" at the position "x" using
 the clusters from "clusters"
 If "extra"==kTRUE,
    the clusters from overlapped modules get attached to "track"
 If "planeff"==kTRUE,
    special approach for plane efficiency evaluation is applyed

Bool_t RefitAt(Double_t x, AliITStrackMI* track, const Int_t* clusters, Bool_t extra = kFALSE, Bool_t planeeff = kFALSE)
 This function refits the track "track" at the position "x" using
 the clusters from array
 If "extra"==kTRUE,
    the clusters from overlapped modules get attached to "track"
 If "planeff"==kTRUE,
    special approach for plane efficiency evaluation is applyed

Double_t GetNormalizedChi2(AliITStrackMI* track, Int_t mode)
 calculate normalized chi2
  return NormalizedChi2(track,0);
Double_t GetMatchingChi2(const AliITStrackMI* track1, const AliITStrackMI* track2)
 return matching chi2 between two tracks
Double_t GetSPDDeadZoneProbability(Double_t zpos, Double_t zerr) const
  return probability that given point (characterized by z position and error)
  is in SPD dead zone
     This method assumes that fSPDdetzcentre is ordered from -z to +z

Double_t GetTruncatedChi2(const AliITStrackMI* track, Float_t fac)
 calculate normalized chi2
Double_t GetInterpolatedChi2(const AliITStrackMI* forwardtrack, const AliITStrackMI* backtrack)
 calculate normalized chi2
  if (forwardtrack->fNUsed>0.3*float(forwardtrack->GetNumberOfClusters())) return 10000;
Float_t * GetWeight(Int_t index)
       Return pointer to a given cluster

void RegisterClusterTracks(const AliITStrackMI* track, Int_t id)
 register track to the list

void UnRegisterClusterTracks(const AliITStrackMI* track, Int_t id)
 unregister track from the list
Float_t GetNumberOfSharedClusters(AliITStrackMI* track, Int_t id, Int_t* list, AliITSRecPoint** clist)
get number of shared clusters

Int_t GetOverlapTrack(const AliITStrackMI* track, Int_t trackID, Int_t& shared, Int_t* clusterlist, Int_t* overlist)
 find first shared track

 mean  number of clusters
AliITStrackMI * GetBest2Tracks(Int_t trackID1, Int_t treackID2, Float_t th0, Float_t th1, AliITStrackMI* original)
 try to find track hypothesys without conflicts
 with minimal chi2;
void UseClusters(const AliKalmanTrack* t, Int_t from = 0) const
 This function marks clusters assigned to the track

void AddTrackHypothesys(AliITStrackMI* track, Int_t esdindex)
 add track to the list of hypothesys

void SortTrackHypothesys(Int_t esdindex, Int_t maxcut, Int_t mode)
 compress array of track hypothesys
 keep only maxsize best hypothesys

AliITStrackMI * GetBestHypothesys(Int_t esdindex, AliITStrackMI* original, Int_t checkmax)
 try to find best hypothesy
 currently - minimal chi2 of track+backpropagated track+matching to the tpc track
 RS: optionally changing this to product of Chi2MIP(0)*Chi2MIP(3) == (chi2*chi2_interpolated)

void GetBestHypothesysMIP(TObjArray& itsTracks)
 get "best" hypothesys

void FlagFakes(const TObjArray& itsTracks)
 RS: flag those tracks which are suxpected to have fake clusters

void CookLabel(AliITStrackMI* t, Float_t wrong) const
This function "cooks" a track label. If label<0, this track is fake.

void CookdEdx(AliITStrackMI* track)
 Fill the dE/dx in this track

void MakeCoefficients(Int_t ntracks)
 Create some arrays

Double_t GetPredictedChi2MI(AliITStrackMI* track, const AliITSRecPoint* cluster, Int_t layer)
 Compute predicted chi2

 Take into account the mis-alignment (bring track to cluster plane)
Int_t UpdateMI(AliITStrackMI* track, const AliITSRecPoint* cl, Double_t chi2, Int_t layer) const
 Update ITS track

void GetDCASigma(const AliITStrackMI* track, Float_t& sigmarfi, Float_t& sigmaz)
DCA sigmas parameterization
to be paramterized using external parameters in future


void SignDeltas(const TObjArray* clusterArray, Float_t zv)
 Clusters from delta electrons?

void UpdateESDtrack(AliITStrackMI* track, ULong_t flags) const
 Update ESD track

Int_t GetNearestLayer(const Double_t* xr) const
 Get nearest upper layer close to the point xr.
 rough approximation

void BuildMaterialLUT(TString material)
 Fill a look-up table with mean material

Int_t CorrectForPipeMaterial(AliITStrackMI* t, TString direction = "inward")
 Propagate beyond beam pipe and correct for material
 (material budget in different ways according to fUseTGeo value)
 Add time if going outward (PropagateTo or PropagateToTGeo)

 Define budget mode:
 0: material from AliITSRecoParam (hard coded)
 1: material from TGeo in one step (on the fly)
 2: material from lut
 3: material from TGeo in one step (same for all hypotheses)
Int_t CorrectForShieldMaterial(AliITStrackMI* t, TString shield, TString direction = "inward")
 Propagate beyond SPD or SDD shield and correct for material
 (material budget in different ways according to fUseTGeo value)
 Add time if going outward (PropagateTo or PropagateToTGeo)

 Define budget mode:
 0: material from AliITSRecoParam (hard coded)
 1: material from TGeo in steps of X cm (on the fly)
    X = AliITSRecoParam::GetStepSizeTGeo()
 2: material from lut
 3: material from TGeo in one step (same for all hypotheses)
Int_t CorrectForLayerMaterial(AliITStrackMI* t, Int_t layerindex, Double_t* oldGlobXYZ, TString direction = "inward")
 Propagate beyond layer and correct for material
 (material budget in different ways according to fUseTGeo value)
 Add time if going outward (PropagateTo or PropagateToTGeo)

 Define budget mode:
 0: material from AliITSRecoParam (hard coded)
 1: material from TGeo in stepsof X cm (on the fly)
    X = AliITSRecoParam::GetStepSizeTGeo()
 2: material from lut
 3: material from TGeo in one step (same for all hypotheses)
void MakeTrksMaterialLUT(Int_t ntracks)
 Initialize LUT for storing material for each prolonged track

void DeleteTrksMaterialLUT()
 Delete LUT for storing material for each prolonged track

void SetForceSkippingOfLayer()
 Check if we are forced to skip layers
 either we set to skip them in RecoParam
 or they were off during data-taking

Int_t CheckSkipLayer(const AliITStrackMI* track, Int_t ilayer, Int_t idet) const
 This method is used to decide whether to allow a prolongation
 without clusters, because we want to skip the layer.
 In this case the return value is > 0:
 return 1: the user requested to skip a layer
 return 2: track outside z acceptance

Int_t CheckDeadZone(AliITStrackMI* track, Int_t ilayer, Int_t idet, Double_t dz, Double_t dy, Bool_t noClusters = kFALSE) const
 This method is used to decide whether to allow a prolongation
 without clusters, because there is a dead zone in the road.
 In this case the return value is > 0:
 return 1: dead zone at z=0,+-7cm in SPD
     This method assumes that fSPDdetzcentre is ordered from -z to +z
 return 2: all road is "bad" (dead or noisy) from the OCDB
 return 3: at least a chip is "bad" (dead or noisy) from the OCDB
 return 4: at least a single channel is "bad" (dead or noisy) from the OCDB

 check dead zones at z=0,+-7cm in the SPD
Bool_t LocalModuleCoord(Int_t ilayer, Int_t idet, const AliITStrackMI* track, Float_t& xloc, Float_t& zloc) const
 Gives position of track in local module ref. frame

Bool_t IsOKForPlaneEff(const AliITStrackMI* track, const Int_t* clusters, Int_t ilayer)
 Method to be optimized further:
 Aim: decide whether a track can be used for PlaneEff evaluation
      the decision is taken based on the track quality at the layer under study
      no information on the clusters on this layer has to be used
      The criterium is to reject tracks at boundaries between basic block (e.g. SPD chip)
      the cut is done on number of sigmas from the boundaries

  Input: Actual track, layer [0,5] under study
  Output: none
  Return: kTRUE if this is a good track

 it will apply a pre-selection to obtain good quality tracks.
 Here also  you will have the possibility to put a control on the
 impact point of the track on the basic block, in order to exclude border regions
 this will be done by calling a proper method of the AliITSPlaneEff class.

 input: AliITStrackMI* track, ilayer= layer number [0,5]
 return: Bool_t   -> kTRUE if usable track, kFALSE if not usable.

void UseTrackForPlaneEff(const AliITStrackMI* track, Int_t ilayer)
 This Method has to be optimized! For the time-being it uses the same criteria
 as those used in the search of extra clusters for overlapping modules.

 Method Purpose: estabilish whether a track has produced a recpoint or not
                 in the layer under study (For Plane efficiency)

 inputs: AliITStrackMI* track  (pointer to a usable track)
 outputs: none
 side effects: update (by 1 count) the Plane Efficiency statistics of the basic block
               traversed by this very track. In details:
               - if a cluster can be associated to the track then call
                  AliITSPlaneEff::UpDatePlaneEff(key,kTRUE);
               - if not, the AliITSPlaneEff::UpDatePlaneEff(key,kFALSE) is called

Int_t FindClusterOfTrack(int label, int lr, int* store) const
 find the MC cluster for the label
void SetupFirstPass(const Int_t* flags, const Double_t* cuts = 0)
 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"
void SetupSecondPass(const Int_t* flags, const Double_t* cuts = 0)
 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"
void CookLabel(AliKalmanTrack* t, Float_t wrong) const
This function "cooks" a track label. If label<0, this track is fake.

Double_t NormalizedChi2(AliITStrackMI* track, Int_t layer)
get normalize chi2

AliITStrackerMI()
AliITSRecPoint * GetClusterLayer(Int_t layn, Int_t ncl) const
{return fgLayers[layn].GetCluster(ncl);}
Int_t GetNumberOfClustersLayer(Int_t layn) const
{return fgLayers[layn].GetNumberOfClusters();}
void SetLastLayerToTrackTo(Int_t l = 0)
AliPlaneEff * GetPlaneEff()
void SetDetTypeRec(const AliITSDetTypeRec* detTypeRec)
TObjArray* GetTrackHypothesys()
{return &fTrackHypothesys;}
TObjArray* GetBestHypothesys()
{return &fBestHypothesys;}
TObjArray* GetOriginal()
{return &fOriginal;}
TTreeSRedirector * GetDebugStreamer() const
{return fDebugStreamer;}
Int_t ForceSkippingOfLayer(Int_t l) const
 methods for debugging (RS) >>
{ return fForceSkippingOfLayer[l]; }
AliITSdetector & operator=(const AliITStrackerMI& tracker)
AliITSdetector & GetDetector(Int_t n)
{ return fDetectors[n]; }
AliITStrackerMI::AliITSlayer & GetLayer(Int_t layer) const
void SetCurrentEsdTrack(Int_t i)
void ResetBestTrack()
void ResetTrackToFollow(const AliITStrackMI& t)
Int_t GetParticleId(const AliESDtrack* track) const
Int_t GetParticleId(const AliITStrackV2* track) const
Float_t * GetErrY(Int_t trackindex) const
{return &fCoefficients[trackindex*48];}
Float_t * GetErrZ(Int_t trackindex) const
{return &fCoefficients[trackindex*48+12];}
Float_t * GetNy(Int_t trackindex) const
{return &fCoefficients[trackindex*48+24];}
Float_t * GetNz(Int_t trackindex) const
{return &fCoefficients[trackindex*48+36];}