File indexing completed on 2026-08-30 08:53:01
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
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048 #ifndef G4PreCompoundModel_h
0049 #define G4PreCompoundModel_h 1
0050
0051 #include "G4VPreCompoundModel.hh"
0052 #include "G4Fragment.hh"
0053 #include "G4ReactionProductVector.hh"
0054 #include "G4ReactionProduct.hh"
0055 #include "G4ExcitationHandler.hh"
0056
0057 class G4PreCompoundInterface;
0058 class G4PreCompoundEmission;
0059 class G4VPreCompoundTransitions;
0060 class G4NuclearLevelData;
0061 class G4ParticleDefinition;
0062 class G4VMultiFragmentation;
0063
0064 class G4PreCompoundModel : public G4VPreCompoundModel
0065 {
0066 public:
0067
0068 explicit G4PreCompoundModel(G4ExcitationHandler* ptr = nullptr);
0069
0070 ~G4PreCompoundModel() override;
0071
0072 G4HadFinalState* ApplyYourself(const G4HadProjectile& thePrimary,
0073 G4Nucleus& theNucleus) override;
0074
0075 G4ReactionProductVector* DeExcite(G4Fragment& aFragment) override;
0076
0077 void BuildPhysicsTable(const G4ParticleDefinition&) override;
0078
0079 void InitialiseModel() override;
0080
0081 void ModelDescription(std::ostream& outFile) const override;
0082 void DeExciteModelDescription(std::ostream& outFile) const override;
0083
0084 G4PreCompoundModel(const G4PreCompoundModel&) = delete;
0085 const G4PreCompoundModel& operator=(const G4PreCompoundModel &right) = delete;
0086 G4bool operator==(const G4PreCompoundModel &right) const = delete;
0087 G4bool operator!=(const G4PreCompoundModel &right) const = delete;
0088
0089 private:
0090
0091 void DoIt(G4ReactionProductVector* result, G4Fragment&);
0092
0093 inline
0094 void PerformEquilibriumEmission(const G4Fragment& aFragment,
0095 G4ReactionProductVector* result) const;
0096
0097 G4PreCompoundInterface* fInterface{nullptr};
0098 G4PreCompoundEmission* theEmission{nullptr};
0099 G4VPreCompoundTransitions* theTransition{nullptr};
0100 G4NuclearLevelData* fNuclData{nullptr};
0101 G4VMultiFragmentation* theMultiFrag{nullptr};
0102
0103 const G4ParticleDefinition* proton;
0104 const G4ParticleDefinition* neutron;
0105
0106 G4double fLowLimitExc{0.0};
0107 G4double fHighLimitExc{0.0};
0108 G4double fFermiBreakUpExc{DBL_MAX};
0109 G4double fMinEForMultiFrag{DBL_MAX};
0110
0111 G4bool useSCO{false};
0112 G4bool isInitialised{false};
0113 G4bool isActive{true};
0114 G4bool usePrecoInterface{false};
0115
0116 G4int minZ{3};
0117 G4int minA{5};
0118 G4int modelID{-1};
0119 G4int fVerbose{1};
0120
0121 G4HadFinalState theResult;
0122 };
0123
0124 inline void G4PreCompoundModel::PerformEquilibriumEmission(
0125 const G4Fragment& aFragment,
0126 G4ReactionProductVector* result) const
0127 {
0128 auto deexResult = GetExcitationHandler()->BreakItUp(aFragment);
0129 for (auto & frag : *deexResult) { result->push_back(std::move(frag)); }
0130 delete deexResult;
0131 }
0132
0133 #endif
0134