ECCE @ EIC Software
Reference for
ECCE @ EIC
simulation and reconstruction software on GitHub
Home page
Related Pages
Modules
Namespaces
Classes
Files
External Links
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
G4BFieldIntegrationDriver.hh
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4BFieldIntegrationDriver.hh
1
//
2
// ********************************************************************
3
// * License and Disclaimer *
4
// * *
5
// * The Geant4 software is copyright of the Copyright Holders of *
6
// * the Geant4 Collaboration. It is provided under the terms and *
7
// * conditions of the Geant4 Software License, included in the file *
8
// * LICENSE and available at http://cern.ch/geant4/license . These *
9
// * include a list of copyright holders. *
10
// * *
11
// * Neither the authors of this software system, nor their employing *
12
// * institutes,nor the agencies providing financial support for this *
13
// * work make any representation or warranty, express or implied, *
14
// * regarding this software system or assume any liability for its *
15
// * use. Please see the license in the file LICENSE and URL above *
16
// * for the full disclaimer and the limitation of liability. *
17
// * *
18
// * This code implementation is the result of the scientific and *
19
// * technical work of the GEANT4 collaboration. *
20
// * By using, copying, modifying or distributing the software (or *
21
// * any work based on the software) you agree to acknowledge its *
22
// * use in resulting scientific publications, and indicate your *
23
// * acceptance of all terms of the Geant4 Software license. *
24
// ********************************************************************
25
//
26
// G4BFieldIntegrationDriver
27
//
28
// Class description:
29
//
30
// Specialized integration driver for pure magnetic field
31
32
// Author: D.Sorokin
33
// --------------------------------------------------------------------
34
#ifndef G4BFIELD_INTEGRATION_DRIVER_HH
35
#define G4BFIELD_INTEGRATION_DRIVER_HH
36
37
#include "
G4VIntegrationDriver.hh
"
38
#include "
G4Mag_EqRhs.hh
"
39
40
#include <memory>
41
42
class
G4BFieldIntegrationDriver
:
public
G4VIntegrationDriver
43
{
44
public
:
45
46
G4BFieldIntegrationDriver
(
47
std::unique_ptr<G4VIntegrationDriver> smallStepDriver,
48
std::unique_ptr<G4VIntegrationDriver> largeStepDriver);
49
50
G4BFieldIntegrationDriver
(
const
G4BFieldIntegrationDriver
&) =
delete
;
51
const
G4BFieldIntegrationDriver
&
operator =
(
const
G4BFieldIntegrationDriver
&) =
delete
;
52
53
virtual
G4double
AdvanceChordLimited
(
G4FieldTrack
&
track
,
54
G4double
hstep,
55
G4double
eps
,
56
G4double
chordDistance)
override
;
57
58
virtual
G4bool
AccurateAdvance
(
G4FieldTrack
& track,
59
G4double
hstep,
60
G4double
eps,
61
G4double
hinitial = 0)
override
62
{
63
return
fCurrDriver
->
AccurateAdvance
(track, hstep, eps, hinitial);
64
}
65
66
virtual
G4bool
DoesReIntegrate
()
override
67
{
68
return
fCurrDriver
->
DoesReIntegrate
();
69
}
70
71
//[[deprecated("will be removed")]]
72
virtual
void
GetDerivatives
(
const
G4FieldTrack
& track,
73
G4double
dydx[])
const override
74
{
75
fCurrDriver
->
GetDerivatives
(track, dydx);
76
}
77
78
//[[deprecated("will be removed")]]
79
virtual
void
GetDerivatives
(
const
G4FieldTrack
& track,
80
G4double
dydx[],
81
G4double
field[])
const override
82
{
83
fCurrDriver
->
GetDerivatives
(track, dydx, field);
84
}
85
86
virtual
void
SetEquationOfMotion
(
G4EquationOfMotion
* equation)
override
;
87
88
virtual
G4EquationOfMotion
*
GetEquationOfMotion
()
override
89
{
90
return
fCurrDriver
->
GetEquationOfMotion
();
91
}
92
93
//[[deprecated("use GetEquationOfMotion() instead of GetStepper()->GetEquationOfMotion()")]]
94
virtual
const
G4MagIntegratorStepper
*
GetStepper
()
const override
95
{
96
return
fCurrDriver
->
GetStepper
();
97
}
98
99
virtual
G4MagIntegratorStepper
*
GetStepper
()
override
100
{
101
return
fCurrDriver
->
GetStepper
();
102
}
103
104
virtual
G4double
ComputeNewStepSize
(
G4double
errMaxNorm,
105
G4double
hstepCurrent)
override
106
{
107
return
fCurrDriver
->
ComputeNewStepSize
(errMaxNorm, hstepCurrent);
108
}
109
110
virtual
void
SetVerboseLevel
(
G4int
level)
override
111
{
112
fSmallStepDriver
->SetVerboseLevel(level);
113
fLargeStepDriver
->SetVerboseLevel(level);
114
}
115
116
virtual
G4int
GetVerboseLevel
()
const override
117
{
118
return
fCurrDriver
->
GetVerboseLevel
();
119
}
120
121
virtual
void
OnComputeStep
()
override
122
{
123
fSmallStepDriver
->OnComputeStep();
124
fLargeStepDriver
->OnComputeStep();
125
}
126
127
virtual
void
OnStartTracking
()
override
128
{
129
fSmallStepDriver
->OnStartTracking();
130
fLargeStepDriver
->OnStartTracking();
131
}
132
133
void
PrintStatistics
()
const
;
134
135
private
:
136
137
G4double
CurvatureRadius
(
const
G4FieldTrack
& track)
const
;
138
139
void
GetFieldValue
(
const
G4FieldTrack
& track,
140
G4double
Field[] )
const
;
141
142
std::unique_ptr<G4VIntegrationDriver>
fSmallStepDriver
;
143
std::unique_ptr<G4VIntegrationDriver>
fLargeStepDriver
;
144
G4VIntegrationDriver
*
fCurrDriver
=
nullptr
;
145
G4Mag_EqRhs
*
fEquation
=
nullptr
;
146
147
G4int
fSmallDriverSteps
= 0;
148
G4int
fLargeDriverSteps
= 0;
149
};
150
151
#endif
geant4
tree
geant4-10.6-release
source
geometry
magneticfield
include
G4BFieldIntegrationDriver.hh
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:16
using
1.8.2 with
ECCE GitHub integration