Back to home page

Project CMSSW displayed by LXR

 
 

    


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   //Typedefs just made to make life easier :-)
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   //Make sure the element is known (for n/p-decision)
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   //  ReactionMap* m_reactionMap;
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   //Map of applicable particles
0064   std::map<const G4ParticleDefinition*, G4bool> m_knownParticles;
0065 
0066   //Proton-scattering processes
0067   ReactionMap m_protonReactionMap;
0068 
0069   //Neutron-scattering processes
0070   ReactionMap m_neutronReactionMap;
0071 
0072   G4ParticleTable* m_particleTable;
0073 
0074   ////Debug stuff
0075   G4double m_checkFraction;
0076   G4int m_n22;
0077   G4int m_n23;
0078 };
0079 
0080 #endif