ATLAS Offline Software
Loading...
Searching...
No Matches
HyperbolaStepper Class Reference

#include <HyperbolaStepper.h>

Inheritance diagram for HyperbolaStepper:
Collaboration diagram for HyperbolaStepper:

Public Member Functions

 HyperbolaStepper (InfracolorForce &string, const G4Track &track, const G4Field *field=0)
virtual ~HyperbolaStepper ()
virtual void Stepper (const G4double y[], const G4double[], G4double h, G4double yout[], G4double yerr[])
virtual G4double DistChord () const
virtual void ComputeRightHandSide (const G4double[], G4double[])
virtual G4int IntegratorOrder () const
G4double GetForce () const
const G4ElectroMagneticField * GetField () const
G4double GetMass () const
G4double GetCharge () const
const G4LorentzVector & GetStartMomentum () const
G4double GetMaxExpRapidity () const
G4double GetMaxLength () const
void Update (G4FieldTrack &fieldTrack, G4bool forceStep)
void SetDebug (G4bool debug)

Private Member Functions

void SetCurrStep (G4double length)

Private Attributes

InfracolorForcem_string
const G4ElectroMagneticField *const m_field
const G4double m_mass
const G4double m_charge
const G4LorentzVector m_startMomentum
const G4double m_maxExpRapidity
std::vector< HyperbolaStepm_steps
HyperbolaStep m_currStep
std::vector< HyperbolaStep >::size_type m_nPrevSteps
G4bool m_debug

Static Private Attributes

static const G4int m_NUM_VARS = 9

Detailed Description

Definition at line 19 of file HyperbolaStepper.h.

Constructor & Destructor Documentation

◆ HyperbolaStepper()

HyperbolaStepper::HyperbolaStepper ( InfracolorForce & string,
const G4Track & track,
const G4Field * field = 0 )

Definition at line 12 of file HyperbolaStepper.cxx.

16 :
17 // 9 "integration" variables:
18 // x, y, z, px, py, pz, KE, t_lab, steplength (in place of t_proper)
19 G4MagIntegratorStepper(new DummyEquation(), m_NUM_VARS),
20 m_string(string),
21 m_field(dynamic_cast<const G4ElectroMagneticField*>(field)),
22 m_mass(track.GetDynamicParticle()->GetMass()),
23 m_charge(track.GetDynamicParticle()->GetCharge()),
24 m_startMomentum(track.GetDynamicParticle()->Get4Momentum()),
26 m_steps(),
27 m_currStep(this, string, track),
28 m_nPrevSteps(0),
29 m_debug(false)
30{
31 if (field != 0 && m_field == 0) {
32 G4Exception("HyperbolaStepper::HyperbolaStepper", "QuirkNonEM", FatalErrorInArgument, "Non-EM fields not supported");
33 }
34
35 // Precompute steps
36 m_currStep.PrepareNextStep();
37 m_steps.push_back(m_currStep);
38 m_currStep.Step(m_currStep.GetMaxLength());
39 while (m_currStep.GetStringPtr() != string.GetStringVectors().end()) {
40 HyperbolaStep next = m_currStep;
41 next.PrepareNextStep();
42 if (next.IsBoostLimited()) break; // don't allow 2nd+ step if it would be cut by boost limit
43 m_steps.push_back(next);
45 m_currStep.Step(m_currStep.GetMaxLength());
46 }
47 m_nPrevSteps = m_steps.size() - 1;
48}
const G4double m_charge
InfracolorForce & m_string
const G4double m_maxExpRapidity
const G4double m_mass
const G4ElectroMagneticField *const m_field
G4double GetMaxExpRapidity() const
static const G4int m_NUM_VARS
std::vector< HyperbolaStep >::size_type m_nPrevSteps
std::vector< HyperbolaStep > m_steps
HyperbolaStep m_currStep
const G4LorentzVector m_startMomentum

◆ ~HyperbolaStepper()

HyperbolaStepper::~HyperbolaStepper ( )
virtual

Definition at line 50 of file HyperbolaStepper.cxx.

50 {
51 delete GetEquationOfMotion();
52}

Member Function Documentation

◆ ComputeRightHandSide()

virtual void HyperbolaStepper::ComputeRightHandSide ( const G4double [],
G4double [] )
inlinevirtual

Definition at line 36 of file HyperbolaStepper.h.

36{}

◆ DistChord()

G4double HyperbolaStepper::DistChord ( ) const
virtual

Definition at line 85 of file HyperbolaStepper.cxx.

85 {
86 // TODO
87 return 0;
88}

◆ GetCharge()

G4double HyperbolaStepper::GetCharge ( ) const
inline

Definition at line 73 of file HyperbolaStepper.h.

73{return m_charge;}

◆ GetField()

const G4ElectroMagneticField * HyperbolaStepper::GetField ( ) const
inline

Definition at line 71 of file HyperbolaStepper.h.

71{return m_field;}

◆ GetForce()

G4double HyperbolaStepper::GetForce ( ) const
inline

Definition at line 70 of file HyperbolaStepper.h.

70{return m_string.GetStringForce();}

◆ GetMass()

G4double HyperbolaStepper::GetMass ( ) const
inline

Definition at line 72 of file HyperbolaStepper.h.

72{return m_mass;}

◆ GetMaxExpRapidity()

G4double HyperbolaStepper::GetMaxExpRapidity ( ) const
inline

Definition at line 75 of file HyperbolaStepper.h.

75{return m_maxExpRapidity;}

◆ GetMaxLength()

G4double HyperbolaStepper::GetMaxLength ( ) const
inline

