Geant4 VMC Version 6.6
Loading...
Searching...
No Matches
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
66 : G4EquationOfMotion(emField)
67{
68 G4cout << "G4MonopoleEquation::G4MonopoleEquation" << G4endl;
69}
70
71//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
72
74
75//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
76
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
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......
Definition of the G4MonopoleEquation class.
virtual void EvaluateRhsGivenB(const G4double y[], const G4double Field[], G4double dydx[]) const
virtual void SetChargeMomentumMass(G4ChargeState particleChargeState, G4double momentum, G4double mass)
G4MonopoleEquation(G4MagneticField *emField)