9 #include "CLHEP/Units/SystemOfUnits.h"
12 #include "G4AtlasRK4.hh"
13 #include "G4BogackiShampine23.hh"
14 #include "G4BogackiShampine45.hh"
15 #include "G4CashKarpRKF45.hh"
16 #include "G4ClassicalRK4.hh"
17 #include "G4DoLoMcPriRK34.hh"
18 #include "G4DormandPrince745.hh"
19 #include "G4DormandPrinceRK56.hh"
20 #include "G4DormandPrinceRK78.hh"
21 #include "G4FieldManager.hh"
22 #include "G4HelixExplicitEuler.hh"
23 #include "G4HelixImplicitEuler.hh"
24 #include "G4HelixSimpleRunge.hh"
25 #include "G4NystromRK4.hh"
26 #include "G4RK547FEq1.hh"
27 #include "G4RK547FEq2.hh"
28 #include "G4RK547FEq3.hh"
29 #include "G4RKG3_Stepper.hh"
30 #include "G4TsitourasRK45.hh"
33 #include "G4ChordFinder.hh"
34 #include "G4IntegrationDriver.hh"
35 #include "G4Mag_UsualEqRhs.hh"
36 #include "G4MagIntegratorStepper.hh"
37 #include "G4VIntegrationDriver.hh"
50 const std::string&
name,
68 ATH_MSG_DEBUG(
"Field disabled. Not retrieving G4 field svc.");
74 return StatusCode::SUCCESS;
77 #if G4VERSION_NUMBER >= 1040
82 G4FieldManagerToolBase::createDriverAndStepper(
const std::string&
name, G4MagneticField*
field)
const
85 G4Mag_EqRhs* eqRhs(
nullptr);
89 ATH_MSG_INFO(
"Configuring alternative equation of motion using " <<
95 eqRhs =
new G4Mag_UsualEqRhs(
field);
99 G4VIntegrationDriver*
driver =
nullptr;
100 if (
name==
"HelixImplicitEuler") {
101 G4HelixImplicitEuler* stepper =
new G4HelixImplicitEuler(eqRhs);
102 driver =
new G4IntegrationDriver<G4HelixImplicitEuler>(
103 m_minStep, stepper, stepper->GetNumberOfVariables());
104 }
else if (
name==
"HelixSimpleRunge") {
105 G4HelixSimpleRunge* stepper =
new G4HelixSimpleRunge(eqRhs);
106 driver =
new G4IntegrationDriver<G4HelixSimpleRunge>(
107 m_minStep, stepper, stepper->GetNumberOfVariables());
108 }
else if (
name==
"HelixExplicitEuler") {
109 G4HelixExplicitEuler* stepper =
new G4HelixExplicitEuler(eqRhs);
110 driver =
new G4IntegrationDriver<G4HelixExplicitEuler>(
111 m_minStep, stepper, stepper->GetNumberOfVariables());
112 }
else if (
name==
"NystromRK4") {
113 G4NystromRK4* stepper =
new G4NystromRK4(eqRhs);
114 driver =
new G4IntegrationDriver<G4NystromRK4>(
115 m_minStep, stepper, stepper->GetNumberOfVariables());
116 }
else if (
name==
"ClassicalRK4") {
117 G4ClassicalRK4* stepper =
new G4ClassicalRK4(eqRhs);
118 driver =
new G4IntegrationDriver<G4ClassicalRK4>(
119 m_minStep, stepper, stepper->GetNumberOfVariables());
120 }
else if (
name==
"AtlasRK4") {
121 G4AtlasRK4* stepper =
new G4AtlasRK4(eqRhs);
122 driver =
new G4IntegrationDriver<G4AtlasRK4>(
123 m_minStep, stepper, stepper->GetNumberOfVariables());
124 }
else if (
name==
"BogackiShampine23") {
125 G4BogackiShampine23* stepper =
new G4BogackiShampine23(eqRhs);
126 driver =
new G4IntegrationDriver<G4BogackiShampine23>(
127 m_minStep, stepper, stepper->GetNumberOfVariables());
128 }
else if (
name==
"BogackiShampine45") {
129 G4BogackiShampine45* stepper =
new G4BogackiShampine45(eqRhs);
130 driver =
new G4IntegrationDriver<G4BogackiShampine45>(
131 m_minStep, stepper, stepper->GetNumberOfVariables());
132 }
else if (
name==
"CashKarpRKF45") {
133 G4CashKarpRKF45* stepper =
new G4CashKarpRKF45(eqRhs);
134 driver =
new G4IntegrationDriver<G4CashKarpRKF45>(
135 m_minStep, stepper, stepper->GetNumberOfVariables());
136 }
else if (
name==
"DoLoMcPriRK34") {
137 G4DoLoMcPriRK34* stepper =
new G4DoLoMcPriRK34(eqRhs);
138 driver =
new G4IntegrationDriver<G4DoLoMcPriRK34>(
139 m_minStep, stepper, stepper->GetNumberOfVariables());
140 }
else if (
name==
"DormandPrince745") {
141 G4DormandPrince745* stepper =
new G4DormandPrince745(eqRhs);
142 driver =
new G4IntegrationDriver<G4DormandPrince745>(
143 m_minStep, stepper, stepper->GetNumberOfVariables());
144 }
else if (
name==
"DormandPrinceRK56") {
145 G4DormandPrinceRK56* stepper =
new G4DormandPrinceRK56(eqRhs);
146 driver =
new G4IntegrationDriver<G4DormandPrinceRK56>(
147 m_minStep, stepper, stepper->GetNumberOfVariables());
148 }
else if (
name==
"DormandPrinceRK78") {
149 G4DormandPrinceRK78* stepper =
new G4DormandPrinceRK78(eqRhs);
150 driver =
new G4IntegrationDriver<G4DormandPrinceRK78>(
151 m_minStep, stepper, stepper->GetNumberOfVariables());
152 }
else if (
name==
"RK547FEq1") {
153 G4RK547FEq1* stepper =
new G4RK547FEq1(eqRhs);
154 driver =
new G4IntegrationDriver<G4RK547FEq1>(
155 m_minStep, stepper, stepper->GetNumberOfVariables());
156 }
else if (
name==
"RK547FEq2") {
157 G4RK547FEq2* stepper =
new G4RK547FEq2(eqRhs);
158 driver =
new G4IntegrationDriver<G4RK547FEq2>(
159 m_minStep, stepper, stepper->GetNumberOfVariables());
160 }
else if (
name==
"RK547FEq3") {
161 G4RK547FEq3* stepper =
new G4RK547FEq3(eqRhs);
162 driver =
new G4IntegrationDriver<G4RK547FEq3>(
163 m_minStep, stepper, stepper->GetNumberOfVariables());
164 }
else if (
name==
"RKG3_Stepper") {
165 G4RKG3_Stepper* stepper =
new G4RKG3_Stepper(eqRhs);
166 driver =
new G4IntegrationDriver<G4RKG3_Stepper>(
167 m_minStep, stepper, stepper->GetNumberOfVariables());
168 }
else if (
name==
"TsitourasRK45") {
169 G4TsitourasRK45* stepper =
new G4TsitourasRK45(eqRhs);
170 driver =
new G4IntegrationDriver<G4TsitourasRK45>(
171 m_minStep, stepper, stepper->GetNumberOfVariables());
174 G4NystromRK4* stepper =
new G4NystromRK4(eqRhs);
175 driver =
new G4IntegrationDriver<G4NystromRK4>(
176 m_minStep, stepper, stepper->GetNumberOfVariables());
182 #if G4VERSION_NUMBER < 1040
186 G4MagIntegratorStepper*
190 G4Mag_EqRhs* eqRhs(
nullptr);
194 ATH_MSG_INFO(
"Configuring alternative equation of motion using " <<
200 eqRhs =
new G4Mag_UsualEqRhs(
field);
207 if (
name==
"HelixImplicitEuler")
return new G4HelixImplicitEuler(eqRhs);
208 else if (
name==
"HelixSimpleRunge")
return new G4HelixSimpleRunge(eqRhs);
209 else if (
name==
"HelixExplicitEuler")
return new G4HelixExplicitEuler(eqRhs);
210 else if (
name==
"NystromRK4")
return new G4NystromRK4(eqRhs);
211 else if (
name==
"ClassicalRK4")
return new G4ClassicalRK4(eqRhs);
212 else if (
name==
"AtlasRK4")
return new G4AtlasRK4(eqRhs);
213 else if (
name==
"BogackiShampine23")
return new G4BogackiShampine23(eqRhs);
214 else if (
name==
"BogackiShampine45")
return new G4BogackiShampine45(eqRhs);
215 else if (
name==
"CashKarpRKF45")
return new G4CashKarpRKF45(eqRhs);
216 else if (
name==
"DoLoMcPriRK34")
return new G4DoLoMcPriRK34(eqRhs);
217 else if (
name==
"DormandPrince745")
return new G4DormandPrince745(eqRhs);
218 else if (
name==
"DormandPrinceRK56")
return new G4DormandPrinceRK56(eqRhs);
219 else if (
name==
"DormandPrinceRK78")
return new G4DormandPrinceRK78(eqRhs);
220 else if (
name==
"RK547FEq1")
return new G4RK547FEq1(eqRhs);
221 else if (
name==
"RK547FEq2")
return new G4RK547FEq2(eqRhs);
222 else if (
name==
"RK547FEq3")
return new G4RK547FEq3(eqRhs);
223 else if (
name==
"RKG3_Stepper")
return new G4RKG3_Stepper(eqRhs);
224 else if (
name==
"TsitourasRK45")
return new G4TsitourasRK45(eqRhs);
227 return new G4NystromRK4(eqRhs);
247 ATH_MSG_ERROR(
"setFieldParameters received NULL field mgr!");
248 return StatusCode::FAILURE;
250 return StatusCode::SUCCESS;