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.12 2010/12/07 10:42:40 vuzhinsk Exp $ >> 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 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" >> 51 >> 52 class G4VSplitableHadron; >> 53 class G4ExcitedString; >> 54 48 #include "G4FTFParameters.hh" 55 #include "G4FTFParameters.hh" 49 #include "G4FTFParticipants.hh" 56 #include "G4FTFParticipants.hh" >> 57 50 #include "G4ExcitedStringVector.hh" 58 #include "G4ExcitedStringVector.hh" 51 #include "G4DiffractiveExcitation.hh" 59 #include "G4DiffractiveExcitation.hh" 52 #include "G4ElasticHNScattering.hh" 60 #include "G4ElasticHNScattering.hh" 53 #include "G4FTFAnnihilation.hh" 61 #include "G4FTFAnnihilation.hh" 54 #include "G4Proton.hh" << 55 #include "G4Neutron.hh" << 56 << 57 class G4VSplitableHadron; << 58 class G4ExcitedString; << 59 62 >> 63 class G4FTFModel : public G4VPartonStringModel >> 64 { 60 65 61 class G4FTFModel : public G4VPartonStringModel << 62 public: 66 public: 63 G4FTFModel( const G4String& modelName = "F << 67 G4FTFModel(); 64 ~G4FTFModel() override; << 68 G4FTFModel(G4double , G4double , G4double ); >> 69 G4FTFModel(G4DiffractiveExcitation * anExcitation); >> 70 G4FTFModel(const G4FTFModel &right); >> 71 ~G4FTFModel(); >> 72 const G4FTFModel & operator=(const G4FTFModel &right); >> 73 >> 74 int operator==(const G4FTFModel &right) const; >> 75 int operator!=(const G4FTFModel &right) const; >> 76 >> 77 void Init(const G4Nucleus & aNucleus, const G4DynamicParticle & aProjectile); >> 78 G4ExcitedStringVector * GetStrings(); >> 79 G4V3DNucleus * GetWoundedNucleus() const; 65 80 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 81 87 protected: 82 protected: 88 void Init( const G4Nucleus& aNucleus, << 83 89 const G4DynamicParticle& aProje << 90 G4ExcitedStringVector* GetStrings() overri << 91 << 92 private: 84 private: 93 void StoreInvolvedNucleon(); << 85 void StoreInvolvedNucleon(); 94 void ReggeonCascade(); << 86 void ReggeonCascade(); 95 G4bool PutOnMassShell(); << 87 G4bool PutOnMassShell(); 96 G4bool ExciteParticipants(); << 88 G4bool ExciteParticipants(); 97 void BuildStrings( G4ExcitedStringVector* << 89 G4ExcitedStringVector * BuildStrings(); 98 void GetResiduals(); << 90 void GetResidualNucleus(); 99 << 91 void AjustTargetNucleonForAnnihilation(G4VSplitableHadron *SelectedAntiBaryon, 100 G4bool AdjustNucleons( G4VSplitableHadron* << 92 G4VSplitableHadron *SelectedTargetNucleon); 101 G4Nucleon* << 93 G4ThreeVector GaussianPt(G4double AveragePt2, G4double maxPtSquare) const; 102 G4VSplitableHadron* << 94 103 G4Nucleon* << 95 private: 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 96 173 G4ReactionProduct theProjectile; << 97 G4ReactionProduct theProjectile; 174 G4FTFParticipants theParticipants; << 98 G4FTFParticipants theParticipants; 175 99 176 G4Nucleon* TheInvolvedNucleonsOfTarget[250 << 100 G4Nucleon * TheInvolvedNucleon[250]; 177 G4int NumberOfInvolvedNucleonsOfTarget; << 101 G4int NumberOfInvolvedNucleon; >> 102 G4int NumberOfInvolvedTargetNucleon; >> 103 >> 104 G4Nucleon * TheInvolvedNucleonOfProjectile[250]; >> 105 G4int NumberOfInvolvedNucleonOfProjectile; >> 106 >> 107 G4FTFParameters *theParameters; >> 108 G4DiffractiveExcitation * theExcitation; >> 109 G4ElasticHNScattering * theElastic; >> 110 G4FTFAnnihilation * theAnnihilation; // Uzhi 17.11.10 178 111 179 G4Nucleon* TheInvolvedNucleonsOfProjectile << 112 std::vector<G4VSplitableHadron *> theAdditionalString; // Uzhi 17.11.10 180 G4int NumberOfInvolvedNucleonsOfProjectile << 181 113 182 G4FTFParameters* theParameters; << 114 G4LorentzVector Residual4Momentum; 183 G4DiffractiveExcitation* theExcitation; << 115 G4double ResidualExcitationEnergy; 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 116 212 inline G4V3DNucleus* G4FTFModel::GetWoundedNuc << 117 }; 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 118 260 inline G4int G4FTFModel::GetNumberOfNNcollisio << 119 // ------------------------------------------------------------ 261 return NumberOfNNcollisions; << 120 inline >> 121 G4V3DNucleus * G4FTFModel::GetWoundedNucleus() const >> 122 { >> 123 return theParticipants.GetWoundedNucleus(); 262 } 124 } 263 125 264 #endif 126 #endif 265 127