Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // G4ParticleChangeForGamma class implementati 27 // 28 // Author: Hisaya Kurashige, 23 March 1998 29 // Revision: Vladimir Ivantchenko, 15 April 20 30 // ------------------------------------------- 31 32 #include "G4ParticleChangeForGamma.hh" 33 #include "G4SystemOfUnits.hh" 34 #include "G4Track.hh" 35 #include "G4Step.hh" 36 #include "G4DynamicParticle.hh" 37 #include "G4ExceptionSeverity.hh" 38 39 // ------------------------------------------- 40 G4ParticleChangeForGamma::G4ParticleChangeForG 41 { 42 // Disable flag to avoid check of each secon 43 debugFlag = false; 44 SetNumberOfSecondaries(2); 45 } 46 47 // ------------------------------------------- 48 void G4ParticleChangeForGamma::AddSecondary(G4 49 { 50 // create track 51 G4Track* aTrack = new G4Track(aParticle, the 52 theCurrentTrac 53 54 // touchable handle is copied to keep the po 55 aTrack->SetTouchableHandle(theCurrentTrack-> 56 57 // add a secondary 58 G4VParticleChange::AddSecondary(aTrack); 59 } 60 61 // ------------------------------------------- 62 G4Step* G4ParticleChangeForGamma::UpdateStepFo 63 { 64 pStep->AddTotalEnergyDeposit(theLocalEnergyD 65 pStep->SetStepLength(0.0); 66 67 if(isParentWeightProposed) 68 { 69 pStep->GetPostStepPoint()->SetWeight(thePa 70 } 71 72 return pStep; 73 } 74 75 // ------------------------------------------- 76 G4Step* G4ParticleChangeForGamma::UpdateStepFo 77 { 78 G4StepPoint* pPostStepPoint = pStep->GetPost 79 80 pPostStepPoint->SetMomentumDirection(propose 81 pPostStepPoint->SetPolarization(proposedPola 82 83 // update velocity for scattering process an 84 if(proposedKinEnergy > 0.0) 85 { 86 pPostStepPoint->SetKineticEnergy(proposedK 87 G4double mass = theCurrentTrack->GetDefini 88 G4double v = CLHEP::c_light; 89 if(mass > 0.0) { 90 v *= std::sqrt(proposedKinEnergy*(propos 91 (proposedKinEnergy + mass); 92 } 93 pPostStepPoint->SetVelocity(v); 94 } 95 else 96 { 97 pPostStepPoint->SetKineticEnergy(0.0); 98 pPostStepPoint->SetVelocity(0.0); 99 } 100 101 if(isParentWeightProposed) 102 { 103 pPostStepPoint->SetWeight(theParentWeight) 104 } 105 106 pStep->AddTotalEnergyDeposit(theLocalEnergyD 107 pStep->AddNonIonizingEnergyDeposit(theNonIon 108 return pStep; 109 } 110 111 // ------------------------------------------- 112 void G4ParticleChangeForGamma::DumpInfo() cons 113 { 114 // use base-class DumpInfo 115 G4VParticleChange::DumpInfo(); 116 117 G4long oldprc = G4cout.precision(8); 118 G4cout << " --------------------------- 119 G4cout << " G4ParticleChangeForGamma 120 G4cout << " Kinetic Energy (MeV): " < 121 << proposedKinEnergy / MeV << G4endl; 122 G4cout << " Momentum Direction: " << 123 << proposedMomentumDirection << G4end 124 G4cout << " Polarization: " << std::s 125 << G4endl; 126 G4cout.precision(oldprc); 127 } 128 129