Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer << 3 // * DISCLAIMER * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th << 5 // * The following disclaimer summarizes all the specific disclaimers * 6 // * the Geant4 Collaboration. It is provided << 6 // * of contributors to this software. The specific disclaimers,which * 7 // * conditions of the Geant4 Software License << 7 // * govern, are listed with their locations in: * 8 // * LICENSE and available at http://cern.ch/ << 8 // * http://cern.ch/geant4/license * 9 // * include a list of copyright holders. << 10 // * 9 // * * 11 // * Neither the authors of this software syst 10 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 11 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 12 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 13 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file << 14 // * use. * 16 // * for the full disclaimer and the limitatio << 17 // * 15 // * * 18 // * This code implementation is the result << 16 // * This code implementation is the intellectual property of the * 19 // * technical work of the GEANT4 collaboratio << 17 // * GEANT4 collaboration. * 20 // * By using, copying, modifying or distri << 18 // * By copying, distributing or modifying the Program (or any work * 21 // * any work based on the software) you ag << 19 // * based on the Program) you indicate your acceptance of this * 22 // * use in resulting scientific publicati << 20 // * statement, and all its terms. * 23 // * acceptance of all terms of the Geant4 Sof << 24 // ******************************************* 21 // ******************************************************************** 25 // 22 // 26 // G4FieldTrack implementation << 27 // 23 // 28 // Author: John Apostolakis, CERN - First vers << 24 // $Id: G4FieldTrack.cc,v 1.5 2003/06/16 16:51:12 gunter Exp $ 29 // ------------------------------------------- << 25 // GEANT4 tag $Name: geant4-05-02 $ 30 << 26 // 31 #include "G4FieldTrack.hh" 27 #include "G4FieldTrack.hh" 32 28 33 std::ostream& operator<<( std::ostream& os, co << 29 std::ostream& operator<<( std::ostream& os, G4FieldTrack& SixVec) 34 { 30 { 35 const G4double* SixV = SixVec.SixVector; << 31 G4double *SixV = SixVec.SixVector; 36 const G4int precPos= 9; // For position << 32 os << " X= " << SixV[0] << " " << SixV[1] << " " << SixV[2] << " "; 37 const G4int precEp= 9; // For Energy / << 33 os << " V= " << SixV[3] << " " << SixV[4] << " " << SixV[5] << " "; 38 const G4int precLen= 12; // For Length a << 39 const G4int precSpin= 9; // For polarisa << 40 const G4int precTime= 6; // For time of << 41 const G4long oldpr= os.precision(precPos) << 42 os << " ( "; << 43 os << " X= " << SixV[0] << " " << SixV[1] << 44 << SixV[2] << " "; // Posit << 45 os.precision(precEp); << 46 os << " P= " << SixV[3] << " " << SixV[4] << 47 << SixV[5] << " "; // Momen << 48 os << " Pmag= " << 49 << G4ThreeVector(SixV[3], SixV[4], Six << 50 os << " Ekin= " << SixVec.fKineticEnergy << 51 os.precision(precLen); << 52 os << " l= " << SixVec.GetCurveLength(); 34 os << " l= " << SixVec.GetCurveLength(); 53 os.precision(6); << 54 os << " m0= " << SixVec.fRestMass_c2; << 55 os << " (Pdir-1)= " << SixVec.fMomentumD << 56 if( SixVec.fLabTimeOfFlight > 0.0 ) << 57 { << 58 os.precision(precTime); << 59 } << 60 else << 61 { << 62 os.precision(3); << 63 } << 64 os << " t_lab= " << SixVec.fLabTimeOfF << 65 os << " t_proper= " << SixVec.fProperTime << 66 G4ThreeVector pol= SixVec.GetPolarization << 67 if( pol.mag2() > 0.0 ) << 68 { << 69 os.precision(precSpin); << 70 os << " PolV= " << pol; // SixVec.GetP << 71 } << 72 else << 73 { << 74 os << " PolV= (0,0,0) "; << 75 } << 76 os << " ) "; << 77 os.precision(oldpr); << 78 return os; 35 return os; 79 } << 80 << 81 G4FieldTrack::G4FieldTrack( const G4ThreeVecto << 82 G4double LaboratoryTimeO << 83 const G4ThreeVector& pMomentumDirect << 84 G4double kineticEnergy, << 85 G4double restMass_c2, << 86 G4double charge, << 87 const G4ThreeVector& vecPolarization << 88 G4double magnetic_dipole << 89 G4double << 90 G4double << 91 : fDistanceAlongCurve(curve_length), << 92 fKineticEnergy(kineticEnergy), << 93 fRestMass_c2(restMass_c2), << 94 fLabTimeOfFlight(LaboratoryTimeOfFlight), << 95 fProperTimeOfFlight(0.), << 96 // fMomentumDir(pMomentumDirection), << 97 fChargeState( charge, magnetic_dipole_mome << 98 // fChargeState( charge, magnetic_dipole_m << 99 // fPDGSpin( pdgSpin ) << 100 { << 101 UpdateFourMomentum( kineticEnergy, pMomentum << 102 // Sets momentum direction as well. << 103 << 104 SetPosition( pPosition ); << 105 SetPolarization( vecPolarization ); << 106 } << 107 << 108 G4FieldTrack::G4FieldTrack( const G4ThreeVecto << 109 const G4ThreeVecto << 110 G4double << 111 G4double << 112 const G4double << 113 G4double, << 114 G4double << 115 G4double << 116 const G4ThreeVecto << 117 G4double << 118 : fDistanceAlongCurve(curve_length), << 119 fKineticEnergy(kineticEnergy), << 120 fRestMass_c2(restMass_c2), << 121 fLabTimeOfFlight(pLaboratoryTimeOfFlight), << 122 fProperTimeOfFlight(pProperTimeOfFlight), << 123 fChargeState( DBL_MAX, DBL_MAX, -1.0 ) // << 124 { << 125 UpdateFourMomentum( kineticEnergy, pMomentum << 126 // Sets momentum direction as well. << 127 << 128 SetPosition( pPosition ); << 129 fChargeState.SetPDGSpin( pdgSpin ); << 130 << 131 G4ThreeVector PolarVec(0.0, 0.0, 0.0); << 132 if( pPolarization != nullptr ) { PolarVec= << 133 SetPolarization( PolarVec ); << 134 } << 135 << 136 G4FieldTrack::G4FieldTrack( char ) << 137 : fKineticEnergy(0.), fRestMass_c2(0.), fLab << 138 fProperTimeOfFlight(0.), fChargeState( DBL << 139 { << 140 G4ThreeVector Zero(0.0, 0.0, 0.0); << 141 SetCurvePnt( Zero, Zero, 0.0 ); << 142 SetPolarization( Zero ); << 143 // fInitialMomentumMag = 0.00; // Invalid << 144 // fLastMomentumMag = 0.0; << 145 } << 146 << 147 void G4FieldTrack:: << 148 SetChargeAndMoments(G4double charge, << 149 G4double magnetic_dipole_moment, // def << 150 G4double electric_dipole_moment, // dit << 151 G4double magnetic_charge ) // dit << 152 { << 153 fChargeState.SetChargesAndMoments( charge, << 154 magnetic_ << 155 electric_ << 156 magnetic_ << 157 << 158 // NOTE: Leaves Spin unchanged ! << 159 // << 160 // G4double pdgSpin= fChargeState.GetSpin(); << 161 // New Property of ChargeState (not well doc << 162 << 163 // IDEA: Improve the implementation using ha << 164 // -- and handle to the old one (which can << 165 // must not be left to hang loose << 166 // << 167 // fpChargeState= new G4ChargeState( charge << 168 // electric_dipole_moment, magneti << 169 } << 170 << 171 // Load values from array << 172 // << 173 // Note that momentum direction must-be/is nor << 174 // << 175 void G4FieldTrack::LoadFromArray(const G4doubl << 176 G4int n << 177 { << 178 // Fill the variables not integrated with ze << 179 // << 180 G4double valArr[ncompSVEC]; << 181 for(G4int i=0; i<noVarsIntegrated; ++i) << 182 { << 183 valArr[i] = valArrIn[i]; << 184 } << 185 for(G4int i=noVarsIntegrated; i<ncompSVEC; + << 186 { << 187 valArr[i] = 0.0; << 188 } << 189 << 190 SixVector[0] = valArr[0]; << 191 SixVector[1] = valArr[1]; << 192 SixVector[2] = valArr[2]; << 193 SixVector[3] = valArr[3]; << 194 SixVector[4] = valArr[4]; << 195 SixVector[5] = valArr[5]; << 196 << 197 G4ThreeVector Momentum(valArr[3],valArr[4],v << 198 << 199 G4double momentum_square= Momentum.mag2(); << 200 fMomentumDir= Momentum.unit(); << 201 << 202 fKineticEnergy = momentum_square << 203 / (std::sqrt(momentum_square+ << 204 + fRestMass_c2 ); << 205 // The above equation is stable for small << 206 << 207 // The following components may or may not b << 208 // integrated over -- integration is optiona << 209 // fKineticEnergy = valArr[6]; << 210 << 211 fLabTimeOfFlight = valArr[7]; << 212 fProperTimeOfFlight = valArr[8]; << 213 G4ThreeVector vecPolarization= G4ThreeVector << 214 SetPolarization( vecPolarization ); << 215 << 216 // fMomentumDir=G4ThreeVector(valArr[13],val << 217 // fDistanceAlongCurve= valArr[]; << 218 } 36 } 219 37