File indexing completed on 2026-09-14 08:27:29
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 #include "GB04BOptrBremSplitting.hh"
0030
0031 #include "GB04BOptnBremSplitting.hh"
0032
0033 #include "G4BiasingProcessInterface.hh"
0034 #include "G4GenericMessenger.hh"
0035
0036
0037
0038 GB04BOptrBremSplitting::GB04BOptrBremSplitting()
0039 : G4VBiasingOperator("BremSplittingOperator"),
0040 fSplittingFactor(1),
0041 fBiasPrimaryOnly(true),
0042 fBiasOnlyOnce(true)
0043 {
0044 fBremSplittingOperation = new GB04BOptnBremSplitting("BremSplittingOperation");
0045
0046
0047
0048 fSplittingFactorMessenger = new G4GenericMessenger(this, "/GB04/biasing/", "Biasing control");
0049 G4GenericMessenger::Command& splittingFactorCmd = fSplittingFactorMessenger->DeclareProperty(
0050 "setSplittingFactor", fSplittingFactor, "Define the brem. splitting factor.");
0051 splittingFactorCmd.SetStates(G4State_Idle);
0052
0053 fBiasPrimaryOnlyMessenger = new G4GenericMessenger(this, "/GB04/biasing/", "Biasing control");
0054 G4GenericMessenger::Command& biasPrimaryCmd = fBiasPrimaryOnlyMessenger->DeclareProperty(
0055 "biasPrimaryOnly", fBiasPrimaryOnly,
0056 "Chose if brem. splitting applies to primary particles only.");
0057 biasPrimaryCmd.SetStates(G4State_Idle);
0058
0059 fBiasOnlyOnceMessenger = new G4GenericMessenger(this, "/GB04/biasing/", "Biasing control");
0060 G4GenericMessenger::Command& biasOnlyOnceCmd = fBiasPrimaryOnlyMessenger->DeclareProperty(
0061 "biasOnlyOnce", fBiasOnlyOnce, "Chose if apply the brem. splitting only once for the track.");
0062 biasOnlyOnceCmd.SetStates(G4State_Idle);
0063 }
0064
0065
0066
0067 void GB04BOptrBremSplitting::StartRun()
0068 {
0069 fBremSplittingOperation->SetSplittingFactor(fSplittingFactor);
0070 G4cout << GetName() << " : starting run with brem. splitting factor = " << fSplittingFactor;
0071 if (fBiasPrimaryOnly)
0072 G4cout << ", biasing only primaries ";
0073 else
0074 G4cout << ", biasing primary and secondary tracks ";
0075 if (fBiasOnlyOnce)
0076 G4cout << ", biasing only once per track ";
0077 else
0078 G4cout << ", biasing several times per track ";
0079 G4cout << " . " << G4endl;
0080 }
0081
0082
0083
0084 void GB04BOptrBremSplitting::StartTracking(const G4Track* )
0085 {
0086
0087 fNInteractions = 0;
0088 }
0089
0090
0091
0092 G4VBiasingOperation* GB04BOptrBremSplitting::ProposeFinalStateBiasingOperation(
0093 const G4Track* track, const G4BiasingProcessInterface* )
0094 {
0095
0096
0097 if (fBiasPrimaryOnly && (track->GetParentID() != 0)) return nullptr;
0098
0099
0100 if (fBiasOnlyOnce && (fNInteractions > 0)) return nullptr;
0101
0102
0103 fNInteractions++;
0104
0105 return fBremSplittingOperation;
0106 }
0107
0108