Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 /// \file exoticphysics/monopole/src/G4Monopol 26 /// \file exoticphysics/monopole/src/G4MonopoleEquation.cc 27 /// \brief Implementation of the G4MonopoleEqu 27 /// \brief Implementation of the G4MonopoleEquation class 28 // 28 // >> 29 // $Id: G4MonopoleEquation.cc 69705 2013-05-13 09:09:52Z gcosmo $ 29 // 30 // 30 //....oooOO0OOooo........oooOO0OOooo........oo 31 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 31 //....oooOO0OOooo........oooOO0OOooo........oo 32 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 32 // 33 // 33 // 34 // 34 // class G4MonopoleEquation 35 // class G4MonopoleEquation 35 // 36 // 36 // Class description: 37 // Class description: 37 // 38 // 38 // 39 // 39 // This is the standard right-hand side for e 40 // This is the standard right-hand side for equation of motion. 40 // 41 // 41 // The only case another is required is when 42 // The only case another is required is when using a moving reference 42 // frame ... or extending the class to includ 43 // frame ... or extending the class to include additional Forces, 43 // eg an electric field 44 // eg an electric field 44 // 45 // 45 // 10.11.98 V.Grichine 46 // 10.11.98 V.Grichine 46 // 47 // 47 // 30.04.10 S.Burdin (modified to use for t 48 // 30.04.10 S.Burdin (modified to use for the monopole trajectories). 48 // 49 // 49 // 15.06.10 B.Bozsogi (replaced the hardcod 50 // 15.06.10 B.Bozsogi (replaced the hardcoded magnetic charge with 50 // the one passed by G4 51 // the one passed by G4MonopoleTransportation) 51 // +workaround to pass t 52 // +workaround to pass the electric charge. 52 // << 53 // 53 // 12.07.10 S.Burdin (added equations for th 54 // 12.07.10 S.Burdin (added equations for the electric charges) 54 // ------------------------------------------- 55 // ------------------------------------------------------------------- 55 56 56 #include "G4MonopoleEquation.hh" 57 #include "G4MonopoleEquation.hh" 57 << 58 #include "globals.hh" 58 #include "G4PhysicalConstants.hh" 59 #include "G4PhysicalConstants.hh" 59 #include "G4SystemOfUnits.hh" 60 #include "G4SystemOfUnits.hh" 60 #include "globals.hh" << 61 << 62 #include <iomanip> 61 #include <iomanip> 63 62 64 //....oooOO0OOooo........oooOO0OOooo........oo 63 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 65 64 66 G4MonopoleEquation::G4MonopoleEquation(G4Magne << 65 G4MonopoleEquation::G4MonopoleEquation(G4ElectroMagneticField *emField ) 67 { << 66 : G4EquationOfMotion( emField ) 68 G4cout << "G4MonopoleEquation::G4MonopoleEqu << 67 {} 69 } << 70 68 71 //....oooOO0OOooo........oooOO0OOooo........oo 69 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 72 70 73 G4MonopoleEquation::~G4MonopoleEquation() {} << 71 G4MonopoleEquation::~G4MonopoleEquation() >> 72 {} 74 73 75 //....oooOO0OOooo........oooOO0OOooo........oo 74 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 76 75 77 void G4MonopoleEquation::SetChargeMomentumMass << 76 void 78 << 77 G4MonopoleEquation::SetChargeMomentumMass( G4ChargeState particleChargeState, 79 << 78 G4double , // momentum, >> 79 G4double particleMass) 80 { 80 { 81 G4double particleMagneticCharge = particleCh << 81 G4double particleMagneticCharge= particleChargeState.MagneticCharge(); 82 G4double particleElectricCharge = particleCh << 82 G4double particleElectricCharge= particleChargeState.GetCharge(); 83 83 84 // fElCharge = particleElectricCharge; 84 // fElCharge = particleElectricCharge; 85 fElCharge = eplus * particleElectricCharge * << 85 fElCharge =eplus* particleElectricCharge*c_light; 86 << 86 87 fMagCharge = eplus * particleMagneticCharge << 87 fMagCharge = eplus*particleMagneticCharge*c_light ; 88 88 89 // G4cout << " G4MonopoleEquation: ElectricC 89 // G4cout << " G4MonopoleEquation: ElectricCharge=" << particleElectricCharge 90 // << "; MagneticCharge=" << parti 90 // << "; MagneticCharge=" << particleMagneticCharge 91 // << G4endl; 91 // << G4endl; 92 << 92 93 fMassCof = particleMass * particleMass; << 93 fMassCof = particleMass*particleMass ; 94 } 94 } 95 95 96 //....oooOO0OOooo........oooOO0OOooo........oo 96 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 97 97 98 void G4MonopoleEquation::EvaluateRhsGivenB(con << 98 void 99 G4d << 99 G4MonopoleEquation::EvaluateRhsGivenB(const G4double y[], >> 100 const G4double Field[], >> 101 G4double dydx[] ) const 100 { 102 { 101 // Components of y: 103 // Components of y: 102 // 0-2 dr/ds, << 104 // 0-2 dr/ds, 103 // 3-5 dp/ds - momentum derivatives << 105 // 3-5 dp/ds - momentum derivatives 104 << 105 G4double pSquared = y[3] * y[3] + y[4] * y[4 << 106 106 107 G4double Energy = std::sqrt(pSquared + fMass << 107 G4double pSquared = y[3]*y[3] + y[4]*y[4] + y[5]*y[5] ; 108 108 109 G4double pModuleInverse = 1.0 / std::sqrt(pS << 109 G4double Energy = std::sqrt( pSquared + fMassCof ); >> 110 >> 111 G4double pModuleInverse = 1.0/std::sqrt(pSquared); 110 112 111 G4double inverse_velocity = Energy * pModule 113 G4double inverse_velocity = Energy * pModuleInverse / c_light; 112 114 113 G4double cofEl = fElCharge * pModuleInverse; << 115 G4double cofEl = fElCharge * pModuleInverse ; 114 G4double cofMag = fMagCharge * Energy * pMod << 116 G4double cofMag = fMagCharge * Energy * pModuleInverse; 115 117 116 dydx[0] = y[3] * pModuleInverse; << 117 dydx[1] = y[4] * pModuleInverse; << 118 dydx[2] = y[5] * pModuleInverse; << 119 118 120 // G4double magCharge = twopi * hbar_Planck << 119 dydx[0] = y[3]*pModuleInverse ; >> 120 dydx[1] = y[4]*pModuleInverse ; >> 121 dydx[2] = y[5]*pModuleInverse ; >> 122 >> 123 // G4double magCharge = twopi * hbar_Planck / (eplus * mu0); 121 // magnetic charge in SI units A*m conventio 124 // magnetic charge in SI units A*m convention 122 // see http://en.wikipedia.org/wiki/Magneti << 125 // see http://en.wikipedia.org/wiki/Magnetic_monopole 123 // G4cout << "Magnetic charge: " << magC << 126 // G4cout << "Magnetic charge: " << magCharge << G4endl; 124 // dp/ds = dp/dt * dt/ds = dp/dt / v = Force 127 // dp/ds = dp/dt * dt/ds = dp/dt / v = Force / velocity 125 // dydx[3] = fMagCharge * Field[0] * invers << 128 // dydx[3] = fMagCharge * Field[0] * inverse_velocity * c_light; 126 // multiplied by c_light to convert to MeV/m 129 // multiplied by c_light to convert to MeV/mm 127 // dydx[4] = fMagCharge * Field[1] * in << 130 // dydx[4] = fMagCharge * Field[1] * inverse_velocity * c_light; 128 // dydx[5] = fMagCharge * Field[2] * in << 131 // dydx[5] = fMagCharge * Field[2] * inverse_velocity * c_light; 129 << 132 130 dydx[3] = cofMag * Field[0] + cofEl * (y[4] << 133 dydx[3] = cofMag * Field[0] + cofEl * (y[4]*Field[2] - y[5]*Field[1]); 131 dydx[4] = cofMag * Field[1] + cofEl * (y[5] << 134 dydx[4] = cofMag * Field[1] + cofEl * (y[5]*Field[0] - y[3]*Field[2]); 132 dydx[5] = cofMag * Field[2] + cofEl * (y[3] << 135 dydx[5] = cofMag * Field[2] + cofEl * (y[3]*Field[1] - y[4]*Field[0]); 133 << 136 134 // G4cout << std::setprecision(5)<< " 137 // G4cout << std::setprecision(5)<< "E=" << Energy 135 // << "; p="<< 1/pModuleInvers 138 // << "; p="<< 1/pModuleInverse 136 // << "; mC="<< magCharge 139 // << "; mC="<< magCharge 137 // <<"; x=" << y[0] 140 // <<"; x=" << y[0] 138 // <<"; y=" << y[1] 141 // <<"; y=" << y[1] 139 // <<"; z=" << y[2] 142 // <<"; z=" << y[2] 140 // <<"; dydx[3]=" << dydx[3] 143 // <<"; dydx[3]=" << dydx[3] 141 // <<"; dydx[4]=" << dydx[4] 144 // <<"; dydx[4]=" << dydx[4] 142 // <<"; dydx[5]=" << dydx[5] 145 // <<"; dydx[5]=" << dydx[5] 143 // << G4endl; 146 // << G4endl; 144 147 145 dydx[6] = 0.; // not used << 148 dydx[6] = 0.;//not used 146 << 149 147 // Lab Time of flight 150 // Lab Time of flight 148 dydx[7] = inverse_velocity; 151 dydx[7] = inverse_velocity; 149 return; 152 return; 150 } 153 } 151 154 152 //....oooOO0OOooo........oooOO0OOooo........oo 155 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 153 156