File indexing completed on 2025-09-13 08:57:56
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 #ifndef G4ParticleHPFSFissionFS_h
0030 #define G4ParticleHPFSFissionFS_h 1
0031
0032 #include "G4Cache.hh"
0033 #include "G4DynamicParticleVector.hh"
0034 #include "G4HadProjectile.hh"
0035 #include "G4ParticleHPAngular.hh"
0036 #include "G4ParticleHPEnergyDistribution.hh"
0037 #include "G4ParticleHPFinalState.hh"
0038 #include "G4ParticleHPFissionERelease.hh"
0039 #include "G4ParticleHPNames.hh"
0040 #include "G4ParticleHPParticleYield.hh"
0041 #include "G4ParticleHPPhotonDist.hh"
0042 #include "G4ParticleHPVector.hh"
0043 #include "globals.hh"
0044
0045 class G4ParticleHPFSFissionFS : public G4ParticleHPFinalState
0046 {
0047 struct toBeCached
0048 {
0049 const G4ReactionProduct* theNeutronRP{nullptr};
0050 const G4ReactionProduct* theTarget{nullptr};
0051 toBeCached() = default;
0052 };
0053
0054 public:
0055
0056 G4ParticleHPFSFissionFS() { hasXsec = true; }
0057 ~G4ParticleHPFSFissionFS() override = default;
0058
0059 void Init(G4double A, G4double Z, G4int M, const G4String& dirName,
0060 const G4String& aFSType, G4ParticleDefinition*) override;
0061
0062 G4DynamicParticleVector* ApplyYourself(G4int Prompt, G4int delayed, G4double* decayconst);
0063
0064 G4ParticleHPFinalState* New() override
0065 {
0066 auto theNew = new G4ParticleHPFSFissionFS;
0067 return theNew;
0068 }
0069
0070 inline G4double GetMass() const { return theFinalStateNeutrons.GetTargetMass(); }
0071
0072 void SampleNeutronMult(G4int& all, G4int& Prompt, G4int& delayed, G4double energy, G4int off);
0073
0074 inline void SetNeutronRP(const G4ReactionProduct& aNeutron)
0075 {
0076 fCache.Get().theNeutronRP = &aNeutron;
0077 theNeutronAngularDis.SetProjectileRP(aNeutron);
0078 }
0079
0080 inline void SetTarget(const G4ReactionProduct& aTarget)
0081 {
0082 fCache.Get().theTarget = &aTarget;
0083 theNeutronAngularDis.SetTarget(aTarget);
0084 }
0085
0086 G4DynamicParticleVector* GetPhotons();
0087
0088 inline G4ParticleHPFissionERelease* GetEnergyRelease() { return &theEnergyRelease; }
0089
0090 private:
0091
0092 G4HadFinalState* ApplyYourself(const G4HadProjectile&) override { return nullptr; }
0093
0094 G4ParticleHPParticleYield theFinalStateNeutrons;
0095 G4ParticleHPEnergyDistribution thePromptNeutronEnDis;
0096 G4ParticleHPEnergyDistribution theDelayedNeutronEnDis;
0097 G4ParticleHPAngular theNeutronAngularDis;
0098
0099 G4ParticleHPPhotonDist theFinalStatePhotons;
0100 G4ParticleHPFissionERelease theEnergyRelease;
0101
0102 G4Cache<toBeCached> fCache;
0103 G4ParticleHPNames theNames;
0104 };
0105
0106 #endif