Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 // 26 // >> 27 // $Id: G4FTFModel.hh,v 1.5 2007/04/24 10:32:59 gunter Exp $ >> 28 // GEANT4 tag $Name: geant4-09-01-patch-03 $ 27 // 29 // 28 // Class Description 30 // Class Description 29 // Final state production code for hadron inel << 31 // Final state production code for hadron inelastic scattering above 20 GeV 30 // based on the modeling ansatz used in FRITIO 32 // based on the modeling ansatz used in FRITIOF. 31 // To be used in your physics list in case you 33 // To be used in your physics list in case you need this physics. 32 // In this case you want to register an object 34 // In this case you want to register an object of this class with an object 33 // of G4TheoFSGenerator. 35 // of G4TheoFSGenerator. 34 // Class Description - End 36 // Class Description - End 35 37 36 #ifndef G4FTFModel_h 38 #ifndef G4FTFModel_h 37 #define G4FTFModel_h 1 39 #define G4FTFModel_h 1 38 40 39 // ------------------------------------------- 41 // ------------------------------------------------------------ 40 // GEANT 4 class header file 42 // GEANT 4 class header file 41 // 43 // 42 // ---------------- G4FTFModel ---------- 44 // ---------------- G4FTFModel ---------------- 43 // by Gunter Folger, May 1998. 45 // by Gunter Folger, May 1998. 44 // class implementing the excitation in 46 // class implementing the excitation in the FTF Parton String Model 45 // ------------------------------------------- 47 // ------------------------------------------------------------ 46 48 >> 49 47 #include "G4VPartonStringModel.hh" 50 #include "G4VPartonStringModel.hh" 48 #include "G4FTFParameters.hh" << 51 >> 52 class G4VSplitableHadron; >> 53 class G4ExcitedString; 49 #include "G4FTFParticipants.hh" 54 #include "G4FTFParticipants.hh" >> 55 50 #include "G4ExcitedStringVector.hh" 56 #include "G4ExcitedStringVector.hh" 51 #include "G4DiffractiveExcitation.hh" 57 #include "G4DiffractiveExcitation.hh" 52 #include "G4ElasticHNScattering.hh" << 53 #include "G4FTFAnnihilation.hh" << 54 #include "G4Proton.hh" << 55 #include "G4Neutron.hh" << 56 58 57 class G4VSplitableHadron; << 58 class G4ExcitedString; << 59 59 >> 60 class G4FTFModel : public G4VPartonStringModel >> 61 { 60 62 61 class G4FTFModel : public G4VPartonStringModel << 62 public: 63 public: 63 G4FTFModel( const G4String& modelName = "F << 64 G4FTFModel(); // Uzhi 64 ~G4FTFModel() override; << 65 G4FTFModel(G4double , G4double , G4double ); // Uzhi >> 66 G4FTFModel(G4DiffractiveExcitation * anExcitation); >> 67 G4FTFModel(const G4FTFModel &right); >> 68 ~G4FTFModel(); >> 69 const G4FTFModel & operator=(const G4FTFModel &right); >> 70 >> 71 int operator==(const G4FTFModel &right) const; >> 72 int operator!=(const G4FTFModel &right) const; >> 73 >> 74 void Init(const G4Nucleus & aNucleus, const G4DynamicParticle & aProjectile); >> 75 G4ExcitedStringVector * GetStrings(); >> 76 G4V3DNucleus * GetWoundedNucleus() const; 65 77 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 78 87 protected: 79 protected: 88 void Init( const G4Nucleus& aNucleus, << 80 89 const G4DynamicParticle& aProje << 90 G4ExcitedStringVector* GetStrings() overri << 91 << 92 private: 81 private: 93 void StoreInvolvedNucleon(); << 82 G4bool ExciteParticipants(); 94 void ReggeonCascade(); << 83 G4ExcitedStringVector * BuildStrings(); 95 G4bool PutOnMassShell(); << 84 96 G4bool ExciteParticipants(); << 85 private: 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 86 176 G4Nucleon* TheInvolvedNucleonsOfTarget[250 << 87 G4FTFParticipants theParticipants; 177 G4int NumberOfInvolvedNucleonsOfTarget; << 88 G4ReactionProduct theProjectile; 178 << 89 179 G4Nucleon* TheInvolvedNucleonsOfProjectile << 90 G4DiffractiveExcitation * theExcitation; 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 91 240 inline G4bool G4FTFModel::SampleBinInterval() << 241 return BinInterval; << 242 } << 243 92 244 inline G4double G4FTFModel::GetBmin() const { << 245 return Bmin; << 246 } << 247 93 248 inline G4double G4FTFModel::GetBmax() const { << 94 }; 249 return Bmax; << 250 } << 251 95 252 inline G4int G4FTFModel::GetNumberOfProjectile << 96 inline 253 return NumberOfProjectileSpectatorNucleons; << 97 G4V3DNucleus * G4FTFModel::GetWoundedNucleus() const >> 98 { >> 99 return theParticipants.GetWoundedNucleus(); 254 } 100 } 255 101 256 inline G4int G4FTFModel::GetNumberOfTargetSpec << 102 #endif 257 return NumberOfTargetSpectatorNucleons; << 258 } << 259 103 260 inline G4int G4FTFModel::GetNumberOfNNcollisio << 261 return NumberOfNNcollisions; << 262 } << 263 104 264 #endif << 265 105