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
G4IntegrationDriver.hh
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4IntegrationDriver.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
// G4IntegrationDriver
27
//
28
// Class description:
29
//
30
// Templated driver class which controls the integration error of a
31
// Runge-Kutta stepper.
32
// It's purpose is to provide a replacement of G4MagIntegratorDriver
33
// and work for all types of steppers.
34
// It will serve as the driver of choice for steppers which do not
35
// have extra capabilities, in particular First Same As Last (FSAL)
36
// and/or interpolation.
37
38
// Author: Dmitry Sorokin, Google Summer of Code 2017
39
// Supervision: John Apostolakis, CERN
40
// --------------------------------------------------------------------
41
#ifndef G4INTEGRATIONDRIVER_HH
42
#define G4INTEGRATIONDRIVER_HH
43
44
#include "
G4RKIntegrationDriver.hh
"
45
#include "
G4ChordFinderDelegate.hh
"
46
47
template
<
class
T>
48
class
G4IntegrationDriver
:
public
G4RKIntegrationDriver
<T>,
49
public
G4ChordFinderDelegate
<G4IntegrationDriver<T>>
50
{
51
public
:
52
53
G4IntegrationDriver
(
G4double
hminimum,
54
T
*
stepper
,
55
G4int
numberOfComponents = 6,
56
G4int
statisticsVerbosity = 0 );
57
58
virtual
~G4IntegrationDriver
()
override
;
59
60
G4IntegrationDriver
(
const
G4IntegrationDriver
&) =
delete
;
61
const
G4IntegrationDriver
&
operator =
(
const
G4IntegrationDriver
&) =
delete
;
62
63
virtual
G4double
AdvanceChordLimited
(
G4FieldTrack
&
track
,
64
G4double
stepMax,
65
G4double
epsStep,
66
G4double
chordDistance)
override
;
67
68
virtual
void
OnStartTracking
()
override
;
69
virtual
void
OnComputeStep
()
override
{}
70
virtual
G4bool
DoesReIntegrate
()
override
{
return
true
; }
71
72
virtual
G4bool
AccurateAdvance
(
G4FieldTrack
& track,
73
G4double
hstep,
74
G4double
eps
,
// Requested y_err/hstep
75
G4double
hinitial = 0)
override
;
76
// Integrates ODE from current s (s=s0) to s=s0+h with accuracy eps.
77
// On output track is replaced by value at end of interval.
78
// The concept is similar to the odeint routine from NRC p.721-722.
79
80
virtual
G4bool
QuickAdvance
(
G4FieldTrack
& fieldTrack,
81
const
G4double
dydx[],
82
G4double
hstep,
83
G4double
& dchord_step,
84
G4double
& dyerr)
override
;
85
// QuickAdvance just tries one Step - it does not ensure accuracy.
86
87
virtual
void
SetVerboseLevel
(
G4int
newLevel)
override
;
88
virtual
G4int
GetVerboseLevel
()
const override
;
89
90
// Accessors
91
//
92
G4double
GetMinimumStep
()
const
;
93
void
SetMinimumStep
(
G4double
newval);
94
95
void
OneGoodStep
(
G4double
yVar[],
// InOut
96
const
G4double
dydx[],
97
G4double
& curveLength,
98
G4double
htry,
99
G4double
eps
,
100
G4double
& hdid,
101
G4double
& hnext);
102
// This takes one Step that is of size htry, or as large
103
// as possible while satisfying the accuracy criterion of:
104
// yerr < eps * |y_end-y_start|
105
106
G4double
GetSmallestFraction
()
const
;
107
void
SetSmallestFraction
(
G4double
val);
108
109
protected
:
110
111
void
IncrementQuickAdvanceCalls
();
112
113
private
:
114
115
void
CheckStep
(
const
G4ThreeVector
& posIn,
116
const
G4ThreeVector
& posOut,
117
G4double
hdid);
118
119
G4double
fMinimumStep
;
120
// Minimum Step allowed in a Step (in absolute units)
121
122
G4double
fSmallestFraction
;
123
// Smallest fraction of (existing) curve length - in relative units
124
// below this fraction the current step will be the last
125
// Expected range: smaller than 0.1 * epsilon and bigger than 5e-13
126
// Note: this range is not enforced.
127
128
G4int
fVerboseLevel
;
129
// Verbosity level for printing (debug, ..)
130
// Could be varied during tracking - to help identify issues
131
132
G4int
fNoQuickAvanceCalls
;
133
G4int
fNoAccurateAdvanceCalls
;
134
G4int
fNoAccurateAdvanceBadSteps
;
135
G4int
fNoAccurateAdvanceGoodSteps
;
136
137
using
Base
=
G4RKIntegrationDriver<T>
;
138
using
ChordFinderDelegate
=
G4ChordFinderDelegate<G4IntegrationDriver<T>
>;
139
};
140
141
#include "G4IntegrationDriver.icc"
142
143
#endif
geant4
tree
geant4-10.6-release
source
geometry
magneticfield
include
G4IntegrationDriver.hh
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:16
using
1.8.2 with
ECCE GitHub integration