Geant4-11
G4FieldUtils.hh
Go to the documentation of this file.
1// ********************************************************************
2// * License and Disclaimer *
3// * *
4// * The Geant4 software is copyright of the Copyright Holders of *
5// * the Geant4 Collaboration. It is provided under the terms and *
6// * conditions of the Geant4 Software License, included in the file *
7// * LICENSE and available at http://cern.ch/geant4/license . These *
8// * include a list of copyright holders. *
9// * *
10// * Neither the authors of this software system, nor their employing *
11// * institutes,nor the agencies providing financial support for this *
12// * work make any representation or warranty, express or implied, *
13// * regarding this software system or assume any liability for its *
14// * use. Please see the license in the file LICENSE and URL above *
15// * for the full disclaimer and the limitation of liability. *
16// * *
17// * This code implementation is the result of the scientific and *
18// * technical work of the GEANT4 collaboration. *
19// * By using, copying, modifying or distributing the software (or *
20// * any work based on the software) you agree to acknowledge its *
21// * use in resulting scientific publications, and indicate your *
22// * acceptance of all terms of the Geant4 Software license. *
23// ********************************************************************
24//
25// Helper namespace field_utils
26//
27// Description:
28//
29// Simple methods to extract vectors from arrays in conventions of
30// the magnetic field integration.
31
32// Author: Dmitry Sorokin, Google Summer of Code 2017
33// Supervision: John Apostolakis, CERN
34// --------------------------------------------------------------------
35#ifndef G4FIELD_UTILS_HH
36#define G4FIELD_UTILS_HH
37
38#include "G4FieldTrack.hh"
39#include "G4Types.hh"
40#include "G4ThreeVector.hh"
41
42namespace field_utils
43{
44
46
47 template <unsigned int N>
48 using ShortState = G4double[N];
49
50 enum class Value3D
51 {
52 Position = 0,
53 Momentum = 3,
54 Spin = 9
55 };
56
57 enum class Value1D
58 {
59 KineticEnergy = 6,
60 LabTime = 7,
61 ProperTime = 8
62 };
63
64 template <typename ArrayType>
65 G4double getValue(const ArrayType& array, Value1D value);
66
67 template <typename ArrayType>
68 G4double getValue2(const ArrayType& array, Value1D value);
69
70 template <typename ArrayType>
71 G4double getValue(const ArrayType& array, Value3D value);
72
73 template <typename ArrayType>
74 G4double getValue2(const ArrayType& array, Value3D value);
75
76 template <typename ArrayType>
77 G4ThreeVector makeVector(const ArrayType& array, Value3D value);
78
80 const G4double y[],
81 const G4double yerr[],
82 G4double hstep);
83
85 const G4double y[],
86 const G4double yerr[],
87 G4double hstep,
88 G4double errorTolerance);
89
91 const G4double y[],
92 const G4double yerr[],
93 G4double hstep,
94 G4double errorTolerance);
95
96 template <typename SourceArray, typename TargetArray>
97 void setValue(const SourceArray& src, Value1D value, TargetArray& trg);
98
99 template <typename SourceArray, typename TargetArray, typename ...TargetArrays>
100 void setValue(const SourceArray& src, Value1D value,
101 TargetArray& trg, TargetArrays&... trgs);
102
103 void copy(G4double dst[], const G4double src[],
104 size_t size = G4FieldTrack::ncompSVEC);
105
107 G4double momentum, G4double BField);
108
109 template <typename T>
110 T clamp(T value, T lo, T hi);
111
112} // field_utils
113
114#include "G4FieldUtils.icc"
115
116#endif
double G4double
Definition: G4Types.hh:83
G4double relativeError(const G4double y[], const G4double yerr[], G4double hstep, G4double errorTolerance)
Definition: G4FieldUtils.cc:90
G4double[G4FieldTrack::ncompSVEC] State
Definition: G4FieldUtils.hh:45
G4double absoluteError(const G4double y[], const G4double yerr[], G4double hstep)
Definition: G4FieldUtils.cc:38
G4double relativeError2(const G4double y[], const G4double yerr[], G4double hstep, G4double errorTolerance)
Definition: G4FieldUtils.cc:52
void copy(G4double dst[], const G4double src[], size_t size=G4FieldTrack::ncompSVEC)
Definition: G4FieldUtils.cc:98
G4double inverseCurvatureRadius(G4double particleCharge, G4double momentum, G4double BField)
G4double getValue(const ArrayType &array, Value1D value)
G4ThreeVector makeVector(const ArrayType &array, Value3D value)
G4double getValue2(const ArrayType &array, Value1D value)
T clamp(T value, T lo, T hi)
void setValue(const SourceArray &src, Value1D value, TargetArray &trg)
G4double[N] ShortState
Definition: G4FieldUtils.hh:48