Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 // 26 // 27 /// \file GB04BOptrBremSplitting.cc 27 /// \file GB04BOptrBremSplitting.cc 28 /// \brief Implementation of the GB04BOptrBrem 28 /// \brief Implementation of the GB04BOptrBremSplitting class 29 29 30 #include "GB04BOptrBremSplitting.hh" 30 #include "GB04BOptrBremSplitting.hh" 31 << 32 #include "GB04BOptnBremSplitting.hh" 31 #include "GB04BOptnBremSplitting.hh" 33 32 34 #include "G4BiasingProcessInterface.hh" 33 #include "G4BiasingProcessInterface.hh" 35 #include "G4GenericMessenger.hh" 34 #include "G4GenericMessenger.hh" 36 35 37 //....oooOO0OOooo........oooOO0OOooo........oo 36 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 38 37 39 GB04BOptrBremSplitting::GB04BOptrBremSplitting 38 GB04BOptrBremSplitting::GB04BOptrBremSplitting() 40 : G4VBiasingOperator("BremSplittingOperator" << 39 : G4VBiasingOperator("BremSplittingOperator"), 41 fSplittingFactor(1), << 40 fSplittingFactor(1), 42 fBiasPrimaryOnly(true), << 41 fBiasPrimaryOnly(true), 43 fBiasOnlyOnce(true) << 42 fBiasOnlyOnce(true) 44 { 43 { 45 fBremSplittingOperation = new GB04BOptnBremS 44 fBremSplittingOperation = new GB04BOptnBremSplitting("BremSplittingOperation"); 46 << 45 47 // -- Define messengers: 46 // -- Define messengers: 48 // -- Splitting factor: 47 // -- Splitting factor: 49 fSplittingFactorMessenger = new G4GenericMes << 48 fSplittingFactorMessenger = 50 G4GenericMessenger::Command& splittingFactor << 49 new G4GenericMessenger(this, "/GB04/biasing/","Biasing control" ); 51 "setSplittingFactor", fSplittingFactor, "D << 50 G4GenericMessenger::Command& splittingFactorCmd = >> 51 fSplittingFactorMessenger->DeclareProperty("setSplittingFactor", fSplittingFactor, >> 52 "Define the brem. splitting factor." ); 52 splittingFactorCmd.SetStates(G4State_Idle); 53 splittingFactorCmd.SetStates(G4State_Idle); 53 // -- Bias ony primary particle: 54 // -- Bias ony primary particle: 54 fBiasPrimaryOnlyMessenger = new G4GenericMes << 55 fBiasPrimaryOnlyMessenger = 55 G4GenericMessenger::Command& biasPrimaryCmd << 56 new G4GenericMessenger(this, "/GB04/biasing/","Biasing control" ); 56 "biasPrimaryOnly", fBiasPrimaryOnly, << 57 G4GenericMessenger::Command& biasPrimaryCmd = 57 "Chose if brem. splitting applies to prima << 58 fBiasPrimaryOnlyMessenger->DeclareProperty("biasPrimaryOnly", fBiasPrimaryOnly, >> 59 "Chose if brem. splitting applies to primary particles only." ); 58 biasPrimaryCmd.SetStates(G4State_Idle); 60 biasPrimaryCmd.SetStates(G4State_Idle); 59 // -- Bias ony primary particle: 61 // -- Bias ony primary particle: 60 fBiasOnlyOnceMessenger = new G4GenericMessen << 62 fBiasOnlyOnceMessenger = 61 G4GenericMessenger::Command& biasOnlyOnceCmd << 63 new G4GenericMessenger(this, "/GB04/biasing/","Biasing control" ); 62 "biasOnlyOnce", fBiasOnlyOnce, "Chose if a << 64 G4GenericMessenger::Command& biasOnlyOnceCmd = >> 65 fBiasPrimaryOnlyMessenger->DeclareProperty("biasOnlyOnce", fBiasOnlyOnce, >> 66 "Chose if apply the brem. splitting only once for the track." ); 63 biasOnlyOnceCmd.SetStates(G4State_Idle); 67 biasOnlyOnceCmd.SetStates(G4State_Idle); >> 68 64 } 69 } 65 70 66 //....oooOO0OOooo........oooOO0OOooo........oo 71 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 67 72 68 void GB04BOptrBremSplitting::StartRun() 73 void GB04BOptrBremSplitting::StartRun() 69 { 74 { 70 fBremSplittingOperation->SetSplittingFactor( << 75 fBremSplittingOperation->SetSplittingFactor ( fSplittingFactor ); 71 G4cout << GetName() << " : starting run with << 76 G4cout << GetName() << " : starting run with brem. splitting factor = " 72 if (fBiasPrimaryOnly) << 77 << fSplittingFactor; 73 G4cout << ", biasing only primaries "; << 78 if ( fBiasPrimaryOnly ) G4cout << ", biasing only primaries "; 74 else << 79 else G4cout << ", biasing primary and secondary tracks "; 75 G4cout << ", biasing primary and secondary << 80 if ( fBiasOnlyOnce ) G4cout << ", biasing only once per track "; 76 if (fBiasOnlyOnce) << 81 else G4cout << ", biasing several times per track "; 77 G4cout << ", biasing only once per track " << 78 else << 79 G4cout << ", biasing several times per tra << 80 G4cout << " . " << G4endl; 82 G4cout << " . " << G4endl; 81 } 83 } 82 84 83 //....oooOO0OOooo........oooOO0OOooo........oo 85 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 84 86 85 void GB04BOptrBremSplitting::StartTracking(con << 87 void GB04BOptrBremSplitting::StartTracking( const G4Track* /* track */ ) 86 { 88 { 87 // -- reset the number of times the brem. sp 89 // -- reset the number of times the brem. splitting was applied: 88 fNInteractions = 0; 90 fNInteractions = 0; 89 } 91 } 90 92 91 //....oooOO0OOooo........oooOO0OOooo........oo 93 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 92 94 93 G4VBiasingOperation* GB04BOptrBremSplitting::P << 95 G4VBiasingOperation* 94 const G4Track* track, const G4BiasingProcess << 96 GB04BOptrBremSplitting:: >> 97 ProposeFinalStateBiasingOperation(const G4Track* track, >> 98 const G4BiasingProcessInterface* /* callingProcess */) 95 { 99 { 96 // -- Check if biasing of primary particle o 100 // -- Check if biasing of primary particle only is requested. If so, and 97 // -- if particle is not a primary one, don' 101 // -- if particle is not a primary one, don't ask for biasing: 98 if (fBiasPrimaryOnly && (track->GetParentID( << 102 if ( fBiasPrimaryOnly && ( track->GetParentID() !=0 ) ) return 0; 99 // -- Check if brem. splitting should be app 103 // -- Check if brem. splitting should be applied only once to the track, 100 // -- and if so, and if brem. splitting alre 104 // -- and if so, and if brem. splitting already occured, don't ask for biasing: 101 if (fBiasOnlyOnce && (fNInteractions > 0)) r << 105 if ( fBiasOnlyOnce && ( fNInteractions > 0 ) ) return 0; 102 << 106 103 // -- Count the number of times the brem. sp 107 // -- Count the number of times the brem. splitting is applied: 104 fNInteractions++; 108 fNInteractions++; 105 // -- Return the brem. splitting operation: 109 // -- Return the brem. splitting operation: 106 return fBremSplittingOperation; 110 return fBremSplittingOperation; 107 } 111 } 108 112 109 //....oooOO0OOooo........oooOO0OOooo........oo 113 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 110 114