FairRoot/PandaRoot
Public Member Functions | Private Member Functions | Private Attributes | List of all members
PndHelixPropagator Class Reference

#include <PndHelixPropagator.h>

Inheritance diagram for PndHelixPropagator:

Public Member Functions

 PndHelixPropagator ()
 
 PndHelixPropagator (Double_t fieldStrength, TVector3 origin, TVector3 momentum, Double_t charge)
 
virtual ~PndHelixPropagator ()
 
FairTrackPar PropagateToZ (Double_t zPos)
 
FairTrackPar PropagateToS (Double_t arcLength)
 
FairTrackPar PropagateByAngle (Double_t step)
 
FairTrackPar PropagateToXYPos (TVector2 xyPos)
 

Private Member Functions

Double_t Radius ()
 

Private Attributes

Double_t fFieldStrength
 
TVector3 fOrigin
 
TVector3 fMomentum
 
Double_t fCharge
 

Detailed Description

Definition at line 16 of file PndHelixPropagator.h.

Constructor & Destructor Documentation

PndHelixPropagator::PndHelixPropagator ( )

Definition at line 15 of file PndHelixPropagator.cxx.

15  :
17 {
18 }
PndHelixPropagator::PndHelixPropagator ( Double_t  fieldStrength,
TVector3  origin,
TVector3  momentum,
Double_t  charge 
)
inline

Definition at line 19 of file PndHelixPropagator.h.

19  :
20  fFieldStrength(fieldStrength), fOrigin(origin), fMomentum(momentum), fCharge(charge)
21  {};
PndHelixPropagator::~PndHelixPropagator ( )
virtual

Definition at line 20 of file PndHelixPropagator.cxx.

20  {
21  // TODO Auto-generated destructor stub
22 }

Member Function Documentation

FairTrackPar PndHelixPropagator::PropagateByAngle ( Double_t  step)

Definition at line 109 of file PndHelixPropagator.cxx.

References Double_t, fCharge, fFieldStrength, fMomentum, fOrigin, Pi, and Radius().

Referenced by PndTrackDraw::PropagateTrackHelix().

110 {
111  TVector3 magField(0,0,fFieldStrength);
112  TVector3 dirRadius = fMomentum.Cross(magField).Unit();
113  TVector3 circleCenter = fOrigin + (fCharge * Radius() * dirRadius);
114  Double_t stepInRad = step / 180 * TMath::Pi();
115 
116  Double_t ratioPtPl = 0;
117  if (fMomentum.Pz() != 0)
118  ratioPtPl = fMomentum.Pt() / fMomentum.Pz();
119 
120  TVector3 zeroCircle = fOrigin - circleCenter;
121 
122  Double_t newPhi = zeroCircle.Phi() + stepInRad;
123  TVector3 newOrigin = zeroCircle;
124  newOrigin.SetPhi(newPhi);
125  newOrigin += circleCenter;
126  if (ratioPtPl != 0)
127  newOrigin.SetZ((stepInRad * Radius() * -1 * fCharge / ratioPtPl) + fOrigin.Z());
128  else
129  newOrigin.SetZ(fOrigin.Z());
130 
131  TVector3 newMomentum = fMomentum;
132 
133  newMomentum.RotateZ(stepInRad);
134 
135  std::cout << "PndHelixPropagator::PropagateByAngle " << step << std::endl;
136  std::cout << "Origin: "; fOrigin.Print(); std::cout << std::endl;
137  std::cout << "Momentum: "; fMomentum.Print(); std::cout << " Ratio Pt/Pl: " << ratioPtPl << " Radius: " << Radius() << " "; dirRadius.Print(); std::cout << std::endl;
138  std::cout << "circleCenter: "; circleCenter.Print(); std::cout << std::endl;
139  std::cout << "zeroCircle: "; zeroCircle.Print(); std::cout << std::endl;
140  std::cout << "Phi: " << zeroCircle.Phi() << " deltaPhi: " << stepInRad << " newPhi: " << newPhi << std::endl;
141  std::cout << "NewOrigin: "; newOrigin.Print(); std::cout << std::endl;
142  std::cout << "NewMomentum: "; newMomentum.Print(); std::cout << std::endl;
143 
144 
145  FairTrackPar result(newOrigin.x(), newOrigin.y(), newOrigin.z(), newMomentum.Px(), newMomentum.Py(), newMomentum.Pz(), fCharge);
146  return result;
147 }
Double_t
Double_t Pi
FairTrackPar PndHelixPropagator::PropagateToS ( Double_t  arcLength)
FairTrackPar PndHelixPropagator::PropagateToXYPos ( TVector2  xyPos)

Definition at line 62 of file PndHelixPropagator.cxx.

References Double_t, fCharge, fFieldStrength, fMomentum, fOrigin, and Radius().

Referenced by PndTrackDraw::PropagateTrackHelix().

