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 // G4BOptnForceFreeFlight 27 // ------------------------------------------- 28 #include "G4BOptnForceFreeFlight.hh" 29 #include "G4ILawForceFreeFlight.hh" 30 #include "G4BiasingProcessInterface.hh" 31 #include "G4Step.hh" 32 33 G4BOptnForceFreeFlight::G4BOptnForceFreeFlight 34 : G4VBiasingOperation( name ) 35 { 36 fForceFreeFlightInteractionLaw = new G4ILawF 37 } 38 39 G4BOptnForceFreeFlight::~G4BOptnForceFreeFligh 40 { 41 delete fForceFreeFlightInteractionLaw; 42 } 43 44 const G4VBiasingInteractionLaw* G4BOptnForceFr 45 ProvideOccurenceBiasingInteractionLaw( const G 46 G4Force 47 { 48 fOperationComplete = false; 49 proposeForceCondition = Forced; 50 return fForceFreeFlightInteractionLaw; 51 } 52 53 G4VParticleChange* G4BOptnForceFreeFlight:: 54 ApplyFinalStateBiasing( const G4BiasingProcess 55 const G4Track* track, 56 G4bool& forceFinalStat 57 { 58 // -- If the track is reaching the volume bo 59 // -- weight is brought back to non-zero val 60 // -- ApplyFinalStateBiasing operation calle 61 // -- is applied by each operation. 62 // -- If the track is not reaching the volum 63 64 fParticleChange.Initialize( *track ); 65 forceFinalState = true; 66 if ( step->GetPostStepPoint()->GetStepStatus 67 { 68 // -- Sanity checks: 69 if ( fInitialTrackWeight <= DBL_MIN ) 70 { 71 G4ExceptionDescription ed; 72 ed << " Initial track weight is null ! " 73 G4Exception(" G4BOptnForceFreeFlight::Ap 74 "BIAS.GEN.05", JustWarning, 75 } 76 if ( fCumulatedWeightChange <= DBL_MIN ) 77 { 78 G4ExceptionDescription ed; 79 ed << " Cumulated weight is null ! " << 80 G4Exception(" G4BOptnForceFreeFlight::Ap 81 "BIAS.GEN.06", JustWarning, 82 } 83 G4double proposedWeight = track->GetWeight 84 if ( callingProcess->GetIsFirstPostStepDoI 85 proposedWeight = fCumulatedWeightChange 86 else 87 proposedWeight *= fCumulatedWeightChange 88 fParticleChange.ProposeWeight(proposedWeig 89 fOperationComplete = true; 90 } 91 92 return &fParticleChange; 93 } 94 95 void G4BOptnForceFreeFlight:: 96 AlongMoveBy( const G4BiasingProcessInterface*, 97 const G4Step*, G4double weightCha 98 { 99 fCumulatedWeightChange *= weightChange; 100 } 101