File indexing completed on 2025-02-23 09:20:45
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030 #include "GB04BOptrBremSplitting.hh"
0031
0032 #include "GB04BOptnBremSplitting.hh"
0033
0034 #include "G4BiasingProcessInterface.hh"
0035 #include "G4GenericMessenger.hh"
0036
0037
0038
0039 GB04BOptrBremSplitting::GB04BOptrBremSplitting()
0040 : G4VBiasingOperator("BremSplittingOperator"),
0041 fSplittingFactor(1),
0042 fBiasPrimaryOnly(true),
0043 fBiasOnlyOnce(true)
0044 {
0045 fBremSplittingOperation = new GB04BOptnBremSplitting("BremSplittingOperation");
0046
0047
0048
0049 fSplittingFactorMessenger = new G4GenericMessenger(this, "/GB04/biasing/", "Biasing control");
0050 G4GenericMessenger::Command& splittingFactorCmd = fSplittingFactorMessenger->DeclareProperty(
0051 "setSplittingFactor", fSplittingFactor, "Define the brem. splitting factor.");
0052 splittingFactorCmd.SetStates(G4State_Idle);
0053
0054 fBiasPrimaryOnlyMessenger = new G4GenericMessenger(this, "/GB04/biasing/", "Biasing control");
0055 G4GenericMessenger::Command& biasPrimaryCmd = fBiasPrimaryOnlyMessenger->DeclareProperty(
0056 "biasPrimaryOnly", fBiasPrimaryOnly,
0057 "Chose if brem. splitting applies to primary particles only.");
0058 biasPrimaryCmd.SetStates(G4State_Idle);
0059
0060 fBiasOnlyOnceMessenger = new G4GenericMessenger(this, "/GB04/biasing/", "Biasing control");
0061 G4GenericMessenger::Command& biasOnlyOnceCmd = fBiasPrimaryOnlyMessenger->DeclareProperty(
0062 "biasOnlyOnce", fBiasOnlyOnce, "Chose if apply the brem. splitting only once for the track.");
0063 biasOnlyOnceCmd.SetStates(G4State_Idle);
0064 }
0065
0066
0067
0068 void GB04BOptrBremSplitting::StartRun()
0069 {
0070 fBremSplittingOperation->SetSplittingFactor(fSplittingFactor);
0071 G4cout << GetName() << " : starting run with brem. splitting factor = " << fSplittingFactor;
0072 if (fBiasPrimaryOnly)
0073 G4cout << ", biasing only primaries ";
0074 else
0075 G4cout << ", biasing primary and secondary tracks ";
0076 if (fBiasOnlyOnce)
0077 G4cout << ", biasing only once per track ";
0078 else
0079 G4cout << ", biasing several times per track ";
0080 G4cout << " . " << G4endl;
0081 }
0082
0083
0084
0085 void GB04BOptrBremSplitting::StartTracking(const G4Track* )
0086 {
0087
0088 fNInteractions = 0;
0089 }
0090
0091
0092
0093 G4VBiasingOperation* GB04BOptrBremSplitting::ProposeFinalStateBiasingOperation(
0094 const G4Track* track, const G4BiasingProcessInterface* )
0095 {
0096
0097
0098 if (fBiasPrimaryOnly && (track->GetParentID() != 0)) return 0;
0099
0100
0101 if (fBiasOnlyOnce && (fNInteractions > 0)) return 0;
0102
0103
0104 fNInteractions++;
0105
0106 return fBremSplittingOperation;
0107 }
0108
0109