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 // G4InteractionLawPhysical 27 // ------------------------------------------- 28 29 #include "G4InteractionLawPhysical.hh" 30 #include "Randomize.hh" 31 32 G4InteractionLawPhysical::G4InteractionLawPhys 33 : G4VBiasingInteractionLaw(name) 34 {} 35 36 G4InteractionLawPhysical::~G4InteractionLawPhy 37 {} 38 39 void G4InteractionLawPhysical::SetPhysicalCros 40 { 41 if (crossSection < 0.0) 42 { 43 G4Exception("G4InteractionLawPhysical::Set 44 "BIAS.GEN.14", JustWarning, 45 "Cross-section value passed is 46 crossSection = 0.0; 47 } 48 fCrossSectionDefined = true; 49 fCrossSection = crossSection; 50 } 51 52 G4double G4InteractionLawPhysical:: 53 ComputeEffectiveCrossSectionAt(G4double) const 54 { 55 if (!fCrossSectionDefined) 56 { 57 G4Exception("G4InteractionLawPhysical::Com 58 "BIAS.GEN.15", JustWarning, 59 "Cross-section value requested 60 } 61 return fCrossSection; 62 } 63 64 G4double G4InteractionLawPhysical:: 65 ComputeNonInteractionProbabilityAt(G4double st 66 { 67 if (!fCrossSectionDefined) 68 { 69 G4Exception("G4InteractionLawPhysical::Com 70 "BIAS.GEN.16", JustWarning, 71 "Non interaction probabitlity 72 } 73 // -- allows zero cross-section case, by con 74 if ( fCrossSection == 0.0 ) return 1.0; 75 else return std::exp(-fCrossSection*stepLeng 76 } 77 78 G4double G4InteractionLawPhysical::SampleInter 79 { 80 if ( !fCrossSectionDefined || fCrossSection 81 { 82 G4Exception("G4InteractionLawPhysical::Sam 83 "BIAS.GEN.17", FatalException, 84 "Trying to sample while cross- 85 } 86 if ( fCrossSection == 0.0 ) return DBL_MAX; 87 88 fNumberOfInteractionLength = -std::log( G4Un 89 return fNumberOfInteractionLength/fCrossSect 90 } 91 92 G4double G4InteractionLawPhysical:: 93 UpdateInteractionLengthForStep(G4double truePa 94 { 95 fNumberOfInteractionLength -= truePathLength 96 97 if ( fNumberOfInteractionLength < 0 ) 98 { 99 G4ExceptionDescription ed; 100 ed << " Negative number of interaction len 101 << "' " << fNumberOfInteractionLength < 102 G4Exception("G4InteractionLawPhysical::Upd 103 "BIAS.GEN.13", JustWarning, ed 104 fNumberOfInteractionLength = 0.; 105 } 106 return fNumberOfInteractionLength/fCrossSec 107 } 108