ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/
//
// Combine cosmic track pairs (upper, lower) and do track fitting
//
//  Xianguo Lu 
//  lu@physi.uni-heidelberg.de
//  Xianguo.Lu@cern.ch

//
/*
//in [cm]
const Double_t _TPCZMIN = -250;
const Double_t _TPCZMAX =  250;
const Double_t _TPCINR  =  84.8;
const Double_t _TPCOUR  =  246.6;
*/

#ifndef ALITPCCOSMICTRACKFIT_H
#define ALITPCCOSMICTRACKFIT_H

#ifndef TVECTOR3_H
#include "TVector3.h"
#endif

class AliTPCCosmicTrackfit
{
 public:
  AliTPCCosmicTrackfit(const Int_t dlev=0, const TString tag="test");
  
  ~AliTPCCosmicTrackfit();

  void SetRow(const Int_t shift, const Int_t step){ fRowStartShift = shift; fRowStep = step; }
  void SetX(const Double_t xmin, const Double_t xmax){ fXMin = xmin; fXMax = xmax; }

  Bool_t CombineESDtracks(AliESDtrack * &trk0, AliESDtrack *&trk1);
  Bool_t CombineTPCseedsFast(AliTPCseed * tpcseeds[], const AliExternalTrackParam * trkpars[]);
  Bool_t CombineTPCseeds(AliTPCseed * &seed0, AliTPCseed *&seed1);
  void Print() const ;
  
  //--------- getters ------------
  Bool_t IsSwap() const {return fKswap;}
  Int_t GetStatus()const{return fStatus;}
  Int_t GetFitNcls()const{return fFitNcls;}
  Int_t GetMissNcls()const{return fMissNcls;}
  Double_t GetChi2PerCluster()const{return fPreChi2;}
  Double_t GetFitLeverArm() const {return fFitLeverArm;}
  Double_t GetImpactD() const {return fImpactD;}
  Double_t GetImpactZ() const {return fImpactZ;}
  Double_t GetLeverArm()const {return fLeverArm;}
  TVector3 GetInnerClusterUp()const {return fInnerClusterUp;}
  TVector3 GetInnerClusterLow()const {return fInnerClusterLow;}

  TVector3 ImpactParameter2D() const;
  TVector3 ImpactParameter3D() const;

  Double_t MinPhi()const;

  const AliExternalTrackParam * GetTrackParamUp() const {return fTrackparUp;}
  const AliExternalTrackParam * GetTrackParamLow() const {return fTrackparLow;}
  const AliExternalTrackParam * GetIniTrackParamUp() const {return fIniTrackparUp;}
  const AliExternalTrackParam * GetIniTrackParamLow() const {return fIniTrackparLow;}

  AliExternalTrackParam * CopyTrackParamUp() const {return new AliExternalTrackParam(*fTrackparUp);}
  AliExternalTrackParam * CopyTrackParamLow() const {return new AliExternalTrackParam(*fTrackparLow);}
  AliExternalTrackParam * CopyIniTrackParamUp() const {return new AliExternalTrackParam(*fIniTrackparUp);}
  AliExternalTrackParam * CopyIniTrackParamLow() const {return new AliExternalTrackParam(*fIniTrackparLow);}

  AliTPCseed * GetTPCseedUp()   const {return fSeedUp;}
  AliTPCseed * GetTPCseedLow() const {return fSeedLow;}

  TTreeSRedirector * GetStreamer() const {return fStreamer;}

 private:
  enum CombineStatus{
    kFailGetTPCseeds=1,
    kFailNclsMin    =2,
    kFailSwapSeeds  =3,
    kFailLeverArm   =4,
    kFailMakeSeed   =5,
    kFailPropagation=6,
    kFailChi2       =7,
    kFailImpact     =8
  };
  
  AliTPCCosmicTrackfit(const AliTPCCosmicTrackfit & p);
  AliTPCCosmicTrackfit & operator=(const AliTPCCosmicTrackfit & p);

  static Double_t CutLeverArm(){ return 350;}  //minimum lever arm 350 ~ 250 * sqrt(2)
  static Double_t MaxChi2(){ return 10;}       //max. chi2/ncls

  void IniCombineESDtracks();
  Bool_t GetTPCseeds(const AliESDtrack *trk0,  const AliESDtrack *trk1);
  Bool_t CheckNcls();
  Bool_t CheckLeverArm();
  Bool_t AnaSeeds();

  void CombineTPCseeds();
  void Update();

