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