Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // 27 // 28 // Class Description 29 // Final state production code for hadron inel 30 // based on the modeling ansatz used in FRITIO 31 // To be used in your physics list in case you 32 // In this case you want to register an object 33 // of G4TheoFSGenerator. 34 // Class Description - End 35 36 #ifndef G4FTFModel_h 37 #define G4FTFModel_h 1 38 39 // ------------------------------------------- 40 // GEANT 4 class header file 41 // 42 // ---------------- G4FTFModel ---------- 43 // by Gunter Folger, May 1998. 44 // class implementing the excitation in 45 // ------------------------------------------- 46 47 #include "G4VPartonStringModel.hh" 48 #include "G4FTFParameters.hh" 49 #include "G4FTFParticipants.hh" 50 #include "G4ExcitedStringVector.hh" 51 #include "G4DiffractiveExcitation.hh" 52 #include "G4ElasticHNScattering.hh" 53 #include "G4FTFAnnihilation.hh" 54 #include "G4Proton.hh" 55 #include "G4Neutron.hh" 56 57 class G4VSplitableHadron; 58 class G4ExcitedString; 59 60 61 class G4FTFModel : public G4VPartonStringModel 62 public: 63 G4FTFModel( const G4String& modelName = "F 64 ~G4FTFModel() override; 65 66 G4V3DNucleus* GetTargetNucleus() const; 67 G4V3DNucleus* GetWoundedNucleus() const ov 68 G4V3DNucleus* GetProjectileNucleus() const 69 70 void ModelDescription( std::ostream& ) con 71 72 G4FTFModel( const G4FTFModel& right ) = de 73 const G4FTFModel& operator=( const G4FTFMo 74 G4bool operator==( const G4FTFModel& right 75 G4bool operator!=( const G4FTFModel& right 76 77 void SetImpactParameter( const G4double b_ 78 G4double GetImpactParameter() const; 79 void SetBminBmax( const G4double bmin_valu 80 G4bool SampleBinInterval() const; 81 G4double GetBmin() const; 82 G4double GetBmax() const; 83 G4int GetNumberOfProjectileSpectatorNucleo 84 G4int GetNumberOfTargetSpectatorNucleons() 85 G4int GetNumberOfNNcollisions() const; 86 87 protected: 88 void Init( const G4Nucleus& aNucleus, 89 const G4DynamicParticle& aProje 90 G4ExcitedStringVector* GetStrings() overri 91 92 private: 93 void StoreInvolvedNucleon(); 94 void ReggeonCascade(); 95 G4bool PutOnMassShell(); 96 G4bool ExciteParticipants(); 97 void BuildStrings( G4ExcitedStringVector* 98 void GetResiduals(); 99 100 G4bool AdjustNucleons( G4VSplitableHadron* 101 G4Nucleon* 102 G4VSplitableHadron* 103 G4Nucleon* 104 G4bool 105 // The "AdjustNucleons" method uses the fo 106 struct CommonVariables { 107 G4int TResidualMassNumber = 0, TResidual 108 PResidualCharge = 0, PResidualLambdaNu 109 G4double SqrtS = 0.0, S = 0.0, SumMasses 110 TResidualExcitationEnergy = 0.0, TResi 111 PResidualExcitationEnergy = 0.0, PResi 112 Mprojectile = 0.0, M2projectile = 0.0, 113 WplusProjectile = 0.0, 114 Mtarget = 0.0, M2target = 0.0, Pztarge 115 Mt2targetNucleon = 0.0, PztargetNucleo 116 Mt2projectileNucleon = 0.0, Pzprojecti 117 YtargetNucleus = 0.0, YprojectileNucle 118 XminusNucleon = 0.0, XplusNucleon = 0. 119 G4ThreeVector PtNucleon, PtResidual, PtN 120 G4LorentzVector Psum, Pprojectile, Ptmp, 121 G4LorentzRotation toCms, toLab; 122 }; 123 G4int AdjustNucleonsAlgorithm_beforeSampli 124 125 126 127 128 129 130 G4bool AdjustNucleonsAlgorithm_Sampling( 131 132 void AdjustNucleonsAlgorithm_afterSampling 133 134 135 136 137 G4ThreeVector GaussianPt( G4double Average 138 139 G4bool ComputeNucleusProperties( G4V3DNucl 140 G4Lorentz 141 G4double& 142 G4int& re 143 // Utility method used by PutOnMassShell. 144 145 G4bool GenerateDeltaIsobar( const G4double 146 G4Nucleon* inv 147 // Utility method used by PutOnMassShell. 148 149 G4bool SamplingNucleonKinematics( G4double 150 G4double 151 const G4 152 const G4 153 const G4 154 G4Nucleo 155 156 // Utility method used by PutOnMassShell. 157 158 G4bool CheckKinematics( const G4double sVa 159 const G4double pro 160 const G4double nuc 161 const G4int number 162 G4double& targetWm 163 // Utility method used by PutOnMassShell. 164 165 G4bool FinalizeKinematics( const G4double 166 const G4Lorentz 167 const G4double 168 const G4int num 169 G4Nucleon* invo 170 G4LorentzVector& resi 171 // Utility method used by PutOnMassShell. 172 173 G4ReactionProduct theProjectile; 174 G4FTFParticipants theParticipants; 175 176 G4Nucleon* TheInvolvedNucleonsOfTarget[250 177 G4int NumberOfInvolvedNucleonsOfTarget; 178 179 G4Nucleon* TheInvolvedNucleonsOfProjectile 180 G4int NumberOfInvolvedNucleonsOfProjectile 181 182 G4FTFParameters* theParameters; 183 G4DiffractiveExcitation* theExcitation; 184 G4ElasticHNScattering* theElastic; 185 G4FTFAnnihilation* theAnnihilation; 186 187 std::vector< G4VSplitableHadron* > theAddi 188 189 G4double LowEnergyLimit; 190 G4bool HighEnergyInter; 191 192 G4LorentzVector ProjectileResidual4Momentu 193 G4int ProjectileResidualMassNumb 194 G4int ProjectileResidualCharge; 195 G4int ProjectileResidualLambdaNu 196 G4double ProjectileResidualExcitati 197 198 G4LorentzVector TargetResidual4Momentum; 199 G4int TargetResidualMassNumber; 200 G4int TargetResidualCharge; 201 G4double TargetResidualExcitationEn 202 203 G4double Bimpact; 204 G4bool BinInterval; 205 G4double Bmin; 206 G4double Bmax; 207 G4int NumberOfProjectileSpectatorNucleons; 208 G4int NumberOfTargetSpectatorNucleons; 209 G4int NumberOfNNcollisions; 210 }; 211 212 inline G4V3DNucleus* G4FTFModel::GetWoundedNuc 213 return theParticipants.GetWoundedNucleus(); 214 } 215 216 inline G4V3DNucleus* G4FTFModel::GetTargetNucl 217 return theParticipants.GetWoundedNucleus(); 218 } 219 220 inline G4V3DNucleus* G4FTFModel::GetProjectile 221 return theParticipants.GetProjectileNucleus( 222 } 223 224 inline void G4FTFModel::SetImpactParameter( co 225 Bimpact = b_value; 226 } 227 228 inline G4double G4FTFModel::GetImpactParameter 229 return Bimpact; 230 } 231 232 inline void G4FTFModel::SetBminBmax( const G4d 233 BinInterval = false; 234 if ( bmin_value < 0.0 || bmax_value < 0.0 || 235 BinInterval = true; 236 Bmin = bmin_value; 237 Bmax = bmax_value; 238 } 239 240 inline G4bool G4FTFModel::SampleBinInterval() 241 return BinInterval; 242 } 243 244 inline G4double G4FTFModel::GetBmin() const { 245 return Bmin; 246 } 247 248 inline G4double G4FTFModel::GetBmax() const { 249 return Bmax; 250 } 251 252 inline G4int G4FTFModel::GetNumberOfProjectile 253 return NumberOfProjectileSpectatorNucleons; 254 } 255 256 inline G4int G4FTFModel::GetNumberOfTargetSpec 257 return NumberOfTargetSpectatorNucleons; 258 } 259 260 inline G4int G4FTFModel::GetNumberOfNNcollisio 261 return NumberOfNNcollisions; 262 } 263 264 #endif 265