File indexing completed on 2025-01-18 09:58:15
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 #ifndef G4ExcitationHandler_h
0048 #define G4ExcitationHandler_h 1
0049
0050 #include "globals.hh"
0051 #include "G4Fragment.hh"
0052 #include "G4ReactionProductVector.hh"
0053 #include "G4IonTable.hh"
0054 #include "G4DeexPrecoParameters.hh"
0055 #include "G4NistManager.hh"
0056
0057 class G4VMultiFragmentation;
0058 class G4VFermiBreakUp;
0059 class G4VEvaporation;
0060 class G4VEvaporationChannel;
0061 class G4ParticleTable;
0062
0063 class G4ExcitationHandler
0064 {
0065 public:
0066
0067 G4ExcitationHandler();
0068 ~G4ExcitationHandler();
0069
0070 G4ReactionProductVector* BreakItUp(const G4Fragment &theInitialState);
0071
0072
0073 void ModelDescription(std::ostream& outFile) const;
0074
0075 void Initialise();
0076
0077
0078
0079 void SetEvaporation(G4VEvaporation* ptr, G4bool isLocal=false);
0080 void SetMultiFragmentation(G4VMultiFragmentation* ptr);
0081 void SetFermiModel(G4VFermiBreakUp* ptr);
0082 void SetPhotonEvaporation(G4VEvaporationChannel* ptr);
0083 void SetDeexChannelsType(G4DeexChannelType val);
0084
0085
0086
0087
0088 inline void SetMaxZForFermiBreakUp(G4int aZ);
0089 inline void SetMaxAForFermiBreakUp(G4int anA);
0090 inline void SetMaxAandZForFermiBreakUp(G4int anA,G4int aZ);
0091 inline void SetMinEForMultiFrag(G4double anE);
0092
0093
0094 G4VEvaporation* GetEvaporation();
0095 G4VMultiFragmentation* GetMultiFragmentation();
0096 G4VFermiBreakUp* GetFermiModel();
0097 G4VEvaporationChannel* GetPhotonEvaporation();
0098
0099
0100 inline void SetOPTxs(G4int opt);
0101
0102 inline void UseSICB();
0103
0104
0105
0106 G4ExcitationHandler(const G4ExcitationHandler &right) = delete;
0107 const G4ExcitationHandler & operator
0108 =(const G4ExcitationHandler &right) = delete;
0109 G4bool operator==(const G4ExcitationHandler &right) const = delete;
0110 G4bool operator!=(const G4ExcitationHandler &right) const = delete;
0111
0112 private:
0113
0114 void SetParameters();
0115
0116 inline void SortSecondaryFragment(G4Fragment*);
0117
0118 G4VEvaporation* theEvaporation{nullptr};
0119 G4VMultiFragmentation* theMultiFragmentation;
0120 G4VFermiBreakUp* theFermiModel;
0121 G4VEvaporationChannel* thePhotonEvaporation;
0122 G4ParticleTable* thePartTable;
0123 G4IonTable* theTableOfIons;
0124 G4NistManager* nist;
0125
0126 const G4ParticleDefinition* theElectron;
0127 const G4ParticleDefinition* theNeutron;
0128 const G4ParticleDefinition* theProton;
0129 const G4ParticleDefinition* theDeuteron;
0130 const G4ParticleDefinition* theTriton;
0131 const G4ParticleDefinition* theHe3;
0132 const G4ParticleDefinition* theAlpha;
0133 const G4ParticleDefinition* theLambda;
0134
0135 G4int icID{0};
0136
0137 G4int maxZForFermiBreakUp{9};
0138 G4int maxAForFermiBreakUp{17};
0139
0140 G4int fVerbose{1};
0141 G4int fWarnings{0};
0142
0143 G4double minEForMultiFrag;
0144 G4double minExcitation;
0145 G4double maxExcitation;
0146 G4double fLambdaMass;
0147
0148 G4bool isInitialised{false};
0149 G4bool isEvapLocal{true};
0150 G4bool isActive{true};
0151
0152
0153 std::vector<G4Fragment*> theResults;
0154
0155
0156 std::vector<G4Fragment*> results;
0157
0158
0159 std::vector<G4Fragment*> theEvapList;
0160 };
0161
0162 inline void G4ExcitationHandler::SetMaxZForFermiBreakUp(G4int aZ)
0163 {
0164 maxZForFermiBreakUp = aZ;
0165 }
0166
0167 inline void G4ExcitationHandler::SetMaxAForFermiBreakUp(G4int anA)
0168 {
0169 maxAForFermiBreakUp = anA;
0170 }
0171
0172 inline void G4ExcitationHandler::SetMaxAandZForFermiBreakUp(G4int anA, G4int aZ)
0173 {
0174 SetMaxAForFermiBreakUp(anA);
0175 SetMaxZForFermiBreakUp(aZ);
0176 }
0177
0178 inline void G4ExcitationHandler::SetMinEForMultiFrag(G4double anE)
0179 {
0180 minEForMultiFrag = anE;
0181 }
0182
0183 inline void G4ExcitationHandler::SortSecondaryFragment(G4Fragment* frag)
0184 {
0185 G4int A = frag->GetA_asInt();
0186
0187
0188 if(A <= 1 || frag->IsLongLived()) {
0189 theResults.push_back(frag);
0190 } else if(frag->GetExcitationEnergy() < minExcitation) {
0191
0192 G4int Z = frag->GetZ_asInt();
0193
0194
0195 if(nist->GetIsotopeAbundance(Z, A) > 0.0 || (A == 3 && (Z == 1 || Z == 2)) ) {
0196 theResults.push_back(frag);
0197 } else {
0198 theEvapList.push_back(frag);
0199 }
0200
0201 } else {
0202 theEvapList.push_back(frag);
0203 }
0204 }
0205
0206 #endif