Import Geant4 9.4.0 source tree
This commit is contained in:
@@ -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.
|
||||
|
||||
+4
-3
@@ -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,
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
+45
-7
@@ -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;}
|
||||
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
+266
-64
@@ -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;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
+3
@@ -37,6 +37,9 @@ G4DiffractiveHHScatterer::G4DiffractiveHHScatterer()
|
||||
theStringFragmentation(new G4LundStringFragmentation())
|
||||
{}
|
||||
|
||||
G4DiffractiveHHScatterer::~G4DiffractiveHHScatterer()
|
||||
{}
|
||||
|
||||
void G4DiffractiveHHScatterer::CreateStrings()
|
||||
/*
|
||||
G4VSplitableHadron * aHadron,
|
||||
|
||||
+2
-2
@@ -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;
|
||||
}
|
||||
// ------------------------------------------------------------
|
||||
|
||||
+154
-37
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user