  TTreeSRedirector *fStreamer;     //!debug streamer
  Int_t fDebugLevel;                    //debug level

  AliTPCseed * fSeedUp;                         //TPC seed of upper track
  AliTPCseed * fSeedLow;                        //TPC seed of lower track
  AliExternalTrackParam * fTrackparUp;          //track param of upper track
  AliExternalTrackParam * fTrackparLow;         //track param of lower track
  AliExternalTrackParam * fIniTrackparUp;          //track param of upper track by MakeSeed
  AliExternalTrackParam * fIniTrackparLow;         //track param of lower track by MakeSeed

  Int_t fStatus;                               //status for CombineESDtracks/CombineTPCseeds: 0-successful, otherwise fail
  Bool_t fKswap;                               //true if should be / already be swapped

  TVector3 fInnerClusterUp;                    //xyz of the inner most TPC trackpoint of the Upper track
  TVector3 fInnerClusterLow;                   //xyz of the inner most TPC trackpoint of the Lower track
  Double_t fLeverArm;                          //transverse difference between upper most and lower most clusters

  Int_t fFitNcls;                              //number of TPC clusters successful in propagation (mean of the two propagation: upwards and downwards)
  Int_t fMissNcls;                             //number of TPC clusters fail in propagation (sum of the two propagation)
  Double_t fPreChi2;                           //Predicted chi2/nfit over the two propagation
  Double_t fFitLeverArm;                       //Lever arm calculated from clusters in fitkernel
  Double_t fImpactD;                           //2d impact parameter
  Double_t fImpactZ;                           //z of impact parameter

  Int_t fRowStartShift;                        //row start shift
  Int_t fRowStep;                              //row step
  Double_t fXMin;                              //cluster X min
  Double_t fXMax;                              //cluster X max
};

