ROOT logo
#ifndef ALIHELIX_H
#define ALIHELIX_H

/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */


//-------------------------------------------------------------------------
//                          Class AliHelix
//
//         Origin: Marian Ivanov marian.ivanov@cern.ch 
//-------------------------------------------------------------------------

#include <TObject.h>
#include <TMath.h>


class AliCluster;
class AliKalmanTrack;
class AliExternalTrackParam;

class AliHelix : public TObject {
public:
  AliHelix();
  AliHelix(const AliHelix &t);
  AliHelix(const AliKalmanTrack &t);
  AliHelix(const AliExternalTrackParam &t);
  AliHelix(Double_t x[3], Double_t p[3], Double_t charge=1, Double_t conversion=0.);
  virtual ~AliHelix(){};
  inline void Evaluate(Double_t t, Double_t r[3]);
  void Evaluate(Double_t t, Double_t r[3],  //radius vector
                     Double_t g[3],  //first defivatives
		Double_t gg[3]);     //second derivatives
  void GetMomentum(Double_t phase, Double_t p[4], Double_t conversion=0., Double_t *xr=0);  // return  momentum  
  void  GetAngle(Double_t t1, AliHelix &h, Double_t t2, Double_t angle[3]);
  inline Double_t GetHelixR(Double_t phase=0);
  inline Double_t GetHelixZ(Double_t phase=0);

  Double_t  GetPhase(Double_t x0, Double_t y0);  //return phase for nearest point  
  Double_t  GetPhaseZ(Double_t z0);               // return phase for given z
  Int_t     GetPhase(Double_t r0, Double_t t[2]);               //return phase for the nearest point
  Int_t     GetRPHIintersections(AliHelix &h, Double_t phase[2][2], Double_t ri[2], Double_t cut=3.);
  Int_t     GetClosestPhases(AliHelix &h, Double_t phase[2][2]);
  Double_t  GetPointAngle(AliHelix &h, Double_t phase[2],const Float_t *vertex);
  Int_t     LinearDCA(AliHelix &h, Double_t &t1, Double_t &t2, 
		      Double_t &R, Double_t &dist);
  //
  Int_t     ParabolicDCA(AliHelix&h,  //helixes
			 Double_t &t1, Double_t &t2, 
			 Double_t &R, Double_t &dist, Int_t iter=1);    
  Int_t     ParabolicDCA2(AliHelix&h,  //helixes
			 Double_t &t1, Double_t &t2, 
			 Double_t &R, Double_t &dist, Double_t err[3], Int_t iter=1);    
  Double_t GetHelix(Int_t i) const{return fHelix[i];}
 public:
  Double_t fHelix[9];    //helix parameters
 private:  
  AliHelix &operator=(const AliHelix&helix);

  ClassDef(AliHelix,1)    // AliHelix
};

void AliHelix::Evaluate(Double_t t, Double_t r[3]){
  //
  // calculate poitition at given phase t 
  Double_t phase=fHelix[4]*t+fHelix[2];  
  r[0] = fHelix[5] + TMath::Sin(phase)/fHelix[4];
  r[1] = fHelix[0] - TMath::Cos(phase)/fHelix[4];  
  r[2] = fHelix[1] + fHelix[3]*t;
}

inline Double_t  AliHelix::GetHelixR(Double_t phase)
{
  Double_t x[3];
  Evaluate(phase,x);
  return TMath::Sqrt(x[0]*x[0]+x[1]*x[1]);
}

inline Double_t  AliHelix::GetHelixZ(Double_t phase)
{
  Double_t x[3];
  Evaluate(phase,x);
  return x[2];
}


#endif


 AliHelix.h:1
 AliHelix.h:2
 AliHelix.h:3
 AliHelix.h:4
 AliHelix.h:5
 AliHelix.h:6
 AliHelix.h:7
 AliHelix.h:8
 AliHelix.h:9
 AliHelix.h:10
 AliHelix.h:11
 AliHelix.h:12
 AliHelix.h:13
 AliHelix.h:14
 AliHelix.h:15
 AliHelix.h:16
 AliHelix.h:17
 AliHelix.h:18
 AliHelix.h:19
 AliHelix.h:20
 AliHelix.h:21
 AliHelix.h:22
 AliHelix.h:23
 AliHelix.h:24
 AliHelix.h:25
 AliHelix.h:26
 AliHelix.h:27
 AliHelix.h:28
 AliHelix.h:29
 AliHelix.h:30
 AliHelix.h:31
 AliHelix.h:32
 AliHelix.h:33
 AliHelix.h:34
 AliHelix.h:35
 AliHelix.h:36
 AliHelix.h:37
 AliHelix.h:38
 AliHelix.h:39
 AliHelix.h:40
 AliHelix.h:41
 AliHelix.h:42
 AliHelix.h:43
 AliHelix.h:44
 AliHelix.h:45
 AliHelix.h:46
 AliHelix.h:47
 AliHelix.h:48
 AliHelix.h:49
 AliHelix.h:50
 AliHelix.h:51
 AliHelix.h:52
 AliHelix.h:53
 AliHelix.h:54
 AliHelix.h:55
 AliHelix.h:56
 AliHelix.h:57
 AliHelix.h:58
 AliHelix.h:59
 AliHelix.h:60
 AliHelix.h:61
 AliHelix.h:62
 AliHelix.h:63
 AliHelix.h:64
 AliHelix.h:65
 AliHelix.h:66
 AliHelix.h:67
 AliHelix.h:68
 AliHelix.h:69
 AliHelix.h:70
 AliHelix.h:71
 AliHelix.h:72
 AliHelix.h:73
 AliHelix.h:74
 AliHelix.h:75
 AliHelix.h:76
 AliHelix.h:77
 AliHelix.h:78
 AliHelix.h:79
 AliHelix.h:80
 AliHelix.h:81
 AliHelix.h:82
 AliHelix.h:83
 AliHelix.h:84
 AliHelix.h:85
 AliHelix.h:86
 AliHelix.h:87
 AliHelix.h:88
 AliHelix.h:89