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 74627 2013-10-17 07:04:38Z gcosmo $ >> 28 // GEANT4 tag $Name: $ 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 3 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 47 #include "G4VPartonStringModel.hh" 49 #include "G4VPartonStringModel.hh" 48 #include "G4FTFParameters.hh" 50 #include "G4FTFParameters.hh" 49 #include "G4FTFParticipants.hh" 51 #include "G4FTFParticipants.hh" 50 #include "G4ExcitedStringVector.hh" 52 #include "G4ExcitedStringVector.hh" 51 #include "G4DiffractiveExcitation.hh" 53 #include "G4DiffractiveExcitation.hh" 52 #include "G4ElasticHNScattering.hh" 54 #include "G4ElasticHNScattering.hh" 53 #include "G4FTFAnnihilation.hh" 55 #include "G4FTFAnnihilation.hh" 54 #include "G4Proton.hh" 56 #include "G4Proton.hh" 55 #include "G4Neutron.hh" 57 #include "G4Neutron.hh" 56 58 57 class G4VSplitableHadron; 59 class G4VSplitableHadron; 58 class G4ExcitedString; 60 class G4ExcitedString; 59 61 60 62 61 class G4FTFModel : public G4VPartonStringModel 63 class G4FTFModel : public G4VPartonStringModel { >> 64 62 public: 65 public: 63 G4FTFModel( const G4String& modelName = "F 66 G4FTFModel( const G4String& modelName = "FTF" ); 64 ~G4FTFModel() override; << 67 ~G4FTFModel(); 65 68 >> 69 void Init( const G4Nucleus& aNucleus, const G4DynamicParticle& aProjectile ); >> 70 G4ExcitedStringVector* GetStrings(); >> 71 G4V3DNucleus* GetWoundedNucleus() const; 66 G4V3DNucleus* GetTargetNucleus() const; 72 G4V3DNucleus* GetTargetNucleus() const; 67 G4V3DNucleus* GetWoundedNucleus() const ov << 73 G4V3DNucleus* GetProjectileNucleus() const; 68 G4V3DNucleus* GetProjectileNucleus() const << 69 << 70 void ModelDescription( std::ostream& ) con << 71 74 72 G4FTFModel( const G4FTFModel& right ) = de << 75 virtual void ModelDescription( std::ostream& ) const; 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 76 92 private: 77 private: >> 78 G4FTFModel( const G4FTFModel& right ); >> 79 const G4FTFModel& operator=( const G4FTFModel& right ); >> 80 int operator==( const G4FTFModel& right ) const; >> 81 int operator!=( const G4FTFModel& right ) const; >> 82 93 void StoreInvolvedNucleon(); 83 void StoreInvolvedNucleon(); 94 void ReggeonCascade(); 84 void ReggeonCascade(); 95 G4bool PutOnMassShell(); 85 G4bool PutOnMassShell(); 96 G4bool ExciteParticipants(); 86 G4bool ExciteParticipants(); 97 void BuildStrings( G4ExcitedStringVector* << 87 G4ExcitedStringVector* BuildStrings(); 98 void GetResiduals(); << 88 void GetResiduals(); 99 << 100 G4bool AdjustNucleons( G4VSplitableHadron* 89 G4bool AdjustNucleons( G4VSplitableHadron* SelectedAntiBaryon, 101 G4Nucleon* 90 G4Nucleon* ProjectileNucleon, 102 G4VSplitableHadron* 91 G4VSplitableHadron* SelectedTargetNucleon, 103 G4Nucleon* 92 G4Nucleon* TargetNucleon, 104 G4bool 93 G4bool Annihilation ); 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 94 G4ThreeVector GaussianPt( G4double AveragePt2, G4double maxPtSquare ) const; 138 << 95 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; 96 G4ReactionProduct theProjectile; 174 G4FTFParticipants theParticipants; 97 G4FTFParticipants theParticipants; 175 98 176 G4Nucleon* TheInvolvedNucleonsOfTarget[250 99 G4Nucleon* TheInvolvedNucleonsOfTarget[250]; 177 G4int NumberOfInvolvedNucleonsOfTarget; 100 G4int NumberOfInvolvedNucleonsOfTarget; 178 101 179 G4Nucleon* TheInvolvedNucleonsOfProjectile 102 G4Nucleon* TheInvolvedNucleonsOfProjectile[250]; 180 G4int NumberOfInvolvedNucleonsOfProjectile 103 G4int NumberOfInvolvedNucleonsOfProjectile; 181 104 182 G4FTFParameters* theParameters; 105 G4FTFParameters* theParameters; 183 G4DiffractiveExcitation* theExcitation; 106 G4DiffractiveExcitation* theExcitation; 184 G4ElasticHNScattering* theElastic; 107 G4ElasticHNScattering* theElastic; 185 G4FTFAnnihilation* theAnnihilation; 108 G4FTFAnnihilation* theAnnihilation; 186 109 187 std::vector< G4VSplitableHadron* > theAddi 110 std::vector< G4VSplitableHadron* > theAdditionalString; 188 111 189 G4double LowEnergyLimit; 112 G4double LowEnergyLimit; 190 G4bool HighEnergyInter; 113 G4bool HighEnergyInter; 191 114 192 G4LorentzVector ProjectileResidual4Momentu 115 G4LorentzVector ProjectileResidual4Momentum; 193 G4int ProjectileResidualMassNumb 116 G4int ProjectileResidualMassNumber; 194 G4int ProjectileResidualCharge; 117 G4int ProjectileResidualCharge; 195 G4int ProjectileResidualLambdaNu << 196 G4double ProjectileResidualExcitati 118 G4double ProjectileResidualExcitationEnergy; 197 119 198 G4LorentzVector TargetResidual4Momentum; 120 G4LorentzVector TargetResidual4Momentum; 199 G4int TargetResidualMassNumber; 121 G4int TargetResidualMassNumber; 200 G4int TargetResidualCharge; 122 G4int TargetResidualCharge; 201 G4double TargetResidualExcitationEn 123 G4double TargetResidualExcitationEnergy; 202 124 203 G4double Bimpact; << 204 G4bool BinInterval; << 205 G4double Bmin; << 206 G4double Bmax; << 207 G4int NumberOfProjectileSpectatorNucleons; << 208 G4int NumberOfTargetSpectatorNucleons; << 209 G4int NumberOfNNcollisions; << 210 }; 125 }; 211 126 >> 127 212 inline G4V3DNucleus* G4FTFModel::GetWoundedNuc 128 inline G4V3DNucleus* G4FTFModel::GetWoundedNucleus() const { 213 return theParticipants.GetWoundedNucleus(); 129 return theParticipants.GetWoundedNucleus(); 214 } 130 } 215 131 >> 132 216 inline G4V3DNucleus* G4FTFModel::GetTargetNucl 133 inline G4V3DNucleus* G4FTFModel::GetTargetNucleus() const { 217 return theParticipants.GetWoundedNucleus(); 134 return theParticipants.GetWoundedNucleus(); 218 } 135 } 219 136 >> 137 220 inline G4V3DNucleus* G4FTFModel::GetProjectile 138 inline G4V3DNucleus* G4FTFModel::GetProjectileNucleus() const { 221 return theParticipants.GetProjectileNucleus( 139 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 } 140 } 263 141 264 #endif 142 #endif 265 143