Geant4 VMC
Version 6.8
Toggle main menu visibility
Loading...
Searching...
No Matches
source
physics_monopole
src
G4MonopoleEquation.cxx
Go to the documentation of this file.
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
//
28
//
29
// $Id: G4MonopoleEquation.cc 108824 2018-03-09 11:05:41Z gcosmo $
30
//
31
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
32
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
33
//
34
//
35
// class G4MonopoleEquation
36
//
37
// Class description:
38
//
39
//
40
// This is the standard right-hand side for equation of motion.
41
//
42
// The only case another is required is when using a moving reference
43
// frame ... or extending the class to include additional Forces,
44
// eg an electric field
45
//
46
// 10.11.98 V.Grichine
47
//
48
// 30.04.10 S.Burdin (modified to use for the monopole trajectories).
49
//
50
// 15.06.10 B.Bozsogi (replaced the hardcoded magnetic charge with
51
// the one passed by G4MonopoleTransportation)
52
// +workaround to pass the electric charge.
53
//
54
// 12.07.10 S.Burdin (added equations for the electric charges)
55
// -------------------------------------------------------------------
56
57
#include "
G4MonopoleEquation.hh
"
58
#include "G4PhysicalConstants.hh"
59
#include "G4SystemOfUnits.hh"
60
#include "globals.hh"
61
#include <iomanip>
62
63
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
64
65
G4MonopoleEquation::G4MonopoleEquation
(
G4MagneticField
* emField)
66
:
G4EquationOfMotion
(emField)
67
{
68
G4cout <<
"G4MonopoleEquation::G4MonopoleEquation"
<< G4endl;
69
}
70
71
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
72
73
G4MonopoleEquation::~G4MonopoleEquation
() {}
74
75
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
76
77
void
G4MonopoleEquation::SetChargeMomentumMass
(
78
G4ChargeState particleChargeState,
79
G4double,
// momentum,
80
G4double particleMass)
81
{
82
G4double particleMagneticCharge = particleChargeState.MagneticCharge();
83
G4double particleElectricCharge = particleChargeState.GetCharge();
84
85
// fElCharge = particleElectricCharge;
86
fElCharge
= eplus * particleElectricCharge * c_light;
87
88
fMagCharge
= eplus * particleMagneticCharge * c_light;
89
90
// G4cout << " G4MonopoleEquation: ElectricCharge=" << particleElectricCharge
91
// << "; MagneticCharge=" << particleMagneticCharge
92
// << G4endl;
93
94
fMassCof
= particleMass * particleMass;
95
}
96
97
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
98
99
void
G4MonopoleEquation::EvaluateRhsGivenB
(
100
const
G4double y[],
const
G4double Field[], G4double dydx[])
const
101
{
102
// Components of y:
103
// 0-2 dr/ds,
104
// 3-5 dp/ds - momentum derivatives
105
106
G4double pSquared = y[3] * y[3] + y[4] * y[4] + y[5] * y[5];
107
108
G4double Energy = std::sqrt(pSquared +
fMassCof
);
109
110
G4double pModuleInverse = 1.0 / std::sqrt(pSquared);
111
112
G4double inverse_velocity = Energy * pModuleInverse / c_light;
113
114
G4double cofEl =
fElCharge
* pModuleInverse;
115
G4double cofMag =
fMagCharge
* Energy * pModuleInverse;
116
117
dydx[0] = y[3] * pModuleInverse;
118
dydx[1] = y[4] * pModuleInverse;
119
dydx[2] = y[5] * pModuleInverse;
120
121
// G4double magCharge = twopi * hbar_Planck / (eplus * mu0);
122
// magnetic charge in SI units A*m convention
123
// see http://en.wikipedia.org/wiki/Magnetic_monopole
124
// G4cout << "Magnetic charge: " << magCharge << G4endl;
125
// dp/ds = dp/dt * dt/ds = dp/dt / v = Force / velocity
126
// dydx[3] = fMagCharge * Field[0] * inverse_velocity * c_light;
127
// multiplied by c_light to convert to MeV/mm
128
// dydx[4] = fMagCharge * Field[1] * inverse_velocity * c_light;
129
// dydx[5] = fMagCharge * Field[2] * inverse_velocity * c_light;
130
131
dydx[3] = cofMag * Field[0] + cofEl * (y[4] * Field[2] - y[5] * Field[1]);
132
dydx[4] = cofMag * Field[1] + cofEl * (y[5] * Field[0] - y[3] * Field[2]);
133
dydx[5] = cofMag * Field[2] + cofEl * (y[3] * Field[1] - y[4] * Field[0]);
134
135
// G4cout << std::setprecision(5)<< "E=" << Energy
136
// << "; p="<< 1/pModuleInverse
137
// << "; mC="<< magCharge
138
// <<"; x=" << y[0]
139
// <<"; y=" << y[1]
140
// <<"; z=" << y[2]
141
// <<"; dydx[3]=" << dydx[3]
142
// <<"; dydx[4]=" << dydx[4]
143
// <<"; dydx[5]=" << dydx[5]
144
// << G4endl;
145
146
dydx[6] = 0.;
// not used
147
148
// Lab Time of flight
149
dydx[7] = inverse_velocity;
150
return
;
151
}
152
153
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4MonopoleEquation.hh
Definition of the G4MonopoleEquation class.
G4EquationOfMotion
G4MagneticField
G4MonopoleEquation::EvaluateRhsGivenB
virtual void EvaluateRhsGivenB(const G4double y[], const G4double Field[], G4double dydx[]) const
Definition
G4MonopoleEquation.cxx:99
G4MonopoleEquation::SetChargeMomentumMass
virtual void SetChargeMomentumMass(G4ChargeState particleChargeState, G4double momentum, G4double mass)
Definition
G4MonopoleEquation.cxx:77
G4MonopoleEquation::fMagCharge
G4double fMagCharge
Definition
G4MonopoleEquation.hh:76
G4MonopoleEquation::fElCharge
G4double fElCharge
Definition
G4MonopoleEquation.hh:77
G4MonopoleEquation::G4MonopoleEquation
G4MonopoleEquation(G4MagneticField *emField)
Definition
G4MonopoleEquation.cxx:65
G4MonopoleEquation::~G4MonopoleEquation
~G4MonopoleEquation()
Definition
G4MonopoleEquation.cxx:73
G4MonopoleEquation::fMassCof
G4double fMassCof
Definition
G4MonopoleEquation.hh:78
Generated on
for Geant4 VMC by
1.17.0