File indexing completed on 2025-11-03 09:48: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 #ifndef G4LightIonQMDReaction_hh
0043 #define G4LightIonQMDReaction_hh
0044 
0045 #include "G4QMDSystem.hh"
0046 #include "G4LightIonQMDCollision.hh"
0047 #include "G4LightIonQMDMeanField.hh"
0048 #include "G4QMDParticipant.hh"
0049 
0050 #include "G4HadronicInteraction.hh"
0051 
0052 #include "G4Evaporation.hh"
0053 #include "G4ExcitationHandler.hh"
0054 
0055 class G4VCrossSectionDataSet;
0056 class G4BGGPionElasticXS;
0057 class G4BGGPionInelasticXS;
0058 
0059 class G4LightIonQMDReaction : public G4HadronicInteraction
0060 {
0061   public:
0062     G4LightIonQMDReaction();
0063     ~G4LightIonQMDReaction() override;
0064 
0065     std::vector< G4QMDSystem* > GetFinalStates(); 
0066 
0067     G4HadFinalState* ApplyYourself(const G4HadProjectile &aTrack,
0068                                    G4Nucleus & targetNucleus) override;
0069 
0070     G4ExcitationHandler* GetExcitationHandler() {return excitationHandler;};
0071 
0072     void UnUseGEM() {gem = false; setEvaporationCh();};
0073     void UseFRAG() {frag = true;};
0074 
0075     void SetTMAX(G4int i) { maxTime = i; };
0076     void SetDT(G4double t) { deltaT = t; };
0077     void SetEF(G4double x) { envelopF = x; };
0078 
0079     void ModelDescription(std::ostream& outFile) const override;
0080 
0081     
0082     G4LightIonQMDReaction(const G4LightIonQMDReaction& right) = delete;
0083     const G4LightIonQMDReaction& operator = (const G4LightIonQMDReaction& right) = delete;
0084 
0085   private:
0086 
0087     void setEvaporationCh();
0088     void setHighEnergyModel();
0089 
0090     G4LightIonQMDMeanField* meanField;
0091 
0092     G4LightIonQMDCollision* collision;
0093 
0094     void doCollision();
0095     std::vector< G4QMDSystem* > doClusterJudgment();
0096       
0097     G4QMDSystem* system;
0098     G4double deltaT;
0099     G4int maxTime;
0100     G4double envelopF;
0101 
0102     G4ExcitationHandler* excitationHandler;
0103 
0104       
0105 
0106       
0107 
0108     void calcOffSetOfCollision(G4double, const G4ParticleDefinition*,
0109                                const G4ParticleDefinition*, G4double,
0110                                G4double, G4double, G4ThreeVector);
0111 
0112     G4double coulomb_collision_gamma_proj;
0113     G4double coulomb_collision_rx_proj;
0114     G4double coulomb_collision_rz_proj;
0115     G4double coulomb_collision_px_proj;
0116     G4double coulomb_collision_pz_proj;
0117 
0118     G4double coulomb_collision_gamma_targ;
0119     G4double coulomb_collision_rx_targ;
0120     G4double coulomb_collision_rz_targ;
0121     G4double coulomb_collision_px_targ;
0122     G4double coulomb_collision_pz_targ;
0123 
0124     G4VCrossSectionDataSet* theXS;
0125 
0126     G4BGGPionElasticXS* pipElNucXS;
0127     G4BGGPionElasticXS* pimElNucXS;
0128     G4BGGPionInelasticXS* pipInelNucXS;
0129     G4BGGPionInelasticXS* pimInelNucXS;
0130 
0131     G4bool gem;
0132     G4bool frag;
0133     G4int secID;  
0134 };
0135 
0136 #endif