#endif
 AliTPCCosmicTrackfit.h:1
 AliTPCCosmicTrackfit.h:2
 AliTPCCosmicTrackfit.h:3
 AliTPCCosmicTrackfit.h:4
 AliTPCCosmicTrackfit.h:5
 AliTPCCosmicTrackfit.h:6
 AliTPCCosmicTrackfit.h:7
 AliTPCCosmicTrackfit.h:8
 AliTPCCosmicTrackfit.h:9
 AliTPCCosmicTrackfit.h:10
 AliTPCCosmicTrackfit.h:11
 AliTPCCosmicTrackfit.h:12
 AliTPCCosmicTrackfit.h:13
 AliTPCCosmicTrackfit.h:14
 AliTPCCosmicTrackfit.h:15
 AliTPCCosmicTrackfit.h:16
 AliTPCCosmicTrackfit.h:17
 AliTPCCosmicTrackfit.h:18
 AliTPCCosmicTrackfit.h:19
 AliTPCCosmicTrackfit.h:20
 AliTPCCosmicTrackfit.h:21
 AliTPCCosmicTrackfit.h:22
 AliTPCCosmicTrackfit.h:23
 AliTPCCosmicTrackfit.h:24
 AliTPCCosmicTrackfit.h:25
 AliTPCCosmicTrackfit.h:26
 AliTPCCosmicTrackfit.h:27
 AliTPCCosmicTrackfit.h:28
 AliTPCCosmicTrackfit.h:29
 AliTPCCosmicTrackfit.h:30
 AliTPCCosmicTrackfit.h:31
 AliTPCCosmicTrackfit.h:32
 AliTPCCosmicTrackfit.h:33
 AliTPCCosmicTrackfit.h:34
 AliTPCCosmicTrackfit.h:35
 AliTPCCosmicTrackfit.h:36
 AliTPCCosmicTrackfit.h:37
 AliTPCCosmicTrackfit.h:38
 AliTPCCosmicTrackfit.h:39
 AliTPCCosmicTrackfit.h:40
 AliTPCCosmicTrackfit.h:41
 AliTPCCosmicTrackfit.h:42
 AliTPCCosmicTrackfit.h:43
 AliTPCCosmicTrackfit.h:44
 AliTPCCosmicTrackfit.h:45
 AliTPCCosmicTrackfit.h:46
 AliTPCCosmicTrackfit.h:47
 AliTPCCosmicTrackfit.h:48
 AliTPCCosmicTrackfit.h:49
 AliTPCCosmicTrackfit.h:50
 AliTPCCosmicTrackfit.h:51
 AliTPCCosmicTrackfit.h:52
 AliTPCCosmicTrackfit.h:53
 AliTPCCosmicTrackfit.h:54
 AliTPCCosmicTrackfit.h:55
 AliTPCCosmicTrackfit.h:56
 AliTPCCosmicTrackfit.h:57
 AliTPCCosmicTrackfit.h:58
 AliTPCCosmicTrackfit.h:59
 AliTPCCosmicTrackfit.h:60
 AliTPCCosmicTrackfit.h:61
 AliTPCCosmicTrackfit.h:62
 AliTPCCosmicTrackfit.h:63
 AliTPCCosmicTrackfit.h:64
 AliTPCCosmicTrackfit.h:65
 AliTPCCosmicTrackfit.h:66
 AliTPCCosmicTrackfit.h:67
 AliTPCCosmicTrackfit.h:68
 AliTPCCosmicTrackfit.h:69
 AliTPCCosmicTrackfit.h:70
 AliTPCCosmicTrackfit.h:71
 AliTPCCosmicTrackfit.h:72
 AliTPCCosmicTrackfit.h:73
 AliTPCCosmicTrackfit.h:74
 AliTPCCosmicTrackfit.h:75
 AliTPCCosmicTrackfit.h:76
 AliTPCCosmicTrackfit.h:77
 AliTPCCosmicTrackfit.h:78
 AliTPCCosmicTrackfit.h:79
 AliTPCCosmicTrackfit.h:80
 AliTPCCosmicTrackfit.h:81
 AliTPCCosmicTrackfit.h:82
 AliTPCCosmicTrackfit.h:83
 AliTPCCosmicTrackfit.h:84
 AliTPCCosmicTrackfit.h:85
 AliTPCCosmicTrackfit.h:86
 AliTPCCosmicTrackfit.h:87
 AliTPCCosmicTrackfit.h:88
 AliTPCCosmicTrackfit.h:89
 AliTPCCosmicTrackfit.h:90
 AliTPCCosmicTrackfit.h:91
 AliTPCCosmicTrackfit.h:92
 AliTPCCosmicTrackfit.h:93
 AliTPCCosmicTrackfit.h:94
 AliTPCCosmicTrackfit.h:95
 AliTPCCosmicTrackfit.h:96
 AliTPCCosmicTrackfit.h:97
 AliTPCCosmicTrackfit.h:98
 AliTPCCosmicTrackfit.h:99
 AliTPCCosmicTrackfit.h:100
 AliTPCCosmicTrackfit.h:101
 AliTPCCosmicTrackfit.h:102
 AliTPCCosmicTrackfit.h:103
 AliTPCCosmicTrackfit.h:104
 AliTPCCosmicTrackfit.h:105
 AliTPCCosmicTrackfit.h:106
 AliTPCCosmicTrackfit.h:107
 AliTPCCosmicTrackfit.h:108
 AliTPCCosmicTrackfit.h:109
 AliTPCCosmicTrackfit.h:110
 AliTPCCosmicTrackfit.h:111
 AliTPCCosmicTrackfit.h:112
 AliTPCCosmicTrackfit.h:113
 AliTPCCosmicTrackfit.h:114
 AliTPCCosmicTrackfit.h:115
 AliTPCCosmicTrackfit.h:116
 AliTPCCosmicTrackfit.h:117
 AliTPCCosmicTrackfit.h:118
 AliTPCCosmicTrackfit.h:119
 AliTPCCosmicTrackfit.h:120
 AliTPCCosmicTrackfit.h:121
 AliTPCCosmicTrackfit.h:122
 AliTPCCosmicTrackfit.h:123
 AliTPCCosmicTrackfit.h:124
 AliTPCCosmicTrackfit.h:125
 AliTPCCosmicTrackfit.h:126
 AliTPCCosmicTrackfit.h:127
 AliTPCCosmicTrackfit.h:128
 AliTPCCosmicTrackfit.h:129
 AliTPCCosmicTrackfit.h:130
 AliTPCCosmicTrackfit.h:131
 AliTPCCosmicTrackfit.h:132
 AliTPCCosmicTrackfit.h:133
 AliTPCCosmicTrackfit.h:134
 AliTPCCosmicTrackfit.h:135
 AliTPCCosmicTrackfit.h:136
 AliTPCCosmicTrackfit.h:137
 AliTPCCosmicTrackfit.h:138
 AliTPCCosmicTrackfit.h:139
 AliTPCCosmicTrackfit.h:140
 AliTPCCosmicTrackfit.h:141
 AliTPCCosmicTrackfit.h:142
 AliTPCCosmicTrackfit.h:143