63 { //FIXME The TVector2 is not utilized!
64  TVector3 magField(0,0,fFieldStrength);
65 
66  TVector3 dirRadius = fMomentum.Cross(magField).Unit();
67  TVector3 circleCenter = fOrigin + (fCharge * Radius() * dirRadius);
68  circleCenter.SetZ(0);
69 
70  Double_t ratioPtPl = fMomentum.Pt() / fMomentum.z();
71 
72  TVector3 zeroCircle = fOrigin - circleCenter;
73 
74  TVector3 negCircleCenter = -circleCenter;
75 
76  Double_t deltaPhi = negCircleCenter.DeltaPhi(zeroCircle);
77 
78  TVector3 newOrigin = negCircleCenter.Unit() * Radius() + circleCenter;
79  Double_t zPos = deltaPhi * Radius() / ratioPtPl - fOrigin.Z();
80  newOrigin.SetZ(zPos);
81 
82 
83  TVector3 newMomentum = fMomentum;
84  newMomentum.RotateZ(deltaPhi);
85 
86  std::cout << "PndHelixPropagator::PropagateToXYPos" << std::endl;
87  std::cout << "Origin: "; fOrigin.Print(); std::cout << std::endl;
88  std::cout << "Momentum: "; fMomentum.Print(); std::cout << " Ratio Pt/Pl: " << ratioPtPl << " Radius: " << Radius() << " "; dirRadius.Print(); std::cout << std::endl;
89  std::cout << "circleCenter: "; circleCenter.Print(); std::cout << " " << circleCenter.Pt() << std::endl;
90  std::cout << "zeroCircle: "; zeroCircle.Print(); std::cout << std::endl;
91  std::cout << "Phi: " << zeroCircle.Phi() << " deltaPhi: " << deltaPhi << std::endl;
92  std::cout << "NewOrigin: "; newOrigin.Print(); std::cout << std::endl;
93  std::cout << "NewMomentum: "; newMomentum.Print(); std::cout << std::endl;
94 
95 
96  FairTrackPar result(newOrigin.x(), newOrigin.y(), newOrigin.z(), newMomentum.Px(), newMomentum.Py(), newMomentum.Pz(), fCharge);
97 
98  return result;
99 }
Double_t
FairTrackPar PndHelixPropagator::PropagateToZ ( Double_t  zPos)

Definition at line 24 of file PndHelixPropagator.cxx.

References Double_t, fCharge, fFieldStrength, fMomentum, fOrigin, and Radius().

25 {
26  TVector3 magField(0,0,fFieldStrength);
27  TVector3 dirRadius = fMomentum.Cross(magField).Unit();
28  TVector3 circleCenter = fOrigin + (fCharge * Radius() * dirRadius);
29 
30  Double_t ratioPtPl = fMomentum.Pt() / fMomentum.z();
31 
32  TVector3 zeroCircle = fOrigin - circleCenter;
33 
34  Double_t zLength = zPos - fOrigin.z();
35  Double_t arcLength = ratioPtPl * zLength;
36  Double_t deltaPhi = arcLength / Radius();
37  Double_t newPhi = deltaPhi + zeroCircle.Phi();
38 
39  TVector3 newOrigin = zeroCircle;
40  newOrigin.SetPhi(newPhi);
41  newOrigin += circleCenter;
42  newOrigin.SetZ(zPos);
43  TVector3 newMomentum = fMomentum;
44 
45  newMomentum.RotateZ(deltaPhi);
46 
47  std::cout << "PndHelixPropagator::PropagateToZ " << zPos << std::endl;
48  std::cout << "Origin: "; fOrigin.Print(); std::cout << std::endl;
49  std::cout << "Momentum: "; fMomentum.Print(); std::cout << " Ratio Pt/Pl: " << ratioPtPl << " Radius: " << Radius() << " "; dirRadius.Print(); std::cout << std::endl;
50  std::cout << "circleCenter: "; circleCenter.Print(); std::cout << std::endl;
51  std::cout << "zeroCircle: "; zeroCircle.Print(); std::cout << std::endl;
52  std::cout << "Phi: " << zeroCircle.Phi() << " deltaPhi: " << deltaPhi << " newPhi: " << newPhi << std::endl;
53  std::cout << "NewOrigin: "; newOrigin.Print(); std::cout << std::endl;
54  std::cout << "NewMomentum: "; newMomentum.Print(); std::cout << std::endl;
55 
56 
57  FairTrackPar result(newOrigin.x(), newOrigin.y(), newOrigin.z(), newMomentum.Px(), newMomentum.Py(), newMomentum.Pz(), fCharge);
58 
59  return result;
60 }
Double_t
Double_t PndHelixPropagator::Radius ( )
private

Definition at line 150 of file PndHelixPropagator.cxx.

References fFieldStrength, and fMomentum.

Referenced by PropagateByAngle(), PropagateToXYPos(), and PropagateToZ().

150  {
151  return fMomentum.Perp() / (fFieldStrength * 0.3)*100;
152 }

Member Data Documentation

Double_t PndHelixPropagator::fCharge
private

Definition at line 34 of file PndHelixPropagator.h.

Referenced by PropagateByAngle(), PropagateToXYPos(), and PropagateToZ().

Double_t PndHelixPropagator::fFieldStrength
private

Definition at line 31 of file PndHelixPropagator.h.

Referenced by PropagateByAngle(), PropagateToXYPos(), PropagateToZ(), and Radius().

TVector3 PndHelixPropagator::fMomentum
private

Definition at line 33 of file PndHelixPropagator.h.

Referenced by PropagateByAngle(), PropagateToXYPos(), PropagateToZ(), and Radius().

TVector3 PndHelixPropagator::fOrigin
private

Definition at line 32 of file PndHelixPropagator.h.

Referenced by PropagateByAngle(), PropagateToXYPos(), and PropagateToZ().


The documentation for this class was generated from the following files: