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 27 #include "G4AdjointAlongStepWeightCorrection.h 28 29 #include "G4AdjointCSManager.hh" 30 #include "G4ParticleChange.hh" 31 #include "G4ParticleDefinition.hh" 32 #include "G4Step.hh" 33 #include "G4VParticleChange.hh" 34 35 ////////////////////////////////////////////// 36 G4AdjointAlongStepWeightCorrection::G4AdjointA 37 const G4String& name, G4ProcessType type) 38 : G4VContinuousProcess(name, type) 39 { 40 fParticleChange = new G4ParticleChange(); 41 fCSManager = G4AdjointCSManager::GetAdj 42 } 43 44 ////////////////////////////////////////////// 45 G4AdjointAlongStepWeightCorrection::~G4Adjoint 46 { 47 delete fParticleChange; 48 } 49 50 ////////////////////////////////////////////// 51 void G4AdjointAlongStepWeightCorrection::Proce 52 std::ostream& out) const 53 { 54 out << 55 "Continuous processes act on adjoint particl 56 "weight during the adjoint reverse tracking. 57 "the adjoint cross sections are not scaled s 58 "section matches the total forward cross sec 59 "the total adjoint cross section is equal to 60 "is used and therefore this along step weigh 61 "in some cases (some energy ranges) the tota 62 "total adjoint cross section can be zero. In 63 "correction is needed and is given by exp(-( 64 "\n"; 65 } 66 67 ////////////////////////////////////////////// 68 G4VParticleChange* G4AdjointAlongStepWeightCor 69 const G4Track& track, const G4Step& step) 70 { 71 fParticleChange->Initialize(track); 72 73 // Get the actual (true) Step length 74 G4double length = step.GetStepLength(); 75 76 G4double Tkin = step.GetPostStepPoint()->Get 77 G4ParticleDefinition* thePartDef = const_cas 78 track.GetDynamicParticle()->GetDefinition( 79 G4double weight_correction = fCSManager->Get 80 thePartDef, fPreStepKinEnergy, Tkin, fCurr 81 82 // Caution!!! 83 // It is important to select the weight of t 84 // weight and not the weight of the track, a 85 // changed after having applied all the alon 86 G4double new_weight = 87 weight_correction * step.GetPostStepPoint( 88 89 // The following test check for zero weight. 90 // This happens after weight correction of g 91 // When the new weight is 0 it will be later 92 // Therefore we put a lower limit of 1.e-300 93 if(new_weight == 0. || (new_weight <= 0. && 94 { 95 new_weight = 1.e-300; 96 } 97 98 fParticleChange->SetParentWeightByProcess(fa 99 fParticleChange->SetSecondaryWeightByProcess 100 fParticleChange->ProposeParentWeight(new_wei 101 102 return fParticleChange; 103 } 104 105 ////////////////////////////////////////////// 106 G4double G4AdjointAlongStepWeightCorrection::G 107 const G4Track& track, G4double, G4double, G4 108 { 109 DefineMaterial(track.GetMaterialCutsCouple() 110 fPreStepKinEnergy = track.GetKineticEnergy() 111 return DBL_MAX; 112 } 113