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 // $Id: G4MonopoleEquation.cc,v 1.2 2010-11-29 15:14:17 vnivanch Exp $ 27 /// \brief Implementation of the G4MonopoleEqu << 27 // GEANT4 tag $Name: not supported by cvs2svn $ 28 // << 29 // 28 // 30 //....oooOO0OOooo........oooOO0OOooo........oo 29 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 31 //....oooOO0OOooo........oooOO0OOooo........oo 30 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 32 // 31 // 33 // 32 // 34 // class G4MonopoleEquation 33 // class G4MonopoleEquation 35 // 34 // 36 // Class description: 35 // Class description: 37 // 36 // 38 // 37 // 39 // This is the standard right-hand side for e 38 // This is the standard right-hand side for equation of motion. 40 // 39 // 41 // The only case another is required is when 40 // The only case another is required is when using a moving reference 42 // frame ... or extending the class to includ 41 // frame ... or extending the class to include additional Forces, 43 // eg an electric field 42 // eg an electric field 44 // 43 // 45 // 10.11.98 V.Grichine 44 // 10.11.98 V.Grichine 46 // 45 // 47 // 30.04.10 S.Burdin (modified to use for t 46 // 30.04.10 S.Burdin (modified to use for the monopole trajectories). 48 // 47 // 49 // 15.06.10 B.Bozsogi (replaced the hardcod 48 // 15.06.10 B.Bozsogi (replaced the hardcoded magnetic charge with 50 // the one passed by G4 49 // the one passed by G4MonopoleTransportation) 51 // +workaround to pass t 50 // +workaround to pass the electric charge. 52 // << 51 // 53 // 12.07.10 S.Burdin (added equations for th 52 // 12.07.10 S.Burdin (added equations for the electric charges) 54 // ------------------------------------------- 53 // ------------------------------------------------------------------- 55 54 56 #include "G4MonopoleEquation.hh" 55 #include "G4MonopoleEquation.hh" 57 << 58 #include "G4PhysicalConstants.hh" << 59 #include "G4SystemOfUnits.hh" << 60 #include "globals.hh" 56 #include "globals.hh" 61 << 62 #include <iomanip> 57 #include <iomanip> 63 58 64 //....oooOO0OOooo........oooOO0OOooo........oo << 59 G4MonopoleEquation::G4MonopoleEquation(G4ElectroMagneticField *emField ) 65 << 60 : G4EquationOfMotion( emField ) { 66 G4MonopoleEquation::G4MonopoleEquation(G4Magne << 67 { << 68 G4cout << "G4MonopoleEquation::G4MonopoleEqu << 69 } 61 } 70 62 71 //....oooOO0OOooo........oooOO0OOooo........oo << 63 void 72 << 64 G4MonopoleEquation::SetChargeMomentumMass(G4double particleMagneticCharge, // e+ units 73 G4MonopoleEquation::~G4MonopoleEquation() {} << 65 G4double particleElectricCharge, 74 << 66 G4double particleMass) 75 //....oooOO0OOooo........oooOO0OOooo........oo << 76 << 77 void G4MonopoleEquation::SetChargeMomentumMass << 78 << 79 << 80 { 67 { 81 G4double particleMagneticCharge = particleCh << 82 G4double particleElectricCharge = particleCh << 83 << 84 // fElCharge = particleElectricCharge; 68 // fElCharge = particleElectricCharge; 85 fElCharge = eplus * particleElectricCharge * << 69 fElCharge =eplus* particleElectricCharge*c_light; 86 << 70 87 fMagCharge = eplus * particleMagneticCharge << 71 88 << 72 fMagCharge = eplus*particleMagneticCharge*c_light ; 89 // G4cout << " G4MonopoleEquation: ElectricC << 73 90 // << "; MagneticCharge=" << parti << 74 // G4cout << " G4MonopoleEquation: ElectricCharge=" << particleElectricCharge 91 // << G4endl; << 75 // << "; MagneticCharge=" << particleMagneticCharge >> 76 // << G4endl; 92 77 93 fMassCof = particleMass * particleMass; << 78 >> 79 fMassCof = particleMass*particleMass ; 94 } 80 } 95 81 96 //....oooOO0OOooo........oooOO0OOooo........oo << 82 void 97 << 83 G4MonopoleEquation::EvaluateRhsGivenB(const G4double y[], 98 void G4MonopoleEquation::EvaluateRhsGivenB(con << 84 const G4double Field[], 99 G4d << 85 G4double dydx[] ) const 100 { 86 { 101 // Components of y: << 87 102 // 0-2 dr/ds, << 88 // Components of y: 103 // 3-5 dp/ds - momentum derivatives << 89 // 0-2 dr/ds, 104 << 90 // 3-5 dp/ds - momentum derivatives 105 G4double pSquared = y[3] * y[3] + y[4] * y[4 << 91 106 << 92 G4double pSquared = y[3]*y[3] + y[4]*y[4] + y[5]*y[5] ; 107 G4double Energy = std::sqrt(pSquared + fMass << 93 108 << 94 G4double Energy = std::sqrt( pSquared + fMassCof ); 109 G4double pModuleInverse = 1.0 / std::sqrt(pS << 95 110 << 96 // G4double pModuleInverse = (pSquared <= 0.0) ? 0.0 : 1.0/std::sqrt(pSquared); 111 G4double inverse_velocity = Energy * pModule << 97 G4double pModuleInverse = 1.0/std::sqrt(pSquared); 112 << 98 113 G4double cofEl = fElCharge * pModuleInverse; << 99 G4double inverse_velocity = Energy * pModuleInverse / c_light; 114 G4double cofMag = fMagCharge * Energy * pMod << 100 115 << 101 G4double cofEl = fElCharge * pModuleInverse ; 116 dydx[0] = y[3] * pModuleInverse; << 102 G4double cofMag = fMagCharge * Energy * pModuleInverse; 117 dydx[1] = y[4] * pModuleInverse; << 103 118 dydx[2] = y[5] * pModuleInverse; << 104 119 << 105 dydx[0] = y[3]*pModuleInverse ; 120 // G4double magCharge = twopi * hbar_Planck << 106 dydx[1] = y[4]*pModuleInverse ; 121 // magnetic charge in SI units A*m conventio << 107 dydx[2] = y[5]*pModuleInverse ; 122 // see http://en.wikipedia.org/wiki/Magneti << 108 123 // G4cout << "Magnetic charge: " << magC << 109 // G4double magCharge = twopi * hbar_Planck / (eplus * mu0); 124 // dp/ds = dp/dt * dt/ds = dp/dt / v = Force << 110 // magnetic charge in SI units A*m convention 125 // dydx[3] = fMagCharge * Field[0] * invers << 111 // see http://en.wikipedia.org/wiki/Magnetic_monopole 126 // multiplied by c_light to convert to MeV/m << 112 // G4cout << "Magnetic charge: " << magCharge << G4endl; 127 // dydx[4] = fMagCharge * Field[1] * in << 113 128 // dydx[5] = fMagCharge * Field[2] * in << 114 // dp/ds = dp/dt * dt/ds = dp/dt / v = Force / velocity 129 << 115 130 dydx[3] = cofMag * Field[0] + cofEl * (y[4] << 116 // dydx[3] = fMagCharge * Field[0] * inverse_velocity * c_light; // multiplied by c_light to convert to MeV/mm 131 dydx[4] = cofMag * Field[1] + cofEl * (y[5] << 117 // dydx[4] = fMagCharge * Field[1] * inverse_velocity * c_light; 132 dydx[5] = cofMag * Field[2] + cofEl * (y[3] << 118 // dydx[5] = fMagCharge * Field[2] * inverse_velocity * c_light; 133 << 119 134 // G4cout << std::setprecision(5)<< " << 120 dydx[3] = cofMag * Field[0] + cofEl * (y[4]*Field[2] - y[5]*Field[1]); 135 // << "; p="<< 1/pModuleInvers << 121 dydx[4] = cofMag * Field[1] + cofEl * (y[5]*Field[0] - y[3]*Field[2]); 136 // << "; mC="<< magCharge << 122 dydx[5] = cofMag * Field[2] + cofEl * (y[3]*Field[1] - y[4]*Field[0]); 137 // <<"; x=" << y[0] << 123 138 // <<"; y=" << y[1] << 124 // G4cout << std::setprecision(5)<< "E=" << Energy 139 // <<"; z=" << y[2] << 125 // << "; p="<< 1/pModuleInverse 140 // <<"; dydx[3]=" << dydx[3] << 126 // << "; mC="<< magCharge 141 // <<"; dydx[4]=" << dydx[4] << 127 // <<"; x=" << y[0] 142 // <<"; dydx[5]=" << dydx[5] << 128 // <<"; y=" << y[1] 143 // << G4endl; << 129 // <<"; z=" << y[2] 144 << 130 // <<"; dydx[3]=" << dydx[3] 145 dydx[6] = 0.; // not used << 131 // <<"; dydx[4]=" << dydx[4] 146 << 132 // <<"; dydx[5]=" << dydx[5] 147 // Lab Time of flight << 133 // << G4endl; 148 dydx[7] = inverse_velocity; << 134 149 return; << 135 dydx[6] = 0.;//not used >> 136 >> 137 //////// >> 138 >> 139 // Lab Time of flight >> 140 dydx[7] = inverse_velocity; >> 141 return ; 150 } 142 } 151 << 152 //....oooOO0OOooo........oooOO0OOooo........oo << 153 143