File indexing completed on 2024-04-06 12:30:19
0001 #ifndef SimG4Core_CustomPhysics_HadronicProcessHelper_H
0002 #define SimG4Core_CustomPhysics_HadronicProcessHelper_H
0003
0004 #include "globals.hh"
0005 #include "G4ParticleDefinition.hh"
0006 #include "G4DynamicParticle.hh"
0007 #include "G4Element.hh"
0008 #include "G4Track.hh"
0009
0010 #include <vector>
0011 #include <map>
0012 #include <string>
0013
0014 class G4ParticleTable;
0015
0016 class HadronicProcessHelper {
0017 public:
0018
0019 typedef std::vector<G4int> ReactionProduct;
0020 typedef std::vector<ReactionProduct> ReactionProductList;
0021 typedef std::map<G4int, ReactionProductList> ReactionMap;
0022
0023 HadronicProcessHelper(const std::string& fileName);
0024
0025 HadronicProcessHelper(const HadronicProcessHelper&);
0026
0027 HadronicProcessHelper& operator=(const HadronicProcessHelper&);
0028
0029 HadronicProcessHelper* instance() { return this; };
0030
0031 G4bool applicabilityTester(const G4ParticleDefinition& particle);
0032
0033 G4double inclusiveCrossSection(const G4DynamicParticle* particle, const G4Element* element);
0034
0035
0036 ReactionProduct finalState(const G4Track& track, G4ParticleDefinition*& target) {
0037 return finalState(track.GetDynamicParticle(), track.GetMaterial(), target);
0038 }
0039 ReactionProduct finalState(const G4DynamicParticle* particle,
0040 const G4Material* material,
0041 G4ParticleDefinition*& target);
0042
0043 private:
0044 G4ParticleDefinition* m_proton;
0045 G4ParticleDefinition* m_neutron;
0046
0047
0048
0049 G4double m_phaseSpace(const ReactionProduct& aReaction,
0050 const G4DynamicParticle* aDynamicParticle,
0051 G4ParticleDefinition* target);
0052
0053 G4double m_reactionProductMass(const ReactionProduct& aReaction,
0054 const G4DynamicParticle* aDynamicParticle,
0055 G4ParticleDefinition* target);
0056
0057 G4bool m_reactionIsPossible(const ReactionProduct& aReaction,
0058 const G4DynamicParticle* aDynamicParticle,
0059 G4ParticleDefinition* target);
0060
0061 void m_readAndParse(const G4String& str, std::vector<G4String>& tokens, const G4String& delimiters = " ");
0062
0063
0064 std::map<const G4ParticleDefinition*, G4bool> m_knownParticles;
0065
0066
0067 ReactionMap m_protonReactionMap;
0068
0069
0070 ReactionMap m_neutronReactionMap;
0071
0072 G4ParticleTable* m_particleTable;
0073
0074
0075 G4double m_checkFraction;
0076 G4int m_n22;
0077 G4int m_n23;
0078 };
0079
0080 #endif