Definition at line 77 of file HyperbolaStepper.h.

77{return m_steps.back().GetMaxLength();}

◆ GetStartMomentum()

const G4LorentzVector & HyperbolaStepper::GetStartMomentum ( ) const
inline

Definition at line 74 of file HyperbolaStepper.h.

74{return m_startMomentum;}

◆ IntegratorOrder()

virtual G4int HyperbolaStepper::IntegratorOrder ( ) const
inlinevirtual

Definition at line 37 of file HyperbolaStepper.h.

37{return 1;}

◆ SetCurrStep()

void HyperbolaStepper::SetCurrStep ( G4double length)
private

Definition at line 54 of file HyperbolaStepper.cxx.

54 {
55 if (m_currStep.GetLength() == length) return;
56 std::vector<HyperbolaStep>::size_type i = 0;
57 while (i+1 < m_steps.size() && m_steps[i+1].GetLength() < length) i++;
59 m_currStep.Step(length);
61}
double length(const pvec &v)

◆ SetDebug()

void HyperbolaStepper::SetDebug ( G4bool debug)
inline

Definition at line 79 of file HyperbolaStepper.h.

79{m_debug = debug;}
const bool debug

◆ Stepper()

void HyperbolaStepper::Stepper ( const G4double y[],
const G4double [],
G4double h,
G4double yout[],
G4double yerr[] )
virtual

Definition at line 63 of file HyperbolaStepper.cxx.

69 {
70 G4int maxvar = GetNumberOfStateVariables();
71 for (G4int i = 0; i < maxvar; i++) yout[i] = y[i];
72
73 if (m_debug) G4cout << "HyperbolaStepper: asked to move " << h << G4endl;
74 if (m_debug) G4cout << "HyperbolaStepper: start = " << y[0] << ", " << y[1] << ", " << y[2] << " [" << y[8] << "]" << G4endl;
75
76 SetCurrStep(y[8] + h);
77 m_currStep.Dump(yout);
78
79 if (m_debug) G4cout << "HyperbolaStepper: end = " << yout[0] << ", " << yout[1] << ", " << yout[2] << " [" << yout[8] << "]" << G4endl;
80
81 // TODO: Errors
82 for (G4int i = 0; i < m_NUM_VARS; i++) yerr[i] = 0;
83}
#define y
void SetCurrStep(G4double length)

◆ Update()

void HyperbolaStepper::Update ( G4FieldTrack & fieldTrack,
G4bool forceStep )

Definition at line 90 of file HyperbolaStepper.cxx.

90 {
91 if (forceStep) {
92 // Propagator refused to take step through detector geometry because length too short;
93 // take step ourselves and update string state and quirk 4-momentum only (don't change position)
94 m_currStep = m_steps.back();
95 m_currStep.Step(m_currStep.GetMaxLength());
96 m_nPrevSteps = m_steps.size() - 1;
97 G4LorentzVector p = m_currStep.GetMomentum();
98 fieldTrack.UpdateFourMomentum(p.t() - m_mass, p.vect().unit());
99 } else {
100 SetCurrStep(fieldTrack.GetProperTimeOfFlight());
101 }
102
103 // Update string vectors
104 m_string.PopTo(m_currStep.GetStringPtr(), m_currStep.GetFracLeft());
105 for (std::vector<HyperbolaStep>::size_type i = 0; i < m_nPrevSteps; i++) {
106 if (m_debug) G4cout << "HyperbolaStepper: pushing vector " << m_steps[i].GetStringOut().lv() << G4endl;
107 m_string.GetReactionForce()->PushStringVector(m_steps[i].GetStringOut());
108 }
109 if (m_debug) G4cout << "HyperbolaStepper: pushing vector " << m_currStep.GetStringOut().lv() << G4endl;
110 m_string.GetReactionForce()->PushStringVector(m_currStep.GetStringOut());
111}

Member Data Documentation

◆ m_charge

const G4double HyperbolaStepper::m_charge
private

Definition at line 57 of file HyperbolaStepper.h.

◆ m_currStep

HyperbolaStep HyperbolaStepper::m_currStep
private

Definition at line 62 of file HyperbolaStepper.h.

◆ m_debug

G4bool HyperbolaStepper::m_debug
private

Definition at line 65 of file HyperbolaStepper.h.

◆ m_field

const G4ElectroMagneticField* const HyperbolaStepper::m_field
private

Definition at line 55 of file HyperbolaStepper.h.

◆ m_mass

const G4double HyperbolaStepper::m_mass
private

Definition at line 56 of file HyperbolaStepper.h.

◆ m_maxExpRapidity

const G4double HyperbolaStepper::m_maxExpRapidity
private

Definition at line 59 of file HyperbolaStepper.h.

◆ m_nPrevSteps

std::vector<HyperbolaStep>::size_type HyperbolaStepper::m_nPrevSteps
private

Definition at line 63 of file HyperbolaStepper.h.

◆ m_NUM_VARS

const G4int HyperbolaStepper::m_NUM_VARS = 9
staticprivate

Definition at line 52 of file HyperbolaStepper.h.

◆ m_startMomentum

const G4LorentzVector HyperbolaStepper::m_startMomentum
private

Definition at line 58 of file HyperbolaStepper.h.

◆ m_steps

std::vector<HyperbolaStep> HyperbolaStepper::m_steps
private

Definition at line 61 of file HyperbolaStepper.h.

◆ m_string

InfracolorForce& HyperbolaStepper::m_string
private

Definition at line 54 of file HyperbolaStepper.h.


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