Import Geant4 9.4.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-09 16:25:56 +02:00
parent 74cad5e589
commit 89a9605df1
4440 changed files with 379508 additions and 189225 deletions
@@ -0,0 +1,18 @@
#------------------------------------------------------------------------------
# CMakeLists.txt
# Module : G4had_string_diff
# Package: Geant4.src.G4processes.G4hadronic.G4hadronic_models.G4had_string.G4had_string_diff
#
# CMakeLists.txt for building a single granular library.
#
# Generated on : 24/9/2010
#
# $Id: CMakeLists.txt,v 1.1 2010/09/29 19:04:35 bmorgan Exp $
#
#------------------------------------------------------------------------------
if(GEANT4_BUILD_GRANULAR_LIBS)
include(Geant4MacroLibraryTargets)
GEANT4_GRANULAR_LIBRARY_TARGET(COMPONENT sources.cmake)
endif()
@@ -1,4 +1,4 @@
$Id: History,v 1.29 2009/12/15 19:20:46 vuzhinsk Exp $
$Id: History,v 1.34 2010/11/15 10:10:16 vuzhinsk Exp $
-------------------------------------------------------------------
==========================================================
@@ -14,12 +14,31 @@ code and to keep track of all tags.
---------------------------------------------------------------
* Please list in reverse chronological order (last date on top)
---------------------------------------------------------------
15 Nov. 2010, V. Uzhinsky (hadr-string-diff-V09-03-04)
FTF with tuned parameters for pA and PiA interactions.
Quark exchange is tuned.
Low mass string fragmentation is improved.
Reggeon cascade parameters are tuned.
--------------------------------------------------------
20 Sept. 2010, V, Uzhinsky (hadr-string-diff-V09-03-03)
FTF with new tuned parameters of nuclear destrustion is implemented.
The parameters were tuned using HARP-CDP data on p+Cu interactions.
They will be re-tuned for heavy nuclei a little bit.
----------------------------------------------------
8 Sept 2010 G.Folger (hadr-string-diff-V09-03-02)
G4FTFModel.cc: use integer interace of G4Nucleus
14 Jun 2010 G.Cosmo (hadr-string-diff-V09-03-01)
Added missing virtual destructor to G4DiffractiveHHScatterer.
15 Dec 2009 V.Uzhinsky (hadr-string-diff-V09-02-23)
Bug was fixed for Kaon + A interactions in G4DiffractiveExcitation.cc
Bug was fixed for Kaon + A interactions in G4DiffractiveExcitation.cc
------------------------------------------------------------
15 Dec 2009 G.Folger (hadr-string-diff-V09-02-22)
- G4FTFModel: In ctor, initialise NumberOfInvolvedNucleon
G4FTFModel: In ctor, initialise NumberOfInvolvedNucleon
14 Dec. 2009 V. Uzhinsky (hadr-string-diff-V09-02-21)
Momentum sampling in the reggeon cascade is improved.
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4DiffractiveHHScatterer.hh,v 1.7 2009/10/06 10:10:36 vuzhinsk Exp $
// $Id: G4DiffractiveHHScatterer.hh,v 1.8 2010/06/14 16:26:46 gcosmo Exp $
#ifndef G4DiffractiveHHScatterer_h
#define G4DiffractiveHHScatterer_h 1
@@ -51,10 +51,11 @@ class G4DiffractiveHHScatterer
public:
G4DiffractiveHHScatterer();
virtual ~G4DiffractiveHHScatterer();
// G4KineticTrackVector * Scatter(const G4KineticTrack & aTrack, const G4KineticTrack & bTrack);
virtual void CreateStrings() const;
virtual void CreateStrings() const;
/*
(G4VSplitableHadron * aHadron,
G4bool isProjectile,
@@ -24,8 +24,8 @@
// ********************************************************************
//
//
// $Id: G4DiffractiveSplitableHadron.hh,v 1.5 2009/08/03 13:14:19 vuzhinsk Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4DiffractiveSplitableHadron.hh,v 1.6 2010/09/20 15:50:46 vuzhinsk Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
#ifndef G4DiffractiveSplitableHadron_h
@@ -24,8 +24,8 @@
// ********************************************************************
//
//
// $Id: G4FTFModel.hh,v 1.10 2009/10/25 10:50:54 vuzhinsk Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4FTFModel.hh,v 1.11 2010/09/20 15:50:46 vuzhinsk Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
// Class Description
// Final state production code for hadron inelastic scattering above 20 GeV
@@ -26,17 +26,20 @@
#ifndef G4FTFParameters_h
#define G4FTFParameters_h 1
//
// $Id: G4FTFParameters.hh,v 1.7 2009/10/25 10:50:54 vuzhinsk Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4FTFParameters.hh,v 1.9 2010/11/15 10:05:19 vuzhinsk Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
#include "G4Proton.hh"
class G4FTFParameters
{
public:
G4FTFParameters(const G4ParticleDefinition * , G4double theA,
G4double theZ,
G4FTFParameters(const G4ParticleDefinition * , G4int theA,
G4int theZ,
G4double s);
// G4FTFParameters(const G4ParticleDefinition * , G4double theA,
// G4double theZ,
// G4double s);
~G4FTFParameters();
@@ -62,6 +65,7 @@ class G4FTFParameters
void SetMagQuarkExchange(const G4double aValue);
void SetSlopeQuarkExchange(const G4double aValue);
void SetDeltaProbAtQuarkExchange(const G4double aValue);
void SetProbOfSameQuarkExchange(const G4double aValue);
void SetProjMinDiffMass(const G4double aValue);
void SetProjMinNonDiffMass(const G4double aValue);
@@ -80,6 +84,9 @@ class G4FTFParameters
const G4double Pssbar );
// --------- Set parameters of nuclear destruction--------------------
void SetMaxNumberOfCollisions(const G4double aValue, const G4double bValue);
void SetProbOfInteraction(const G4double aValue);
void SetCofNuclearDestruction(const G4double aValue);
void SetR2ofNuclearDestruction(const G4double aValue);
@@ -108,6 +115,7 @@ class G4FTFParameters
G4double GetMagQuarkExchange();
G4double GetSlopeQuarkExchange();
G4double GetDeltaProbAtQuarkExchange();
G4double GetProbOfSameQuarkExchange();
G4double GetProjMinDiffMass();
G4double GetProjMinNonDiffMass();
@@ -124,6 +132,9 @@ class G4FTFParameters
std::vector<G4double> GetQuarkProbabilitiesAtGluonSplitUp();
// --------- Get parameters of nuclear destruction---------------------
G4double GetMaxNumberOfCollisions();
G4double GetProbOfInteraction();
G4double GetCofNuclearDestruction();
G4double GetR2ofNuclearDestruction();
@@ -154,6 +165,7 @@ class G4FTFParameters
G4double MagQuarkExchange;
G4double SlopeQuarkExchange;
G4double DeltaProbAtQuarkExchange;
G4double ProbOfSameQuarkExchange;
G4double ProjMinDiffMass;
G4double ProjMinNonDiffMass;
@@ -170,6 +182,9 @@ class G4FTFParameters
std::vector<G4double> QuarkProbabilitiesAtGluonSplitUp;
// --------- Parameters of nuclear destruction------------------------
G4double MaxNumberOfCollisions;
G4double ProbOfInelInteraction;
G4double CofNuclearDestruction; // Cnd of nuclear destruction
G4double R2ofNuclearDestruction; // R2nd
@@ -226,6 +241,8 @@ inline void G4FTFParameters::SetSlopeQuarkExchange(const G4double aValue)
{SlopeQuarkExchange = aValue;}
inline void G4FTFParameters::SetDeltaProbAtQuarkExchange(const G4double aValue)
{DeltaProbAtQuarkExchange = aValue;}
inline void G4FTFParameters::SetProbOfSameQuarkExchange(const G4double aValue)
{ProbOfSameQuarkExchange = aValue;}
inline void G4FTFParameters::SetProjMinDiffMass(const G4double aValue)
{ProjMinDiffMass = aValue*GeV;}
@@ -259,6 +276,24 @@ inline void G4FTFParameters::SetQuarkProbabilitiesAtGluonSplitUp(
}
// --------- Set parameters of nuclear destruction--------------------
inline void G4FTFParameters::SetMaxNumberOfCollisions(const G4double Plab,
const G4double Pbound)
{
if(Plab > Pbound)
{
MaxNumberOfCollisions = Plab/Pbound;
SetProbOfInteraction(-1.);
} else
{
// MaxNumberOfCollisions = -1.;
// SetProbOfInteraction(std::exp(0.25*(Plab-Pbound)));
MaxNumberOfCollisions = 1;
SetProbOfInteraction(-1.);
}
}
inline void G4FTFParameters::SetProbOfInteraction(const G4double aValue)
{ProbOfInelInteraction = aValue;}
inline void G4FTFParameters::SetCofNuclearDestruction(const G4double aValue)
{CofNuclearDestruction = aValue;}
inline void G4FTFParameters::SetR2ofNuclearDestruction(const G4double aValue)
@@ -303,9 +338,9 @@ inline G4double G4FTFParameters::GetAvaragePt2ofElasticScattering()
// --------- Get parameters of excitations ---------------------------
inline G4double G4FTFParameters::GetMagQuarkExchange() {return MagQuarkExchange;}
inline G4double G4FTFParameters::GetSlopeQuarkExchange() {return SlopeQuarkExchange;}
inline G4double G4FTFParameters::GetDeltaProbAtQuarkExchange()
{return DeltaProbAtQuarkExchange;}
inline G4double G4FTFParameters::GetDeltaProbAtQuarkExchange(){return
DeltaProbAtQuarkExchange;}
inline G4double G4FTFParameters::GetProbOfSameQuarkExchange(){return ProbOfSameQuarkExchange;}
inline G4double G4FTFParameters::GetProjMinDiffMass() {return ProjMinDiffMass;}
inline G4double G4FTFParameters::GetProjMinNonDiffMass() {return ProjMinNonDiffMass;}
@@ -324,6 +359,9 @@ inline std::vector<G4double>
{return QuarkProbabilitiesAtGluonSplitUp;}
// --------- Get parameters of nuclear destruction---------------------
inline G4double G4FTFParameters::GetMaxNumberOfCollisions(){return MaxNumberOfCollisions;}
inline G4double G4FTFParameters::GetProbOfInteraction() {return ProbOfInelInteraction;}
inline G4double G4FTFParameters::GetCofNuclearDestruction(){return CofNuclearDestruction;}
inline G4double G4FTFParameters::GetR2ofNuclearDestruction(){return R2ofNuclearDestruction;}
@@ -24,8 +24,8 @@
// ********************************************************************
//
//
// $Id: G4FTFParticipants.hh,v 1.6 2009/08/03 13:14:19 vuzhinsk Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4FTFParticipants.hh,v 1.7 2010/09/20 15:50:46 vuzhinsk Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
#ifndef G4FTFParticipants_h
@@ -0,0 +1,99 @@
#------------------------------------------------------------------------------
# sources.cmake
# Module : G4had_string_diff
# Package: Geant4.src.G4processes.G4hadronic.G4hadronic_models.G4had_string.G4had_string_diff
#
# Sources description for a library.
# Lists the sources and headers of the code explicitely.
# Lists include paths needed.
# Lists the internal granular and global dependencies of the library.
# Source specific properties should be added at the end.
#
# Generated on : 24/9/2010
#
# $Id: sources.cmake,v 1.1 2010/09/29 19:04:44 bmorgan Exp $
#
#------------------------------------------------------------------------------
# List external includes needed.
include_directories(${CLHEP_INCLUDE_DIRS})
# List internal includes needed.
include_directories(${CMAKE_SOURCE_DIR}/source/geometry/management/include)
include_directories(${CMAKE_SOURCE_DIR}/source/geometry/volumes/include)
include_directories(${CMAKE_SOURCE_DIR}/source/global/HEPGeometry/include)
include_directories(${CMAKE_SOURCE_DIR}/source/global/HEPNumerics/include)
include_directories(${CMAKE_SOURCE_DIR}/source/global/HEPRandom/include)
include_directories(${CMAKE_SOURCE_DIR}/source/global/management/include)
include_directories(${CMAKE_SOURCE_DIR}/source/materials/include)
include_directories(${CMAKE_SOURCE_DIR}/source/particles/bosons/include)
include_directories(${CMAKE_SOURCE_DIR}/source/particles/hadrons/barions/include)
include_directories(${CMAKE_SOURCE_DIR}/source/particles/hadrons/ions/include)
include_directories(${CMAKE_SOURCE_DIR}/source/particles/hadrons/mesons/include)
include_directories(${CMAKE_SOURCE_DIR}/source/particles/leptons/include)
include_directories(${CMAKE_SOURCE_DIR}/source/particles/management/include)
include_directories(${CMAKE_SOURCE_DIR}/source/particles/shortlived/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/management/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/models/management/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/models/parton_string/diffraction/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/models/parton_string/hadronization/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/models/parton_string/management/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/models/util/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/util/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/management/include)
include_directories(${CMAKE_SOURCE_DIR}/source/track/include)
#
# Define the Geant4 Module.
#
include(Geant4MacroDefineModule)
GEANT4_DEFINE_MODULE(NAME G4had_string_diff
HEADERS
G4DiffractiveExcitation.hh
G4DiffractiveHHScatterer.hh
G4DiffractiveSplitableHadron.hh
G4ElasticHNScattering.hh
G4FTFModel.hh
G4FTFParameters.hh
G4FTFParticipants.hh
SOURCES
G4DiffractiveExcitation.cc
G4DiffractiveHHScatterer.cc
G4DiffractiveSplitableHadron.cc
G4ElasticHNScattering.cc
G4FTFModel.cc
G4FTFParameters.cc
G4FTFParticipants.cc
GRANULAR_DEPENDENCIES
G4baryons
G4bosons
G4geometrymng
G4globman
G4had_mod_man
G4had_mod_util
G4had_string_diff
G4had_string_frag
G4had_string_man
G4hadronic_mgt
G4hadronic_util
G4hepnumerics
G4ions
G4leptons
G4materials
G4mesons
G4partman
G4procman
G4shortlived
G4track
G4volumes
GLOBAL_DEPENDENCIES
G4geometry
G4global
G4materials
G4particles
G4track
LINK_LIBRARIES
)
# List any source specific properties here
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4DiffractiveExcitation.cc,v 1.21 2009/12/15 19:14:31 vuzhinsk Exp $
// $Id: G4DiffractiveExcitation.cc,v 1.23 2010/11/15 10:02:38 vuzhinsk Exp $
// ------------------------------------------------------------
// GEANT 4 class implemetation file
//
@@ -107,12 +107,13 @@ G4bool G4DiffractiveExcitation::
// -------------------- Target parameters -------------------------
G4int TargetPDGcode=target->GetDefinition()->GetPDGEncoding();
G4int absTargetPDGcode=std::abs(TargetPDGcode);
//G4cout<<"Excit "<<ProjectilePDGcode<<" "<<TargetPDGcode<<G4endl;
G4LorentzVector Ptarget=target->Get4Momentum();
G4double M0target = Ptarget.mag();
G4double TargetRapidity = Ptarget.rapidity();
// G4double TargetRapidity = Ptarget.rapidity();
if(M0target < target->GetDefinition()->GetPDGMass())
{
@@ -128,8 +129,8 @@ G4bool G4DiffractiveExcitation::
G4double AveragePt2=theParameters->GetAveragePt2();
G4double ProbOfDiffraction=ProbProjectileDiffraction +
ProbTargetDiffraction;
// G4double ProbOfDiffraction=ProbProjectileDiffraction +
// ProbTargetDiffraction;
G4double SumMasses=M0projectile+M0target+200.*MeV;
@@ -161,7 +162,7 @@ G4bool G4DiffractiveExcitation::
G4double PZcms2, PZcms;
G4double SqrtS=std::sqrt(S);
//G4cout<<"SqrtS < 2300*MeV "<<SqrtS<<G4endl;
if(absProjectilePDGcode > 1000 && (SqrtS < 2300*MeV || SqrtS < SumMasses))
{target->SetStatus(2); return false;} // The model cannot work for
// p+p-interactions
@@ -214,7 +215,13 @@ G4bool G4DiffractiveExcitation::
}
G4double maxPtSquare; // = PZcms2;
/*
G4cout<<"Start --------------------"<<G4endl;
G4cout<<"Proj "<<M0projectile<<" "<<ProjectileDiffStateMinMass<<" "<<ProjectileNonDiffStateMinMass<<G4endl;
G4cout<<"Targ "<<M0target <<" "<<TargetDiffStateMinMass <<" "<<TargetNonDiffStateMinMass<<G4endl;
G4cout<<"SqrtS "<<SqrtS<<G4endl;
G4cout<<"Rapid "<<ProjectileRapidity<<G4endl; //" "<<TargetRapidity<<G4endl;
*/
// Charge exchange can be possible for baryons -----------------
// Getting the values needed for exchange ----------------------
@@ -227,10 +234,19 @@ G4bool G4DiffractiveExcitation::
G4double DeltaMass=
(G4ParticleTable::GetParticleTable()->FindParticle(2224))->GetPDGMass();
// Check for possible quark excjane -----------------------------------
//G4cout<<MagQuarkExchange*std::exp(-SlopeQuarkExchange*(ProjectileRapidity - TargetRapidity))<<G4endl;
//G4cout<<"Q exc Mag Slop Wdelta"<<MagQuarkExchange<<" "<<SlopeQuarkExchange<<" "<<DeltaProbAtQuarkExchange<<G4endl;
//G4cout<<"ProjectileRapidity "<<ProjectileRapidity<<G4endl;
//G4cout<<MagQuarkExchange*std::exp(-SlopeQuarkExchange*(ProjectileRapidity))<<G4endl;
//G4int Uzhi; G4cin>>Uzhi;
// Check for possible quark exchange -----------------------------------
if(G4UniformRand() < MagQuarkExchange*
std::exp(-SlopeQuarkExchange*(ProjectileRapidity - TargetRapidity)))
std::exp(-SlopeQuarkExchange*ProjectileRapidity)) //TargetRapidity))) 1.45
{
// std::exp(-SlopeQuarkExchange*(ProjectileRapidity - 1.36))) //TargetRapidity))) 1.45
//G4cout<<"Q exchange"<<G4endl;
G4int NewProjCode(0), NewTargCode(0);
G4int ProjQ1(0), ProjQ2(0), ProjQ3(0);
@@ -248,12 +264,15 @@ G4bool G4DiffractiveExcitation::
G4int TargQ1(0), TargQ2(0), TargQ3(0);
UnpackBaryon(TargetPDGcode, TargQ1, TargQ2, TargQ3);
//G4cout<<ProjQ1<<" "<<ProjQ2<<" "<<ProjQ3<<G4endl;
//G4cout<<TargQ1<<" "<<TargQ2<<" "<<TargQ3<<G4endl;
// Sampling of exchanged quarks -------------------
G4int ProjExchangeQ(0);
G4int TargExchangeQ(0);
if(absProjectilePDGcode < 1000 )
{ // projectile is meson -----------------
if(ProjQ1 > 0 ) // ProjQ1 is quark
{
ProjExchangeQ = ProjQ1;
@@ -282,36 +301,79 @@ G4bool G4DiffractiveExcitation::
{
TargExchangeQ = TargQ3; TargQ3=ProjExchangeQ; ProjQ2=TargExchangeQ;
}
} // End of if(ProjQ1 > 0 ) // ProjQ1 is quark
G4int aProjQ1=std::abs(ProjQ1);
G4int aProjQ2=std::abs(ProjQ2);
if(aProjQ1 == aProjQ2) {NewProjCode = 111;} // Pi0-meson
if(aProjQ1 == aProjQ2) {NewProjCode = 111;} // Pi0-meson
else // |ProjQ1| # |ProjQ2|
{
if(aProjQ1 > aProjQ2) {NewProjCode = aProjQ1*100+aProjQ2*10+1;}
else {NewProjCode = aProjQ2*100+aProjQ1*10+1;}
NewProjCode *=(ProjectilePDGcode/absProjectilePDGcode);
}
G4bool ProjExcited=false;
if(G4UniformRand() < 0.5)
{
NewProjCode +=2; // Excited Pi0-meson
ProjExcited=true;
}
//G4cout<<G4endl<<"NewProjCode "<<NewProjCode<<G4endl;
G4ParticleDefinition* TestParticle=0;
TestParticle=G4ParticleTable::GetParticleTable()->FindParticle(NewProjCode);
if(TestParticle)
{
M0projectile=
(G4ParticleTable::GetParticleTable()->FindParticle(NewProjCode))->GetPDGMass();
M0projectile2 = M0projectile * M0projectile;
ProjectileDiffStateMinMass =M0projectile+210.*MeV; //210 MeV=m_pi+70 MeV
ProjectileNonDiffStateMinMass=M0projectile+210.*MeV; //210 MeV=m_pi+70 MeV
} else
{return false;}
//G4cout<<"New TrQ "<<TargQ1<<" "<<TargQ2<<" "<<TargQ3<<G4endl;
NewTargCode = NewNucleonId(TargQ1, TargQ2, TargQ3);
//G4cout<<"NewTargCode "<<NewTargCode<<G4endl;
if( (TargQ1 == TargQ2) && (TargQ1 == TargQ3) &&
(SqrtS > M0projectile+DeltaMass)) {NewTargCode +=2;} //Create Delta isobar
else if( target->GetDefinition()->GetPDGiIsospin() == 3 ) //Delta was the target
{ if(G4UniformRand() > DeltaProbAtQuarkExchange){NewTargCode +=2;} //Save Delta isobar
(SqrtS > M0projectile+DeltaMass)) {NewTargCode +=2; //Create Delta isobar
ProjExcited=true;}
else if( target->GetDefinition()->GetPDGiIsospin() == 3 ) //Delta was the target
{ if(G4UniformRand() > DeltaProbAtQuarkExchange){NewTargCode +=2; //Save Delta isobar
ProjExcited=true;}
else {} // De-excite initial Delta isobar
}
else if((G4UniformRand() < DeltaProbAtQuarkExchange) && //Nucleon was the target
// else if((!CreateDelta) &&
else if((!ProjExcited) &&
(G4UniformRand() < DeltaProbAtQuarkExchange) && //Nucleon was the target
(SqrtS > M0projectile+DeltaMass)) {NewTargCode +=2;} //Create Delta isobar
// else if( CreateDelta) {NewTargCode +=2;}
else {} //Save initial nucleon
// target->SetDefinition( // Fix 15.12.09
// G4ParticleTable::GetParticleTable()->FindParticle(NewTargCode));// Fix 15.12.09
//G4cout<<"NewTargCode "<<NewTargCode<<G4endl;
//G4int Uzhi; G4cin>>Uzhi;
TestParticle=G4ParticleTable::GetParticleTable()->FindParticle(NewTargCode);
if(TestParticle)
{
M0target=
(G4ParticleTable::GetParticleTable()->FindParticle(NewTargCode))->GetPDGMass();
M0target2 = M0target * M0target;
TargetDiffStateMinMass =M0target+220.*MeV; //220 MeV=m_pi+80 MeV;
TargetNonDiffStateMinMass=M0target+220.*MeV; //220 MeV=m_pi+80 MeV;
} else
{return false;}
} else
{ // projectile is baryon ----------------
G4double Same=0.; //0.3; //0.5;
//=========================================================================
G4double Same=theParameters->GetProbOfSameQuarkExchange(); //0.3; //0.5; 0.
G4bool ProjDeltaHasCreated(false);
G4bool TargDeltaHasCreated(false);
@@ -325,6 +387,7 @@ G4bool G4DiffractiveExcitation::
else
{ProjExchangeQ = ProjQ3;}
//G4cout<<"ProjExchangeQ "<<ProjExchangeQ<<G4endl;
if((ProjExchangeQ != TargQ1)||(G4UniformRand()<Same))
{
TargExchangeQ = TargQ1; TargQ1=ProjExchangeQ; ProjExchangeQ=TargExchangeQ;
@@ -337,6 +400,8 @@ G4bool G4DiffractiveExcitation::
TargExchangeQ = TargQ3; TargQ3=ProjExchangeQ; ProjExchangeQ=TargExchangeQ;
}
//G4cout<<"ProjExchangeQ "<<ProjExchangeQ<<G4endl;
//G4cout<<"TargExchangeQ "<<TargExchangeQ<<G4endl;
if( Ksi < 0.333333 )
{ProjQ1=ProjExchangeQ;}
else if( (0.333333 <= Ksi) && (Ksi < 0.666667))
@@ -376,6 +441,15 @@ G4bool G4DiffractiveExcitation::
NewProjCode = NewNucleonId(ProjQ1, ProjQ2, ProjQ3); // *****************************
//G4cout<<"ProjQ1, ProjQ2, ProjQ3 "<<ProjQ1<<" "<<ProjQ2<<" "<<ProjQ3<<" "<<NewProjCode<<G4endl;
G4int TestParticleID=NewProjCode;
G4ParticleDefinition* TestParticle=0;
G4double TestParticleMass=DBL_MAX;
TestParticle=G4ParticleTable::GetParticleTable()->FindParticle(NewProjCode);
if(TestParticle) TestParticleMass=TestParticle->GetPDGMass();
if((ProjQ1==ProjQ2) && (ProjQ1==ProjQ3)) {NewProjCode +=2; ProjDeltaHasCreated=true;}
else if(projectile->GetDefinition()->GetPDGiIsospin() == 3)// Projectile was Delta
{ if(G4UniformRand() > DeltaProbAtQuarkExchange)
@@ -389,8 +463,23 @@ G4bool G4DiffractiveExcitation::
else {NewProjCode +=0; ProjDeltaHasCreated=false;}
}
G4ParticleDefinition* NewTestParticle=
G4ParticleTable::GetParticleTable()->FindParticle(NewProjCode);
//G4cout<<"TestParticleMass NewTestParticle->GetPDGMass() "<<TestParticleMass<<" "<< NewTestParticle->GetPDGMass()<<G4endl;
//if(TestParticleMass < NewTestParticle->GetPDGMass()) {NewProjCode=TestParticleID;}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=
NewTargCode = NewNucleonId(TargQ1, TargQ2, TargQ3); // *****************************
//G4cout<<"TargQ1, TargQ2, TargQ3 "<<TargQ1<<" "<<TargQ2<<" "<<TargQ3<<" "<<NewTargCode<<G4endl;
TestParticleID=NewTargCode;
TestParticleMass=DBL_MAX;
TestParticle=G4ParticleTable::GetParticleTable()->FindParticle(NewTargCode);
if(TestParticle) TestParticleMass=TestParticle->GetPDGMass();
if((TargQ1==TargQ2) && (TargQ1==TargQ3)) {NewTargCode +=2; TargDeltaHasCreated=true;}
else if(target->GetDefinition()->GetPDGiIsospin() == 3) // Target was Delta
{ if(G4UniformRand() > DeltaProbAtQuarkExchange)
@@ -404,37 +493,53 @@ G4bool G4DiffractiveExcitation::
else {NewTargCode +=0; TargDeltaHasCreated=false;}
}
NewTestParticle=G4ParticleTable::GetParticleTable()->FindParticle(NewTargCode);
//G4cout<<"TestParticleMass NewTestParticle->GetPDGMass() "<<TestParticleMass<<" "<< NewTestParticle->GetPDGMass()<<G4endl;
//if(TestParticleMass < NewTestParticle->GetPDGMass()) {NewTargCode=TestParticleID;}
//G4cout<<"NewProjCode NewTargCode "<<NewProjCode<<" "<<NewTargCode<<G4endl;
//G4int Uzhi; G4cin>>Uzhi;
if((absProjectilePDGcode == NewProjCode) && (absTargetPDGcode == NewTargCode))
{ // Nothing was changed! It is not right!?
}
// Forming baryons --------------------------------------------------
if(ProjDeltaHasCreated) {ProbProjectileDiffraction=1.; ProbTargetDiffraction=0.;}
if(TargDeltaHasCreated) {ProbProjectileDiffraction=0.; ProbTargetDiffraction=1.;}
if(ProjDeltaHasCreated)
{
M0projectile=
(G4ParticleTable::GetParticleTable()->FindParticle(NewProjCode))->GetPDGMass();
M0projectile2 = M0projectile * M0projectile;
ProjectileDiffStateMinMass =M0projectile+210.*MeV; //210 MeV=m_pi+70 MeV
ProjectileNonDiffStateMinMass=M0projectile+210.*MeV; //210 MeV=m_pi+70 MeV
}
// if(M0target <
// (G4ParticleTable::GetParticleTable()->FindParticle(NewTargCode))->GetPDGMass())
if(TargDeltaHasCreated)
{
M0target=
(G4ParticleTable::GetParticleTable()->FindParticle(NewTargCode))->GetPDGMass();
M0target2 = M0target * M0target;
TargetDiffStateMinMass =M0target+210.*MeV; //210 MeV=m_pi+70 MeV;
TargetNonDiffStateMinMass=M0target+210.*MeV; //210 MeV=m_pi+70 MeV;
}
} // End of if projectile is baryon ---------------------------
//G4cout<<"At end// NewProjCode "<<NewProjCode<<G4endl;
//G4cout<<"At end// NewTargCode "<<NewTargCode<<G4endl;
// If we assume that final state hadrons after the charge exchange will be
// in the ground states, we have to put ----------------------------------
if(M0projectile <
(G4ParticleTable::GetParticleTable()->FindParticle(NewProjCode))->GetPDGMass())
{
M0projectile=
(G4ParticleTable::GetParticleTable()->FindParticle(NewProjCode))->GetPDGMass();
M0projectile2 = M0projectile * M0projectile;
}
if(M0target <
(G4ParticleTable::GetParticleTable()->FindParticle(NewTargCode))->GetPDGMass())
{
M0target=
(G4ParticleTable::GetParticleTable()->FindParticle(NewTargCode))->GetPDGMass();
M0target2 = M0target * M0target;
}
//G4cout<<"M0pr M0tr SqS "<<M0projectile<<" "<<M0target<<" "<<SqrtS<<G4endl;
PZcms2=(S*S+M0projectile2*M0projectile2+M0target2*M0target2-
2*S*M0projectile2 - 2*S*M0target2 - 2*M0projectile2*M0target2)
/4./S;
//G4cout<<"PZcms2 1 "<<PZcms2<<G4endl<<G4endl;
if(PZcms2 < 0) {return false;} // It can be if energy is not sufficient for Delta
//----------------------------------------------------------
projectile->SetDefinition(
@@ -451,23 +556,74 @@ G4bool G4DiffractiveExcitation::
Ptarget.setPz( -PZcms);
Ptarget.setE(std::sqrt(M0target2+PZcms2));
{
Pprojectile.transform(toLab);
Ptarget.transform(toLab);
// ----------------------------------------------------------
projectile->SetTimeOfCreation(target->GetTimeOfCreation());
projectile->SetPosition(target->GetPosition());
if(absProjectilePDGcode < 1000)
{ // For projectile meson
G4double Wexcit=1.-2.256*std::exp(-0.6*ProjectileRapidity);
Wexcit=0.;
if(G4UniformRand() > Wexcit)
{ // Make elastic scattering
//G4cout<<"Make elastic scattering of new hadrons"<<G4endl;
Pprojectile.transform(toLab);
Ptarget.transform(toLab);
projectile->Set4Momentum(Pprojectile);
target->Set4Momentum(Ptarget);
projectile->SetTimeOfCreation(target->GetTimeOfCreation());
projectile->SetPosition(target->GetPosition());
G4bool Result= theElastic->ElasticScattering (projectile,target,theParameters);
projectile->Set4Momentum(Pprojectile);
target->Set4Momentum(Ptarget);
return Result;
}
G4bool Result= theElastic->ElasticScattering (projectile,target,theParameters);
return Result;
} // end of if(Make elastic scattering for projectile meson?)
} else
{ // For projectile baryon
G4double Wexcit=1.-2.256*std::exp(-0.6*ProjectileRapidity);
//Wexcit=0.;
if(G4UniformRand() > Wexcit)
{ // Make elastic scattering
//G4cout<<"Make elastic scattering of new hadrons"<<G4endl;
Pprojectile.transform(toLab);
Ptarget.transform(toLab);
projectile->SetTimeOfCreation(target->GetTimeOfCreation());
projectile->SetPosition(target->GetPosition());
projectile->Set4Momentum(Pprojectile);
target->Set4Momentum(Ptarget);
G4bool Result= theElastic->ElasticScattering (projectile,target,theParameters);
return Result;
} // end of if(Make elastic scattering for projectile baryon?)
}
//G4cout<<"Make excitation of new hadrons"<<G4endl;
} // End of charge exchange part ------------------------------
// ------------------------------------------------------------------
G4double ProbOfDiffraction=ProbProjectileDiffraction + ProbTargetDiffraction;
/*
G4cout<<"Excite --------------------"<<G4endl;
G4cout<<"Proj "<<M0projectile<<" "<<ProjectileDiffStateMinMass<<" "<<ProjectileNonDiffStateMinMass<<G4endl;
G4cout<<"Targ "<<M0target <<" "<<TargetDiffStateMinMass <<" "<<TargetNonDiffStateMinMass<<G4endl;
G4cout<<"SqrtS "<<SqrtS<<G4endl;
G4cout<<"Prob ProjDiff TargDiff "<<ProbProjectileDiffraction<<" "<<ProbTargetDiffraction<<" "<<ProbOfDiffraction<<G4endl;
G4cout<<"Pr Y "<<Pprojectile.rapidity()<<" Tr Y "<<Ptarget.rapidity()<<G4endl;
G4int Uzhi; G4cin>>Uzhi;
*/
/*
if(ProjectileNonDiffStateMinMass + TargetNonDiffStateMinMass > SqrtS) // 24.07.10
{
if(ProbOfDiffraction!=0.)
{
ProbProjectileDiffraction/=ProbOfDiffraction;
ProbOfDiffraction=1.;
} else {return false;}
}
*/
if(ProbOfDiffraction!=0.)
{
ProbProjectileDiffraction/=ProbOfDiffraction;
@@ -477,6 +633,8 @@ G4bool G4DiffractiveExcitation::
ProbProjectileDiffraction=0.;
}
//G4cout<<"Prob ProjDiff TargDiff "<<ProbProjectileDiffraction<<" "<<ProbTargetDiffraction<<" "<<ProbOfDiffraction<<G4endl;
G4double ProjectileDiffStateMinMass2 = ProjectileDiffStateMinMass *
ProjectileDiffStateMinMass;
G4double ProjectileNonDiffStateMinMass2 = ProjectileNonDiffStateMinMass *
@@ -499,34 +657,41 @@ G4bool G4DiffractiveExcitation::
G4double Qminus, Qplus;
G4int whilecount=0;
// Choose a process ---------------------------
if(G4UniformRand() < ProbOfDiffraction)
{
if(G4UniformRand() < ProbProjectileDiffraction)
{ //-------- projectile diffraction ---------------
//G4cout<<"projectile diffraction"<<G4endl;
do {
// Generate pt
// if (whilecount++ >= 500 && (whilecount%100)==0)
// G4cout << "G4DiffractiveExcitation::ExciteParticipants possibly looping"
// << ", loop count/ maxPtSquare : "
// << whilecount << " / " << maxPtSquare << G4endl;
// whilecount++;
if (whilecount > 1000 )
{
Qmomentum=G4LorentzVector(0.,0.,0.,0.);
target->SetStatus(2); return false; // Ignore this interaction
};
// --------------- Check that the interaction is possible -----------
ProjMassT2=ProjectileDiffStateMinMass2;
ProjMassT =ProjectileDiffStateMinMass;
TargMassT2=M0target2;
TargMassT =M0target;
//G4cout<<"Masses "<<ProjMassT<<" "<<TargMassT<<" "<<SqrtS<<" "<<ProjMassT+TargMassT<<G4endl;
PZcms2=(S*S + ProjMassT2*ProjMassT2 + TargMassT2*TargMassT2-
2.*S*ProjMassT2-2.*S*TargMassT2-2.*ProjMassT2*TargMassT2)
/4./S;
//G4cout<<"PZcms2 PrD"<<PZcms2<<G4endl;
if(PZcms2 < 0 )
{
target->SetStatus(2);
@@ -555,6 +720,7 @@ G4bool G4DiffractiveExcitation::
PMinusNew=ChooseP(PMinusMin, PMinusMax);
// PMinusNew=1./sqrt(1./PMinusMin-G4UniformRand()*(1./PMinusMin-1./PMinusMax));
//PMinusNew=1./sqr(1./std::sqrt(PMinusMin)-G4UniformRand()*(1./std::sqrt(PMinusMin)-1./std::sqrt(PMinusMax)));
TMinusNew=SqrtS-PMinusNew;
Qminus=Ptarget.minus()-TMinusNew;
@@ -563,23 +729,29 @@ G4bool G4DiffractiveExcitation::
Qmomentum.setPz( (Qplus-Qminus)/2 );
Qmomentum.setE( (Qplus+Qminus)/2 );
} while (
((Pprojectile+Qmomentum).mag2() < ProjectileDiffStateMinMass2) || //No without excitation
((Ptarget -Qmomentum).mag2() < M0target2 ));
} while ((Pprojectile+Qmomentum).mag2() < ProjectileDiffStateMinMass2); //||
//Repeat the sampling because there was not any excitation
//((Ptarget -Qmomentum).mag2() < M0target2 )) );
}
else
{ // -------------- Target diffraction ----------------
//G4cout<<"Target diffraction"<<G4endl;
do {
// Generate pt
// if (whilecount++ >= 500 && (whilecount%100)==0)
// G4cout << "G4DiffractiveExcitation::ExciteParticipants possibly looping"
// << ", loop count/ maxPtSquare : "
// << whilecount << " / " << maxPtSquare << G4endl;
// whilecount++;
if (whilecount > 1000 )
{
Qmomentum=G4LorentzVector(0.,0.,0.,0.);
target->SetStatus(2); return false; // Ignore this interaction
};
//G4cout<<"Qm while "<<Qmomentum<<" "<<whilecount<<G4endl;
// --------------- Check that the interaction is possible -----------
ProjMassT2=M0projectile2;
ProjMassT =M0projectile;
@@ -591,6 +763,7 @@ G4bool G4DiffractiveExcitation::
2.*S*ProjMassT2-2.*S*TargMassT2-2.*ProjMassT2*TargMassT2)
/4./S;
//G4cout<<"PZcms2 TrD <0 "<<PZcms2<<" return"<<G4endl;
if(PZcms2 < 0 )
{
target->SetStatus(2);
@@ -599,6 +772,8 @@ G4bool G4DiffractiveExcitation::
maxPtSquare=PZcms2;
Qmomentum=G4LorentzVector(GaussianPt(AveragePt2,maxPtSquare),0);
//G4cout<<"Qm while "<<Qmomentum<<" "<<whilecount<<G4endl;
Pt2=G4ThreeVector(Qmomentum.vect()).mag2();
ProjMassT2=M0projectile2+Pt2;
@@ -611,6 +786,7 @@ G4bool G4DiffractiveExcitation::
2.*S*ProjMassT2-2.*S*TargMassT2-2.*ProjMassT2*TargMassT2)
/4./S;
//G4cout<<"PZcms2 <0 "<<PZcms2<<" continue"<<G4endl;
if(PZcms2 < 0 ) continue;
PZcms =std::sqrt(PZcms2);
@@ -618,6 +794,7 @@ G4bool G4DiffractiveExcitation::
TPlusMax=SqrtS-ProjMassT;
TPlusNew=ChooseP(TPlusMin, TPlusMax);
//TPlusNew=1./sqr(1./std::sqrt(TPlusMin)-G4UniformRand()*(1./std::sqrt(TPlusMin)-1./std::sqrt(TPlusMax)));
//TPlusNew=TPlusMax;
@@ -629,19 +806,35 @@ G4bool G4DiffractiveExcitation::
Qmomentum.setPz( (Qplus-Qminus)/2 );
Qmomentum.setE( (Qplus+Qminus)/2 );
} while (
((Pprojectile+Qmomentum).mag2() < M0projectile2 ) || //No without excitation
((Ptarget -Qmomentum).mag2() < TargetDiffStateMinMass2));
}
/*
G4cout<<(Pprojectile+Qmomentum).mag()<<" "<<M0projectile<<G4endl;
G4bool First=(Pprojectile+Qmomentum).mag2() < M0projectile2;
G4cout<<First<<G4endl;
G4cout<<(Ptarget -Qmomentum).mag()<<" "<<TargetDiffStateMinMass<<" "<<TargetDiffStateMinMass2<<G4endl;
G4bool Seco=(Ptarget -Qmomentum).mag2() < TargetDiffStateMinMass2;
G4cout<<Seco<<G4endl;
*/
} while ((Ptarget -Qmomentum).mag2() < TargetDiffStateMinMass2);
// Repeat the sampling because there was not any excitation
// (((Pprojectile+Qmomentum).mag2() < M0projectile2 ) || //No without excitation
// ((Ptarget -Qmomentum).mag2() < TargetDiffStateMinMass2)) );
//G4cout<<"Go out"<<G4endl;
} // End of if(G4UniformRand() < ProbProjectileDiffraction)
}
else //----------- Non-diffraction process ------------
{
//G4cout<<"Non-diffraction process"<<G4endl;
do {
// Generate pt
// if (whilecount++ >= 500 && (whilecount%100)==0)
// G4cout << "G4DiffractiveExcitation::ExciteParticipants possibly looping"
// << ", loop count/ maxPtSquare : "
// << whilecount << " / " << maxPtSquare << G4endl;
// whilecount++;
if (whilecount > 1000 )
{
Qmomentum=G4LorentzVector(0.,0.,0.,0.);
@@ -676,6 +869,7 @@ G4bool G4DiffractiveExcitation::
PZcms2=(S*S + ProjMassT2*ProjMassT2 + TargMassT2*TargMassT2-
2.*S*ProjMassT2-2.*S*TargMassT2-2.*ProjMassT2*TargMassT2)
/4./S;
//G4cout<<"PZcms2 ND"<<PZcms2<<G4endl;
if(PZcms2 < 0 ) continue;
PZcms =std::sqrt(PZcms2);
@@ -697,33 +891,41 @@ G4bool G4DiffractiveExcitation::
Qmomentum.setPz( (Qplus-Qminus)/2 );
Qmomentum.setE( (Qplus+Qminus)/2 );
/*
G4cout<<(Pprojectile+Qmomentum).mag2()<<" "<<ProjectileNonDiffStateMinMass2<<G4endl;
G4cout<<(Ptarget -Qmomentum).mag2()<<" "<<TargetNonDiffStateMinMass2<<G4endl;
G4int Uzhi; G4cin>>Uzhi;
*/
} while (
((Pprojectile+Qmomentum).mag2() < ProjectileNonDiffStateMinMass2) || //No double Diffraction
((Ptarget -Qmomentum).mag2() < TargetNonDiffStateMinMass2 ));
}
}
Pprojectile += Qmomentum;
Ptarget -= Qmomentum;
Pprojectile += Qmomentum;
Ptarget -= Qmomentum;
//G4cout<<"Pr Y "<<Pprojectile.rapidity()<<" Tr Y "<<Ptarget.rapidity()<<G4endl;
// Transform back and update SplitableHadron Participant.
Pprojectile.transform(toLab);
Ptarget.transform(toLab);
Pprojectile.transform(toLab);
Ptarget.transform(toLab);
// Calculation of the creation time ---------------------
projectile->SetTimeOfCreation(target->GetTimeOfCreation());
projectile->SetPosition(target->GetPosition());
projectile->SetTimeOfCreation(target->GetTimeOfCreation());
projectile->SetPosition(target->GetPosition());
// Creation time and position of target nucleon were determined at
// ReggeonCascade() of G4FTFModel
// ------------------------------------------------------
projectile->Set4Momentum(Pprojectile);
target->Set4Momentum(Ptarget);
//G4cout<<"Mproj "<<Pprojectile.mag()<<G4endl;
//G4cout<<"Mtarg "<<Ptarget.mag()<<G4endl;
projectile->Set4Momentum(Pprojectile);
target->Set4Momentum(Ptarget);
projectile->IncrementCollisionCount(1);
target->IncrementCollisionCount(1);
projectile->IncrementCollisionCount(1);
target->IncrementCollisionCount(1);
return true;
return true;
}
// ---------------------------------------------------------------------
@@ -37,6 +37,9 @@ G4DiffractiveHHScatterer::G4DiffractiveHHScatterer()
theStringFragmentation(new G4LundStringFragmentation())
{}
G4DiffractiveHHScatterer::~G4DiffractiveHHScatterer()
{}
void G4DiffractiveHHScatterer::CreateStrings()
/*
G4VSplitableHadron * aHadron,
@@ -24,8 +24,8 @@
// ********************************************************************
//
//
// $Id: G4DiffractiveSplitableHadron.cc,v 1.8 2009/07/31 11:03:00 vuzhinsk Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4DiffractiveSplitableHadron.cc,v 1.9 2010/09/20 15:50:46 vuzhinsk Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
// ------------------------------------------------------------
@@ -24,8 +24,8 @@
// ********************************************************************
//
//
// $Id: G4FTFModel.cc,v 1.34 2009/12/15 19:14:31 vuzhinsk Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4FTFModel.cc,v 1.37 2010/11/15 10:02:38 vuzhinsk Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
// ------------------------------------------------------------
@@ -98,7 +98,13 @@ int G4FTFModel::operator!=(const G4FTFModel &right) const
void G4FTFModel::Init(const G4Nucleus & aNucleus, const G4DynamicParticle & aProjectile)
{
theProjectile = aProjectile;
theParticipants.Init(aNucleus.GetN(),aNucleus.GetZ());
//G4cout<<"FTF init Pro "<<theProjectile.GetMass()<<" "<<theProjectile.GetMomentum()<<G4endl;
//G4cout<<"FTF init A Z "<<aNucleus.GetA_asInt()<<" "<<aNucleus.GetZ_asInt()<<G4endl;
//G4cout<<" "<<aNucleus.GetN()<<" "<<aNucleus.GetZ()<<G4endl;
//G4int Uzhi; G4cin>>Uzhi;
theParticipants.Init(aNucleus.GetA_asInt(),aNucleus.GetZ_asInt());
//G4cout<<"End nucl init"<<G4endl;
// ----------- N-mass number Z-charge -------------------------
// --- cms energy
@@ -108,10 +114,15 @@ void G4FTFModel::Init(const G4Nucleus & aNucleus, const G4DynamicParticle & aPro
if( theParameters != 0 ) delete theParameters;
theParameters = new G4FTFParameters(theProjectile.GetDefinition(),
aNucleus.GetN(),aNucleus.GetZ(),
aNucleus.GetA_asInt(),aNucleus.GetZ_asInt(),
s);
// theParameters = new G4FTFParameters(theProjectile.GetDefinition(),
// aNucleus.GetN(),aNucleus.GetZ(),
// s);
//theParameters->SetProbabilityOfElasticScatt(0.);
//G4cout<<theParameters->GetProbabilityOfElasticScatt()<<G4endl;
//G4int Uzhi; G4cin>>Uzhi;
// To turn on/off (1/0) elastic scattering
}
@@ -124,18 +135,20 @@ struct DeleteVSplitableHadron { void operator()(G4VSplitableHadron * aH){ delete
G4ExcitedStringVector * G4FTFModel::GetStrings()
{
G4ExcitedStringVector * theStrings(0);
//G4cout<<"GetString"<<G4endl;
theParticipants.GetList(theProjectile,theParameters);
//G4cout<<"Reggeon"<<G4endl;
ReggeonCascade();
G4bool Success(true);
if( PutOnMassShell() )
{
//G4cout<<"PutOn mass Shell OK"<<G4endl;
if( ExciteParticipants() )
{
//G4cout<<"Excite partic OK"<<G4endl;
theStrings = BuildStrings();
//G4cout<<"Build String OK"<<G4endl;
GetResidualNucleus();
if( theParameters != 0 )
@@ -193,7 +206,7 @@ void G4FTFModel::ReggeonCascade()
TheInvolvedNucleon[NumberOfInvolvedNucleon]=TargetNucleon;
NumberOfInvolvedNucleon++;
//G4cout<<"Prim NumberOfInvolvedNucleon "<<NumberOfInvolvedNucleon<<G4endl;
G4double XofWoundedNucleon = TargetNucleon->GetPosition().x();
G4double YofWoundedNucleon = TargetNucleon->GetPosition().y();
@@ -213,6 +226,7 @@ void G4FTFModel::ReggeonCascade()
TheInvolvedNucleon[NumberOfInvolvedNucleon]=Neighbour;
NumberOfInvolvedNucleon++;
//G4cout<<"Seco NumberOfInvolvedNucleon "<<NumberOfInvolvedNucleon<<G4endl;
G4VSplitableHadron *targetSplitable;
targetSplitable = new G4DiffractiveSplitableHadron(*Neighbour);
@@ -273,6 +287,7 @@ G4bool G4FTFModel::PutOnMassShell()
G4VSplitableHadron * primary = theParticipants.GetInteraction().GetProjectile();
G4LorentzVector Pprojectile=primary->Get4Momentum();
//G4cout<<"Pprojectile "<<Pprojectile<<G4endl;
// To get original projectile particle
if(Pprojectile.z() < 0.){return false;}
@@ -283,12 +298,13 @@ G4bool G4FTFModel::PutOnMassShell()
G4LorentzVector Psum = Pprojectile;
G4double SumMasses = Mprojectile + 20.*MeV; // 13.12.09
// Separation energy for projectile
//G4cout<<"SumMasses Pr "<<SumMasses<<G4endl;
//--------------- Target nucleus ------------------------------
G4V3DNucleus *theNucleus = GetWoundedNucleus();
G4Nucleon * aNucleon;
G4int ResidualMassNumber=theNucleus->GetMassNumber();
G4int ResidualCharge =theNucleus->GetCharge();
ResidualExcitationEnergy=0.;
G4LorentzVector PnuclearResidual(0.,0.,0.,0.);
@@ -304,6 +320,7 @@ G4bool G4FTFModel::PutOnMassShell()
Psum += aNucleon->Get4Momentum();
SumMasses += aNucleon->GetDefinition()->GetPDGMass();
SumMasses += 20.*MeV; // 13.12.09 Separation energy for a nucleon
//G4cout<<"SumMasses Tr "<<SumMasses<<G4endl;
ResidualMassNumber--;
ResidualCharge-=(G4int) aNucleon->GetDefinition()->GetPDGCharge();
ResidualExcitationEnergy+=ExcitationEnergyPerWoundedNucleon;
@@ -315,7 +332,7 @@ G4bool G4FTFModel::PutOnMassShell()
} // end of while (theNucleus->GetNextNucleon())
Psum += PnuclearResidual;
//G4cout<<"ResidualCharge ,ResidualMassNumber "<<ResidualCharge<<" "<<ResidualMassNumber<<G4endl;
G4double ResidualMass(0.);
if(ResidualMassNumber == 0)
{
@@ -330,13 +347,16 @@ G4bool G4FTFModel::PutOnMassShell()
}
// ResidualMass +=ResidualExcitationEnergy; // Will be given after checks
//G4cout<<"SumMasses And ResidualMass "<<SumMasses<<" "<<ResidualMass<<G4endl;
SumMasses += ResidualMass;
//G4cout<<"SumMasses + ResM "<<SumMasses<<G4endl;
//G4cout<<"Psum "<<Psum<<G4endl;
//-------------------------------------------------------------
G4double SqrtS=Psum.mag();
G4double S=Psum.mag2();
//G4cout<<"SqrtS < SumMasses "<<SqrtS<<" "<<SumMasses<<G4endl;
if(SqrtS < SumMasses) {return false;} // It is impossible to simulate
// after putting nuclear nucleons
// on mass-shell
@@ -345,7 +365,7 @@ G4bool G4FTFModel::PutOnMassShell()
ResidualMass +=ResidualExcitationEnergy;
SumMasses +=ResidualExcitationEnergy;
//G4cout<<"ResidualMass "<<ResidualMass<<" "<<SumMasses<<G4endl;
//-------------------------------------------------------------
// Sampling of nucleons what are transfered to delta-isobars --
G4int MaxNumberOfDeltas = (int)((SqrtS - SumMasses)/(400.*MeV));
@@ -372,6 +392,7 @@ G4bool G4FTFModel::PutOnMassShell()
} // end of for(G4int i=0; i < NumberOfInvolvedNucleon; i++ )
} // end of if(theNucleus.GetMassNumber() != 1)
//-------------------------------------------------------------
G4LorentzRotation toCms(-1*Psum.boostVector());
G4LorentzVector Ptmp=toCms*Pprojectile;
if ( Ptmp.pz() <= 0. )
@@ -392,7 +413,7 @@ G4bool G4FTFModel::PutOnMassShell()
G4double AveragePt2 = theParameters->GetPt2ofNuclearDestruction();
G4double maxPtSquare = theParameters->GetMaxPt2ofNuclearDestruction();
//G4cout<<"Dcor "<<Dcor<<" AveragePt2 "<<AveragePt2<<G4endl;
G4double M2target(0.);
G4double WminusTarget(0.);
G4double WplusProjectile(0.);
@@ -408,6 +429,7 @@ G4bool G4FTFModel::PutOnMassShell()
{ // while (DecayMomentum < 0.)
NumberOfTries++;
//G4cout<<"NumberOfTries "<<NumberOfTries<<G4endl;
if(NumberOfTries == 100*(NumberOfTries/100)) // 100
{ // At large number of tries it would be better to reduce the values
ScaleFactor/=2.;
@@ -438,6 +460,7 @@ G4bool G4FTFModel::PutOnMassShell()
XminusSum+=Xminus;
G4LorentzVector tmp(tmpPt.x(),tmpPt.y(),Xminus,0.);
//G4cout<<"Inv i mom "<<i<<" "<<tmp<<G4endl;
aNucleon->SetMomentum(tmp);
} // end of for(G4int i=0; i < NumberOfInvolvedNucleon; i++ )
@@ -446,6 +469,7 @@ G4bool G4FTFModel::PutOnMassShell()
G4double DeltaY(0.);
G4double DeltaXminus(0.);
//G4cout<<"ResidualMassNumber "<<ResidualMassNumber<<" "<<PtSum<<G4endl;
if(ResidualMassNumber == 0)
{
DeltaX = PtSum.x()/NumberOfInvolvedNucleon;
@@ -456,7 +480,7 @@ G4bool G4FTFModel::PutOnMassShell()
{
DeltaXminus = -1./theNucleus->GetMassNumber();
}
//G4cout<<"Dx y xmin "<<DeltaX<<" "<<DeltaY<<" "<<DeltaXminus<<G4endl;
XminusSum=1.;
M2target =0.;
@@ -466,10 +490,16 @@ G4bool G4FTFModel::PutOnMassShell()
Xminus = aNucleon->Get4Momentum().pz() - DeltaXminus;
XminusSum-=Xminus;
//G4cout<<" i X-sum "<<i<<" "<<Xminus<<" "<<XminusSum<<G4endl;
if(ResidualMassNumber == 0) // Uzhi 5.07.10
{
if((Xminus <= 0.) || (Xminus > 1.)) {InerSuccess=false; break;}
} else
{
if((Xminus <= 0.) || (Xminus > 1.) ||
(XminusSum <=0.) || (XminusSum > 1.)) {InerSuccess=false; break;}
} // Uzhi 5.07.10
if((Xminus <= 0.) || (Xminus > 1.) ||
(XminusSum <=0.) || (XminusSum > 1.)) {InerSuccess=false; break;}
G4double Px=aNucleon->Get4Momentum().px() - DeltaX;
G4double Py=aNucleon->Get4Momentum().py() - DeltaY;
@@ -481,10 +511,14 @@ G4bool G4FTFModel::PutOnMassShell()
aNucleon->SetMomentum(tmp);
} // end of for(G4int i=0; i < NumberOfInvolvedNucleon; i++ )
//G4cout<<"Rescale O.K."<<G4endl;
if(InerSuccess && (ResidualMassNumber != 0))
{
M2target +=(ResidualMass*ResidualMass + PtSum.mag2())/XminusSum;
}
//G4cout<<"InerSuccess "<<InerSuccess<<G4endl;
//G4int Uzhi;G4cin>>Uzhi;
} while(!InerSuccess);
} while (SqrtS < Mprojectile + std::sqrt(M2target));
//-------------------------------------------------------------
@@ -494,6 +528,7 @@ G4bool G4FTFModel::PutOnMassShell()
WminusTarget=(S-M2projectile+M2target+std::sqrt(DecayMomentum2))/2./SqrtS;
WplusProjectile=SqrtS - M2target/WminusTarget;
//G4cout<<"DecayMomentum2 "<<DecayMomentum2<<G4endl;
//-------------------------------------------------------------
for(G4int i=0; i < NumberOfInvolvedNucleon; i++ )
{
@@ -510,6 +545,7 @@ G4bool G4FTFModel::PutOnMassShell()
if( E+Pz > WplusProjectile ){OuterSuccess=false; break;}
} // end of for(G4int i=0; i < NumberOfInvolvedNucleon; i++ )
//G4int Uzhi;G4cin>>Uzhi;
} while(!OuterSuccess);
//-------------------------------------------------------------
@@ -519,6 +555,7 @@ G4bool G4FTFModel::PutOnMassShell()
Pprojectile.transform(toLab); // The work with the projectile
primary->Set4Momentum(Pprojectile); // is finished at the moment.
//G4cout<<"Final proj mom "<<primary->Get4Momentum()<<G4endl;
//-------------------------------------------------------------
G4ThreeVector Residual3Momentum(0.,0.,1.);
@@ -549,19 +586,26 @@ G4bool G4FTFModel::PutOnMassShell()
} // end of for(G4int i=0; i < NumberOfInvolvedNucleon; i++ )
//G4cout<<"ResidualMassNumber and Mom "<<ResidualMassNumber<<" "<<Residual3Momentum<<G4endl;
G4double Mt2Residual=sqr(ResidualMass) +
sqr(Residual3Momentum.x())+sqr(Residual3Momentum.y());
G4double PzResidual=-WminusTarget*Residual3Momentum.z()/2. +
//==========================
//G4cout<<"WminusTarget Residual3Momentum.z() "<<WminusTarget<<" "<<Residual3Momentum.z()<<G4endl;
G4double PzResidual=0.;
G4double EResidual =0.;
if(ResidualMassNumber != 0)
{
PzResidual=-WminusTarget*Residual3Momentum.z()/2. +
Mt2Residual/(2.*WminusTarget*Residual3Momentum.z());
G4double EResidual = WminusTarget*Residual3Momentum.z()/2. +
EResidual = WminusTarget*Residual3Momentum.z()/2. +
Mt2Residual/(2.*WminusTarget*Residual3Momentum.z());
}
//==========================
Residual4Momentum.setPx(Residual3Momentum.x());
Residual4Momentum.setPy(Residual3Momentum.y());
Residual4Momentum.setPz(PzResidual);
Residual4Momentum.setE(EResidual);
//G4cout<<"Residual4Momentum "<<Residual4Momentum<<G4endl;
Residual4Momentum.transform(toLab);
//-------------------------------------------------------------
return true;
@@ -574,15 +618,38 @@ G4bool G4FTFModel::ExciteParticipants()
// do { // } while (Successfull == false) // Closed 15.12.09
Successfull=false;
theParticipants.StartLoop();
G4int MaxNumOfInelCollisions=G4int(theParameters->GetMaxNumberOfCollisions());
G4double NumberOfInel(0.);
//
if(MaxNumOfInelCollisions > 0)
{ // Plab > Pbound, Normal application of FTF is possible
G4double ProbMaxNumber=theParameters->GetMaxNumberOfCollisions()-MaxNumOfInelCollisions;
if(G4UniformRand() < ProbMaxNumber) {MaxNumOfInelCollisions++;}
NumberOfInel=MaxNumOfInelCollisions;
} else
{ // Plab < Pbound, Normal application of FTF is impossible, low energy corrections
if(theParticipants.theNucleus->GetMassNumber() > 1)
{
NumberOfInel = theParameters->GetProbOfInteraction();
MaxNumOfInelCollisions = 1;
} else
{ // Special case for hadron-nucleon interactions
NumberOfInel = 1.;
MaxNumOfInelCollisions = 1;
}
} // end of if(MaxNumOfInelCollisions > 0)
//
while (theParticipants.Next())
{
const G4InteractionContent & collision=theParticipants.GetInteraction();
G4VSplitableHadron * projectile=collision.GetProjectile();
G4VSplitableHadron * target=collision.GetTarget();
//G4cout<<"ProbabilityOfElasticScatt "<<theParameters->GetProbabilityOfElasticScatt()<<G4endl;
if(G4UniformRand()< theParameters->GetProbabilityOfElasticScatt())
{ // Elastic scattering -------------------------
//G4cout<<"Elastic FTF"<<G4endl;
if(theElastic->ElasticScattering(projectile, target, theParameters))
{
Successfull = Successfull || true;
@@ -594,6 +661,7 @@ G4bool G4FTFModel::ExciteParticipants()
}
else
{ // Inelastic scattering ----------------------
/*
if(theExcitation->ExciteParticipants(projectile, target,
theParameters, theElastic))
{
@@ -603,6 +671,31 @@ G4bool G4FTFModel::ExciteParticipants()
Successfull = Successfull || false;
target->SetStatus(2);
}
*/
//G4cout<<"InElastic FTF"<<G4endl;
if(G4UniformRand()< NumberOfInel/MaxNumOfInelCollisions)
{
if(theExcitation->ExciteParticipants(projectile, target,
theParameters, theElastic))
{
Successfull = Successfull || true;
NumberOfInel--;
} else
{
Successfull = Successfull || false;
target->SetStatus(2);
}
} else // If NumOfInel
{
if(theElastic->ElasticScattering(projectile, target, theParameters))
{
Successfull = Successfull || true;
} else
{
Successfull = Successfull || false;
target->SetStatus(2);
}
} // end if NumOfInel
}
} // end of while (theParticipants.Next())
// } while (Successfull == false); // Closed 15.12.09
@@ -623,7 +716,7 @@ G4ExcitedStringVector * G4FTFModel::BuildStrings()
G4ExcitedString * SecondString(0); // two strings will be produced.
theParticipants.StartLoop(); // restart a loop
//
while ( theParticipants.Next() )
{
const G4InteractionContent & interaction=theParticipants.GetInteraction();
@@ -633,7 +726,7 @@ G4ExcitedStringVector * G4FTFModel::BuildStrings()
interaction.GetProjectile()) )
primaries.push_back(interaction.GetProjectile());
}
unsigned int ahadron;
for ( ahadron=0; ahadron < primaries.size() ; ahadron++)
{
@@ -649,7 +742,7 @@ G4ExcitedStringVector * G4FTFModel::BuildStrings()
if(FirstString != 0) strings->push_back(FirstString);
if(SecondString != 0) strings->push_back(SecondString);
}
//
for (G4int ahadron=0; ahadron < NumberOfInvolvedNucleon ; ahadron++)
{
if(TheInvolvedNucleon[ahadron]->GetSplitableHadron()->GetStatus() !=0) //== 2)
@@ -668,7 +761,6 @@ G4ExcitedStringVector * G4FTFModel::BuildStrings()
std::for_each(primaries.begin(), primaries.end(), DeleteVSplitableHadron());
primaries.clear();
return strings;
}
// ------------------------------------------------------------
@@ -24,8 +24,8 @@
// ********************************************************************
//
//
// $Id: G4FTFParameters.cc,v 1.13 2009/12/16 17:51:15 gunter Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4FTFParameters.cc,v 1.15 2010/11/15 10:02:38 vuzhinsk Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
#include "G4FTFParameters.hh"
@@ -41,9 +41,13 @@ G4FTFParameters::~G4FTFParameters()
{;}
//**********************************************************************************************
//G4FTFParameters::G4FTFParameters(const G4ParticleDefinition * particle,
// G4double theA,
// G4double theZ,
// G4double s)
G4FTFParameters::G4FTFParameters(const G4ParticleDefinition * particle,
G4double theA,
G4double theZ,
G4int theA,
G4int theZ,
G4double s)
{
G4int PDGcode = particle->GetPDGEncoding();
@@ -55,16 +59,21 @@ G4FTFParameters::G4FTFParameters(const G4ParticleDefinition * particle,
(2*TargetMass);
G4double Plab = std::sqrt(Elab * Elab - ProjectileMass*ProjectileMass);
G4double Ylab=0.5*std::log((Elab+Plab)/(Elab-Plab));
Plab/=GeV; // Uzhi 8.07.10
G4double LogPlab = std::log( Plab );
G4double sqrLogPlab = LogPlab * LogPlab;
G4int NumberOfTargetProtons = (G4int) theZ;
G4int NumberOfTargetNeutrons = (G4int) theA- (G4int) theZ;
G4int NumberOfTargetProtons = theZ;
G4int NumberOfTargetNeutrons = theA-theZ;
// G4int NumberOfTargetProtons = (G4int) theZ;
// G4int NumberOfTargetNeutrons = (G4int) theA- (G4int) theZ;
G4int NumberOfTargetNucleons = NumberOfTargetProtons + NumberOfTargetNeutrons;
G4double Xtotal, Xelastic;
if( absPDGcode > 1000 ) //------Projectile is baryon --------
if( PDGcode > 1000 ) //------Projectile is baryon --------
{
G4double XtotPP = 48.0 + 0. *std::pow(Plab, 0. ) + 0.522*sqrLogPlab - 4.51*LogPlab;
G4double XtotPN = 47.3 + 0. *std::pow(Plab, 0. ) + 0.513*sqrLogPlab - 4.27*LogPlab;
@@ -72,6 +81,19 @@ G4FTFParameters::G4FTFParameters(const G4ParticleDefinition * particle,
G4double XelPP = 11.9 + 26.9*std::pow(Plab,-1.21) + 0.169*sqrLogPlab - 1.85*LogPlab;
G4double XelPN = 11.9 + 26.9*std::pow(Plab,-1.21) + 0.169*sqrLogPlab - 1.85*LogPlab;
Xtotal = ( NumberOfTargetProtons * XtotPP +
NumberOfTargetNeutrons * XtotPN ) / NumberOfTargetNucleons;
Xelastic = ( NumberOfTargetProtons * XelPP +
NumberOfTargetNeutrons * XelPN ) / NumberOfTargetNucleons;
}
else if( PDGcode < -1000 ) //------Projectile is anti_baryon --------
{
G4double XtotPP = 38.4 + 77.6*std::pow(Plab,-0.64) + 0.26*sqrLogPlab - 1.2*LogPlab;
G4double XtotPN = 0. + 133.6*std::pow(Plab,-0.70) + 1.22*sqrLogPlab +13.7*LogPlab;
G4double XelPP = 10.2 + 52.7*std::pow(Plab,-1.16) + 0.125*sqrLogPlab - 1.28*LogPlab;
G4double XelPN = 36.5 + 0. *std::pow(Plab, 0. ) + 0. *sqrLogPlab -11.9 *LogPlab;
Xtotal = ( NumberOfTargetProtons * XtotPP +
NumberOfTargetNeutrons * XtotPN ) / NumberOfTargetNucleons;
Xelastic = ( NumberOfTargetProtons * XelPP +
@@ -180,11 +202,34 @@ G4FTFParameters::G4FTFParameters(const G4ParticleDefinition * particle,
// Xtotal and Xelastic in mb
// For Pi- P interactions only!
if(std::abs(Plab-1.4) < 0.05) {Xtotal=3.500599e+01; Xelastic= 1.150032e+01;}
if(std::abs(Plab-1.5) < 0.05) {Xtotal=3.450591e+01; Xelastic= 1.050038e+01;}
if(std::abs(Plab-1.6) < 0.05) {Xtotal=3.430576e+01; Xelastic= 9.800433e+00;}
if(std::abs(Plab-1.7) < 0.05) {Xtotal=3.455560e+01; Xelastic= 9.300436e+00;}
if(std::abs(Plab-1.8) < 0.05) {Xtotal=3.480545e+01; Xelastic= 8.800438e+00;}
if(std::abs(Plab-2.0) < 0.05) {Xtotal=3.570503e+01; Xelastic= 8.200370e+00;}
if(std::abs(Plab-2.2) < 0.05) {Xtotal=3.530495e+01; Xelastic= 7.800362e+00;}
if(std::abs(Plab-2.5) < 0.05) {Xtotal=3.410484e+01; Xelastic= 7.350320e+00;}
if(std::abs(Plab-2.75) < 0.05){Xtotal=3.280479e+01; Xelastic= 7.050273e+00;}
if(std::abs(Plab-3.0) < 0.05) {Xtotal=3.180473e+01; Xelastic= 6.800258e+00;}
if(std::abs(Plab-4.0) < 0.05) {Xtotal=2.910441e+01; Xelastic= 6.100229e+00;}
if(std::abs(Plab-5.0) < 0.05) {Xtotal=2.820372e+01; Xelastic= 5.700275e+00;}
if(std::abs(Plab-6.0) < 0.05) {Xtotal=2.760367e+01; Xelastic= 5.400255e+00;}
if(std::abs(Plab-7.0) < 0.05) {Xtotal=2.725366e+01; Xelastic= 5.150256e+00;}
if(std::abs(Plab-8.0) < 0.05) {Xtotal=2.690365e+01; Xelastic= 4.900258e+00;}
if(std::abs(Plab-10.0) < 0.05){Xtotal=2.660342e+01; Xelastic= 4.600237e+00;}
if(std::abs(Plab-12.0) < 0.05){Xtotal=2.632341e+01; Xelastic= 4.480229e+00;}
if(std::abs(Plab-14.0) < 0.05){Xtotal=2.604340e+01; Xelastic= 4.360221e+00;}
if(std::abs(Plab-20.0) < 0.05){Xtotal=2.520337e+01; Xelastic= 4.000197e+00;}
if(std::abs(Plab-30.0) < 0.05){Xtotal=2.505334e+01; Xelastic= 3.912679e+00;}
//
//----------- Geometrical parameters ------------------------------------------------
SetTotalCrossSection(Xtotal);
SetElastisCrossSection(Xelastic);
SetInelasticCrossSection(Xtotal-Xelastic);
//G4cout<<"Plab Xtotal, Xelastic Xinel "<<Plab<<" "<<Xtotal<<" "<<Xelastic<<Xtotal-Xelastic)<<G4endl;
// // Interactions with elastic and inelastic collisions
SetProbabilityOfElasticScatt(Xtotal, Xelastic);
SetRadiusOfHNinteractions2(Xtotal/pi/10.);
@@ -195,6 +240,7 @@ G4FTFParameters::G4FTFParameters(const G4ParticleDefinition * particle,
*/ //=======================================================
//-----------------------------------------------------------------------------------
SetSlope( Xtotal*Xtotal/16./pi/Xelastic/0.3894 ); // Slope parameter of elastic scattering
// (GeV/c)^(-2))
//-----------------------------------------------------------------------------------
@@ -206,36 +252,56 @@ G4FTFParameters::G4FTFParameters(const G4ParticleDefinition * particle,
SetAvaragePt2ofElasticScattering(1./(Xtotal*Xtotal/16./pi/Xelastic/0.3894)*GeV*GeV);
//----------- Parameters of excitations ---------------------------------------------
if( absPDGcode > 1000 ) //------Projectile is baryon --------
if( PDGcode > 1000 ) //------Projectile is baryon --------
{
SetMagQuarkExchange(3.4); //3.8);
SetSlopeQuarkExchange(1.2);
SetDeltaProbAtQuarkExchange(0.1); //(0.1*4.);
SetMagQuarkExchange(1.84);//(3.63);
SetSlopeQuarkExchange(0.7);//(1.2);
SetDeltaProbAtQuarkExchange(0.);
if(NumberOfTargetNucleons > 26) {SetProbOfSameQuarkExchange(1.);}
else {SetProbOfSameQuarkExchange(0.);}
SetProjMinDiffMass(1.1); // GeV
SetProjMinNonDiffMass(1.1); // GeV
SetProbabilityOfProjDiff(0.76*std::pow(s/GeV/GeV,-0.35));
SetProjMinDiffMass(1.16); // GeV
SetProjMinNonDiffMass(1.16); // GeV
SetProbabilityOfProjDiff(0.805*std::exp(-0.35*Ylab));// 0.5
SetTarMinDiffMass(1.1); // GeV
SetTarMinNonDiffMass(1.1); // GeV
SetProbabilityOfTarDiff(0.76*std::pow(s/GeV/GeV,-0.35));
SetTarMinDiffMass(1.16); // GeV
SetTarMinNonDiffMass(1.16); // GeV
SetProbabilityOfTarDiff(0.805*std::exp(-0.35*Ylab));// 0.5
SetAveragePt2(0.3); // GeV^2
SetAveragePt2(0.15); // 0.15 GeV^2
}
if( PDGcode < -1000 ) //------Projectile is anti_baryon --------
{
SetMagQuarkExchange(0.);
SetSlopeQuarkExchange(0.);
SetDeltaProbAtQuarkExchange(0.);
SetProbOfSameQuarkExchange(0.);
SetProjMinDiffMass(1.16); // GeV
SetProjMinNonDiffMass(1.16); // GeV
SetProbabilityOfProjDiff(0.805*std::exp(-0.35*Ylab));// 0.5
SetTarMinDiffMass(1.16); // GeV
SetTarMinNonDiffMass(1.16); // GeV
SetProbabilityOfTarDiff(0.805*std::exp(-0.35*Ylab));// 0.5
SetAveragePt2(0.15); // 0.15 GeV^2
}
else if( absPDGcode == 211 || PDGcode == 111) //------Projectile is Pion -----------
{
SetMagQuarkExchange(120.); // 210.
SetSlopeQuarkExchange(2.0);
SetDeltaProbAtQuarkExchange(0.6);
SetMagQuarkExchange(240.);
SetSlopeQuarkExchange(2.);
SetDeltaProbAtQuarkExchange(0.56); //(0.35);
SetProjMinDiffMass(0.5); // GeV
SetProjMinNonDiffMass(0.3); // GeV
SetProbabilityOfProjDiff(0.*0.62*std::pow(s/GeV/GeV,-0.51)); // 40/32 X-dif/X-inel
SetProjMinNonDiffMass(0.5); // GeV 0.3
SetProbabilityOfProjDiff(0.);//(0.*0.62*std::pow(s/GeV/GeV,-0.51)); // 40/32 X-dif/X-inel
SetTarMinDiffMass(1.1); // GeV
SetTarMinNonDiffMass(1.1); // GeV
SetProbabilityOfTarDiff(2.*0.62*std::pow(s/GeV/GeV,-0.51)); // 40/32 X-dif/X-inel
SetTarMinDiffMass(1.16); // GeV
SetTarMinNonDiffMass(1.16); // GeV
// SetProbabilityOfTarDiff(1.);//(2.*0.62*std::pow(s/GeV/GeV,-0.51));
// SetProbabilityOfTarDiff(2.6*std::exp(-0.46*Ylab));
SetProbabilityOfTarDiff(0.8*std::exp(-0.6*(Ylab-3.)));
SetAveragePt2(0.3); // GeV^2
}
@@ -285,21 +351,72 @@ G4FTFParameters::G4FTFParameters(const G4ParticleDefinition * particle,
if( absPDGcode < 1000 )
{
SetCofNuclearDestruction(1.); //1.0); // for meson projectile
} else if( theA > 20. )
SetMaxNumberOfCollisions(1000.,1.); //(Plab,2.); //3.); ##############################
// SetCofNuclearDestruction(0.); //1.0); // for meson projectile
// SetCofNuclearDestruction(1.*std::exp(4.*(Ylab-2.1))/(1.+std::exp(4.*(Ylab-2.1))));
//G4cout<<Ylab<<" "<<0.62*std::exp(4.*(Ylab-4.5))/(1.+std::exp(4.*(Ylab-4.5)))<<G4endl;
//G4int Uzhi; G4cin>>Uzhi;
// SetMaxNumberOfCollisions(Plab,2.); //4.); // ##############################
SetCofNuclearDestruction(1.*std::exp(4.*(Ylab-2.1))/(1.+std::exp(4.*(Ylab-2.1)))); //0.62 1.0
//------------------------------------------
// SetDofNuclearDestruction(0.4);
// SetPt2ofNuclearDestruction(0.17*GeV*GeV);
// SetMaxPt2ofNuclearDestruction(1.0*GeV*GeV);
// SetExcitationEnergyPerWoundedNucleon(100*MeV);
SetDofNuclearDestruction(0.4);
SetPt2ofNuclearDestruction((0.035+
0.04*std::exp(4.*(Ylab-2.5))/(1.+std::exp(4.*(Ylab-2.5))))*GeV*GeV); //0.09
SetMaxPt2ofNuclearDestruction(1.0*GeV*GeV);
SetExcitationEnergyPerWoundedNucleon(75.*MeV);
} else // for baryon projectile
{
SetCofNuclearDestruction(0.2); //2); // for baryon projectile and heavy target
} else
{
SetCofNuclearDestruction(0.2); //1.0); // for baryon projectile and light target
SetMaxNumberOfCollisions(Plab,2.); //4.); // ##############################
SetCofNuclearDestruction(1.*std::exp(4.*(Ylab-2.1))/(1.+std::exp(4.*(Ylab-2.1)))); //0.62 1.0
//G4cout<<Ylab<<" "<<0.62*std::exp(4.*(Ylab-2.1))/(1.+std::exp(4.*(Ylab-2.1)))<<G4endl;
//G4int Uzhi; G4cin>>Uzhi;
SetDofNuclearDestruction(0.4);
SetPt2ofNuclearDestruction((0.035+
0.04*std::exp(4.*(Ylab-2.5))/(1.+std::exp(4.*(Ylab-2.5))))*GeV*GeV); //0.09
SetMaxPt2ofNuclearDestruction(1.0*GeV*GeV);
SetExcitationEnergyPerWoundedNucleon(75.*MeV);
}
SetR2ofNuclearDestruction(1.5*fermi*fermi);
SetExcitationEnergyPerWoundedNucleon(100*MeV);
//SetCofNuclearDestruction(0.47*std::exp(2.*(Ylab-2.5))/(1.+std::exp(2.*(Ylab-2.5))));
//SetPt2ofNuclearDestruction((0.035+0.1*std::exp(4.*(Ylab-3.))/(1.+std::exp(4.*(Ylab-3.))))*GeV*GeV);
//SetMagQuarkExchange(120.); // 210. PipP
//SetSlopeQuarkExchange(2.0);
//SetDeltaProbAtQuarkExchange(0.6);
//SetProjMinDiffMass(0.7); // GeV 1.1
//SetProjMinNonDiffMass(0.7); // GeV
//SetProbabilityOfProjDiff(0.85*std::pow(s/GeV/GeV,-0.5)); // 40/32 X-dif/X-inel
//SetTarMinDiffMass(1.1); // GeV
//SetTarMinNonDiffMass(1.1); // GeV
//SetProbabilityOfTarDiff(0.85*std::pow(s/GeV/GeV,-0.5)); // 40/32 X-dif/X-inel
//
//SetAveragePt2(0.3); // GeV^2
//------------------------------------
//SetProbabilityOfElasticScatt(1.,1.); //(Xtotal, Xelastic);
//SetProbabilityOfProjDiff(1.*0.62*std::pow(s/GeV/GeV,-0.51)); // 0->1
//SetProbabilityOfTarDiff(4.*0.62*std::pow(s/GeV/GeV,-0.51)); // 2->4
//SetAveragePt2(0.3); //(0.15);
//SetAvaragePt2ofElasticScattering(0.);
//SetMaxNumberOfCollisions(4.*(Plab+0.01),Plab); //6.); // ##############################
//SetCofNuclearDestruction(0.2); //(0.4);
//SetExcitationEnergyPerWoundedNucleon(0.*MeV); //(75.*MeV);
//SetDofNuclearDestruction(0.4); //(0.4);
//SetPt2ofNuclearDestruction(0.1*GeV*GeV); //(0.168*GeV*GeV);
SetDofNuclearDestruction(0.4);
SetPt2ofNuclearDestruction(0.17*GeV*GeV);
SetMaxPt2ofNuclearDestruction(1.0*GeV*GeV);
}
//**********************************************************************************************
@@ -24,8 +24,8 @@
// ********************************************************************
//
//
// $Id: G4FTFParticipants.cc,v 1.16 2009/11/25 09:14:03 vuzhinsk Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4FTFParticipants.cc,v 1.17 2010/09/20 15:50:46 vuzhinsk Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
// ------------------------------------------------------------
// GEANT 4 class implementation file