Import Geant4 9.4.0 source tree
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
#------------------------------------------------------------------------------
|
||||
# CMakeLists.txt
|
||||
# Module : G4had_string
|
||||
# Package: Geant4.src.G4processes.G4hadronic.G4hadronic_models.G4had_string
|
||||
#
|
||||
# Intermediate level CMakeLists.txt - just process subdirectories
|
||||
#
|
||||
# Generated on : 24/9/2010
|
||||
#
|
||||
# $Id: CMakeLists.txt,v 1.1 2010/09/29 19:04:26 bmorgan Exp $
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
add_subdirectory(diffraction)
|
||||
add_subdirectory(hadronization)
|
||||
add_subdirectory(management)
|
||||
add_subdirectory(qgsm)
|
||||
|
||||
@@ -13,6 +13,12 @@ code and to keep track of all tags.
|
||||
---------------------------------------------------------------
|
||||
* Please list in reverse chronological order (last date on top)
|
||||
---------------------------------------------------------------
|
||||
9 Dec. 2009, V. Uzhinsky (hadr-prtn-V09-03-00)
|
||||
Crush found by Alberto with AveragePt2=0 is erased in FTF.
|
||||
--------------------------------------------------------
|
||||
6 December 2009, V. Uzhinsky (hadr-prtn-V09-02-10)
|
||||
Some correstions are made in diffr., hadronization and managment
|
||||
to treat kinky string fragmentation.
|
||||
|
||||
19 November 2009, Gunter Folger (hadr-prtn-V09-02-09)
|
||||
- G4VParticipants.hh: use modified name of method to sort nucleons in G4V3DNucleus
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
#------------------------------------------------------------------------------
|
||||
# CMakeLists.txt
|
||||
# Module : G4had_string_frag
|
||||
# Package: Geant4.src.G4processes.G4hadronic.G4hadronic_models.G4had_string.G4had_string_frag
|
||||
#
|
||||
# CMakeLists.txt for building a single granular library.
|
||||
#
|
||||
# Generated on : 24/9/2010
|
||||
#
|
||||
# $Id: CMakeLists.txt,v 1.1 2010/09/29 19:04:53 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.10 2009/07/17 12:30:45 vuzhinsk Exp $
|
||||
$Id: History,v 1.18 2010/11/03 17:11:31 gunter Exp $
|
||||
-------------------------------------------------------------------
|
||||
|
||||
==========================================================
|
||||
@@ -14,18 +14,52 @@ code and to keep track of all tags.
|
||||
---------------------------------------------------------------
|
||||
* Please list in reverse chronological order (last date on top)
|
||||
---------------------------------------------------------------
|
||||
17-July-2009 V. Uzhinsky (had-hadronization-V09-02-03)
|
||||
Some small optimization are done.
|
||||
---------------------------------------------------------------------
|
||||
|
||||
3 Nov 2010, Gunter Folger (had-hadronization-V09-03-02)
|
||||
- fix minor coverity warnings in G4HadronBuilder
|
||||
|
||||
22-September-2010 V. Uzhinsky (had-hadronization-V09-03-01)
|
||||
--------------------------------------------------------------
|
||||
- Warning messages are erased in G4LundStringFragmentation.cc
|
||||
|
||||
20-September-2010 V. Uzhinsky
|
||||
------------------------------
|
||||
- Phase space restrictions are introduced at small mass string
|
||||
fragmentation.
|
||||
|
||||
5-August-2010 V. Uzhinsky
|
||||
--------------------------
|
||||
- Small re-organization is done in G4ExcitedStringDecay.hh. Inline
|
||||
methods were moved to G4ExcitedStringDecay.cc.
|
||||
|
||||
- An action is introduced in FragmentStrings. It acts when
|
||||
EnergyAndMomentumCorrector can not be done due to large sum masses
|
||||
of produced hadrons. This led to energy-momentum violation. Now
|
||||
string fragmentation is repeted 100 times in a bad case.
|
||||
|
||||
21-June-2010 V. Uzhinsky (had-hadronization-V09-03-00)
|
||||
--------------------------------------------------------------
|
||||
- Lund string fragmentation is improved. The inselfconsistency
|
||||
between LightFragmentationTest and Lund fragmentation is erased.
|
||||
Energy conservation in FTF is recovered.
|
||||
|
||||
6-December-2010 V. Uzhinsky, (had-hadronization-V09-02-04)
|
||||
--------------------------------------------------------------
|
||||
- Lund string fragm. improved, start fragmentation.
|
||||
|
||||
17-July-2009 V. Uzhinsky (had-hadronization-V09-02-03)
|
||||
--------------------------------------------------------------
|
||||
- Some small optimization are done.
|
||||
|
||||
9-July-2009 V. Uzhinsky (had-hadronization-V09-02-02)
|
||||
---------------------------------------------------------------------
|
||||
--------------------------------------------------------------
|
||||
- Bug was fixed in G4VLongitudinalStringDecay.cc at calculation of
|
||||
formation/creation time, c_light was inserted.
|
||||
- String tension parameter was set to the usual value (1 GeV/fm) in
|
||||
G4LundStringFragmentation.cc
|
||||
|
||||
--------------------------------------------------------------
|
||||
22-May-2009 Gunter Folger (had-hadronization-V09-02-01)
|
||||
--------------------------------------------------------------
|
||||
- remove temporary workaround - fix is now in QGS
|
||||
- change pt sampling in G4LundStringFragmentation to avoid near endless
|
||||
loop; this should improve overall performance slightly.
|
||||
@@ -33,34 +67,33 @@ code and to keep track of all tags.
|
||||
implemented; affected .hh and .cc for new optional argument of max Pt
|
||||
to SampleQuarkPt()
|
||||
|
||||
|
||||
18-May-2009 Gunter Folger (had-hadronization-V09-02-00)
|
||||
---------------------------------------------------------------------
|
||||
- reset formatting changes by MK with tags hadr-prtn-hadr-V09-02-xx
|
||||
- temporary workaround for wrong PDG codes created on wrong input from QGS
|
||||
when used for e.g. antiproton.
|
||||
when used for e.g. antiproton.
|
||||
|
||||
2-May 2007 Gunter Folger (had-hadronization-V08-02-03)
|
||||
---------------------------------------------------------------------
|
||||
- G4ExcitedStringDecay.hh: protect againt divide by 0 when KTsum1.e()
|
||||
is 0.
|
||||
- G4ExcitedStringDecay.hh: protect againt divide by 0 when KTsum1.e() is 0.
|
||||
|
||||
24-April 2007 Gunter Folger (had-hadronization-V08-02-02)
|
||||
---------------------------------------------------------------------
|
||||
- Seperate FTF and QGS fragmentation dir methods where V.Uzhinsky
|
||||
modified the algorithm for FTF.
|
||||
|
||||
- Seperate FTF and QGS fragmentation dir methods where V.Uzhinsky
|
||||
modified the algorithm for FTF.
|
||||
|
||||
2-March 2007 G.Folger (had-hadronization-V08-02-01)
|
||||
2-March 2007 Gunter Folger (had-hadronization-V08-02-01)
|
||||
---------------------------------------------------------------------
|
||||
- G4ExcitedStringDecay::EnergyAndMomentumCorrector no longer causes Exception
|
||||
when no converging. Add more info when failing. Return correct status.
|
||||
when no converging. Add more info when failing. Return correct status.
|
||||
|
||||
24-Jan 2007 Gunter Folger (had-hadronization-V08-02-00)
|
||||
--------------------------------------------------------------
|
||||
- G4ExcitedStringDecay::EnergyAndMomentumCorrector :
|
||||
Correct bug which did stop correction even if not yet converged;
|
||||
check on convergence must check that scale-1 is close to 0,
|
||||
and not less than 0
|
||||
|
||||
24-Jan 2007 GF: tag had-hadronization-V08-02-00
|
||||
G4ExcitedStringDecay::EnergyAndMomentumCorrector :
|
||||
Correct bug which did stop correction even if not yet converged;
|
||||
check on convergence must check that scale-1 is close to 0,
|
||||
and not less than 0
|
||||
26-May 2006 GF: Fix ( finally?) the charge check in G4HadronBuilder.cc
|
||||
|
||||
26-May 2006 Gunter Folger
|
||||
--------------------------------------------------------------
|
||||
- Fix ( finally?) the charge check in G4HadronBuilder.cc
|
||||
|
||||
+3
-89
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4ExcitedStringDecay.hh,v 1.10 2009/10/05 12:52:48 vuzhinsk Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4ExcitedStringDecay.hh,v 1.13 2010/08/05 08:44:37 vuzhinsk Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
#ifndef G4ExcitedStringDecay_h
|
||||
#define G4ExcitedStringDecay_h 1
|
||||
@@ -41,7 +41,7 @@ class G4ExcitedStringDecay: public G4VStringFragmentation
|
||||
public:
|
||||
G4ExcitedStringDecay();
|
||||
G4ExcitedStringDecay(G4VLongitudinalStringDecay * aStringDecay);
|
||||
~G4ExcitedStringDecay();
|
||||
virtual ~G4ExcitedStringDecay();
|
||||
|
||||
private:
|
||||
G4ExcitedStringDecay(const G4ExcitedStringDecay &right);
|
||||
@@ -61,92 +61,6 @@ class G4ExcitedStringDecay: public G4VStringFragmentation
|
||||
|
||||
};
|
||||
|
||||
inline
|
||||
G4KineticTrackVector *G4ExcitedStringDecay::
|
||||
FragmentString(const G4ExcitedString &theString)
|
||||
{
|
||||
if ( theStringDecay == NULL )
|
||||
theStringDecay=new G4LundStringFragmentation();
|
||||
|
||||
return theStringDecay->FragmentString(theString);
|
||||
}
|
||||
|
||||
inline
|
||||
G4KineticTrackVector *G4ExcitedStringDecay::
|
||||
FragmentStrings(const G4ExcitedStringVector * theStrings)
|
||||
{
|
||||
G4KineticTrackVector * theResult = new G4KineticTrackVector;
|
||||
|
||||
G4LorentzVector KTsum;
|
||||
G4LorentzVector KTsecondaries;
|
||||
G4bool NeedEnergyCorrector=false;
|
||||
//G4cout<<"Number of strings "<<theStrings->size()<<G4endl; // Vova
|
||||
for ( unsigned int astring=0; astring < theStrings->size(); astring++)
|
||||
{
|
||||
//G4cout<<"String# "<<astring<<" 4mom "<<theStrings->operator[](astring)->Get4Momentum()<<G4endl; // Vova
|
||||
KTsum+= theStrings->operator[](astring)->Get4Momentum();
|
||||
//G4cout<<"KTsum "<<KTsum<<G4endl;
|
||||
if( !(KTsum.e()<1) && !(KTsum.e()>-1) )
|
||||
{
|
||||
throw G4HadronicException(__FILE__, __LINE__,
|
||||
"G4ExcitedStringDecay::FragmentStrings received nan string...");
|
||||
}
|
||||
G4KineticTrackVector * generatedKineticTracks = NULL;
|
||||
|
||||
if ( theStrings->operator[](astring)->IsExcited() )
|
||||
{
|
||||
generatedKineticTracks=FragmentString(*theStrings->operator[](astring));
|
||||
} else {
|
||||
generatedKineticTracks = new G4KineticTrackVector;
|
||||
generatedKineticTracks->push_back(theStrings->operator[](astring)->GetKineticTrack());
|
||||
}
|
||||
|
||||
if (generatedKineticTracks == NULL)
|
||||
{
|
||||
G4cerr << "G4VPartonStringModel:No KineticTracks produced" << G4endl;
|
||||
continue;
|
||||
}
|
||||
|
||||
//G4cout<<" prod had "<<generatedKineticTracks->size()<<G4endl; // Vova
|
||||
G4LorentzVector KTsum1;
|
||||
for ( unsigned int aTrack=0; aTrack<generatedKineticTracks->size();aTrack++)
|
||||
{
|
||||
theResult->push_back(generatedKineticTracks->operator[](aTrack));
|
||||
KTsum1+= (*generatedKineticTracks)[aTrack]->Get4Momentum();
|
||||
}
|
||||
|
||||
KTsecondaries+=KTsum1;
|
||||
|
||||
if ( KTsum1.e() > 0 && std::abs((KTsum1.e()-theStrings->operator[](astring)->Get4Momentum().e()) / KTsum1.e()) > perMillion )
|
||||
{
|
||||
//--debug-- G4cout << "String secondaries(" <<generatedKineticTracks->size()<< ") momentum: "
|
||||
//--debug-- << theStrings->operator[](astring)->Get4Momentum() << " " << KTsum1 << G4endl;
|
||||
NeedEnergyCorrector=true;
|
||||
}
|
||||
// clean up
|
||||
delete generatedKineticTracks;
|
||||
}
|
||||
//--DEBUG G4cout << "Strings/secs total 4 momentum " << KTsum << " " <<KTsecondaries << G4endl;
|
||||
|
||||
G4bool success=true;
|
||||
if ( NeedEnergyCorrector ) success=EnergyAndMomentumCorrector(theResult, KTsum);
|
||||
|
||||
|
||||
#ifdef debug_ExcitedStringDecay
|
||||
G4LorentzVector KTsum1=0;
|
||||
for ( unsigned int aTrack=0; aTrack<theResult->size();aTrack++)
|
||||
{
|
||||
G4cout << " corrected tracks .. " << (*theResult)[aTrack]->GetDefinition()->GetParticleName()
|
||||
<<" " << (*theResult)[aTrack]->Get4Momentum() << G4endl;
|
||||
KTsum1+= (*theResult)[aTrack]->Get4Momentum();
|
||||
}
|
||||
G4cout << "Needcorrector/success " << NeedEnergyCorrector << "/" << success << ", Corrected total 4 momentum " << KTsum1 << G4endl;
|
||||
if ( ! success ) G4cout << "failed to correct E/p" << G4endl;
|
||||
#endif
|
||||
|
||||
return theResult;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
+2
-2
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4FragmentingString.hh,v 1.4 2007/12/20 15:38:06 vuzhinsk Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4FragmentingString.hh,v 1.5 2010/09/20 12:46:23 vuzhinsk Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
|
||||
#ifndef G4FragmentingString_h
|
||||
|
||||
+2
-2
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4HadronBuilder.hh,v 1.5 2009/05/18 09:43:40 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4HadronBuilder.hh,v 1.6 2010/09/20 12:46:23 vuzhinsk Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
// -----------------------------------------------------------------------------
|
||||
// GEANT 4 class header file
|
||||
|
||||
+13
-3
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4LundStringFragmentation.hh,v 1.6 2008/04/25 14:20:14 vuzhinsk Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $ Maxim Komogorov
|
||||
// $Id: G4LundStringFragmentation.hh,v 1.7 2010/09/20 12:46:23 vuzhinsk Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $ Maxim Komogorov
|
||||
//
|
||||
// -----------------------------------------------------------------------------
|
||||
// GEANT 4 class implementation file
|
||||
@@ -77,7 +77,9 @@ private:
|
||||
G4int PartonEncoding,
|
||||
G4ParticleDefinition* pHadron,
|
||||
G4double Px, G4double Py);
|
||||
|
||||
|
||||
G4double lambda(G4double s, G4double m1_Sqr, G4double m2_Sqr);
|
||||
|
||||
private:
|
||||
// ------ For estimation of a minimal string mass ---------------
|
||||
G4double Mass_of_light_quark;
|
||||
@@ -88,6 +90,14 @@ private:
|
||||
G4double MinimalStringMass2;
|
||||
// ------ Minimal invariant mass used at a string fragmentation -
|
||||
G4double WminLUND;
|
||||
|
||||
G4int Meson[3][3][6];
|
||||
G4double MesonWeight[3][3][6];
|
||||
|
||||
G4int Baryon[3][3][3][4];
|
||||
G4double BaryonWeight[3][3][3][4];
|
||||
|
||||
G4double Prob_QQbar[3];
|
||||
};
|
||||
|
||||
//**************************************************************************************************************
|
||||
|
||||
+2
-2
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4QGSMFragmentation.hh,v 1.5 2007/12/20 15:38:07 vuzhinsk Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4QGSMFragmentation.hh,v 1.6 2010/09/20 12:46:23 vuzhinsk Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
// -----------------------------------------------------------------------------
|
||||
// GEANT 4 class implementation file
|
||||
|
||||
+2
-2
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4VKinkyStringDecay.hh,v 1.3 2006/06/29 20:54:53 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4VKinkyStringDecay.hh,v 1.4 2010/09/20 12:46:23 vuzhinsk Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
// Maxim Komogorov
|
||||
//
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
+2
-2
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4VLongitudinalStringDecay.hh,v 1.7 2009/05/22 16:35:47 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4VLongitudinalStringDecay.hh,v 1.8 2010/09/20 12:46:23 vuzhinsk Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
// Maxim Komogorov
|
||||
//
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
#------------------------------------------------------------------------------
|
||||
# sources.cmake
|
||||
# Module : G4had_string_frag
|
||||
# Package: Geant4.src.G4processes.G4hadronic.G4hadronic_models.G4had_string.G4had_string_frag
|
||||
#
|
||||
# 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:05:01 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/cross_sections/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/management/include)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/models/util/include)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/processes/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_frag
|
||||
HEADERS
|
||||
G4ExcitedStringDecay.hh
|
||||
G4FragmentingString.hh
|
||||
G4HadronBuilder.hh
|
||||
G4LundStringFragmentation.hh
|
||||
G4QGSMFragmentation.hh
|
||||
G4VKinkyStringDecay.hh
|
||||
G4VLongitudinalStringDecay.hh
|
||||
SOURCES
|
||||
G4ExcitedStringDecay.cc
|
||||
G4FragmentingString.cc
|
||||
G4HadronBuilder.cc
|
||||
G4LundStringFragmentation.cc
|
||||
G4QGSMFragmentation.cc
|
||||
G4VKinkyStringDecay.cc
|
||||
G4VLongitudinalStringDecay.cc
|
||||
GRANULAR_DEPENDENCIES
|
||||
G4baryons
|
||||
G4bosons
|
||||
G4geometrymng
|
||||
G4globman
|
||||
G4had_mod_man
|
||||
G4had_mod_util
|
||||
G4had_string_man
|
||||
G4hadronic_mgt
|
||||
G4hadronic_proc
|
||||
G4hadronic_util
|
||||
G4hadronic_xsect
|
||||
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
|
||||
|
||||
+108
-10
@@ -60,8 +60,106 @@ int G4ExcitedStringDecay::operator!=(const G4ExcitedStringDecay &) const
|
||||
return 1;
|
||||
}
|
||||
|
||||
G4bool G4ExcitedStringDecay::
|
||||
EnergyAndMomentumCorrector(G4KineticTrackVector* Output, G4LorentzVector& TotalCollisionMom)
|
||||
G4KineticTrackVector *G4ExcitedStringDecay::FragmentString
|
||||
(const G4ExcitedString &theString)
|
||||
{
|
||||
if ( theStringDecay == NULL )
|
||||
|
||||
theStringDecay=new G4LundStringFragmentation();
|
||||
|
||||
return theStringDecay->FragmentString(theString);
|
||||
}
|
||||
|
||||
G4KineticTrackVector *G4ExcitedStringDecay::FragmentStrings
|
||||
(const G4ExcitedStringVector * theStrings)
|
||||
{
|
||||
G4LorentzVector KTsum(0.,0.,0.,0.);
|
||||
for ( unsigned int astring=0; astring < theStrings->size(); astring++)
|
||||
{
|
||||
KTsum+= theStrings->operator[](astring)->Get4Momentum();
|
||||
|
||||
if( !(KTsum.e()<1) && !(KTsum.e()>-1) )
|
||||
{
|
||||
throw G4HadronicException(__FILE__, __LINE__,
|
||||
"G4ExcitedStringDecay::FragmentStrings received nan string...");
|
||||
}
|
||||
}
|
||||
|
||||
G4KineticTrackVector * theResult = new G4KineticTrackVector;
|
||||
G4int attempts(0);
|
||||
G4bool success=false;
|
||||
do {
|
||||
|
||||
std::for_each(theResult->begin() , theResult->end() , DeleteKineticTrack());
|
||||
theResult->clear();
|
||||
|
||||
attempts++;
|
||||
G4LorentzVector KTsecondaries(0.,0.,0.,0.);
|
||||
G4bool NeedEnergyCorrector=false;
|
||||
|
||||
for ( unsigned int astring=0; astring < theStrings->size(); astring++)
|
||||
{
|
||||
//G4cout<<G4endl<<"String No "<<astring+1<<" "<<theStrings->operator[](astring)->Get4Momentum().mag()<<G4endl;
|
||||
|
||||
G4KineticTrackVector * generatedKineticTracks = NULL;
|
||||
|
||||
if ( theStrings->operator[](astring)->IsExcited() )
|
||||
{
|
||||
generatedKineticTracks=FragmentString(*theStrings->operator[](astring));
|
||||
} else {
|
||||
generatedKineticTracks = new G4KineticTrackVector;
|
||||
generatedKineticTracks->push_back(theStrings->operator[](astring)->GetKineticTrack());
|
||||
}
|
||||
|
||||
if (generatedKineticTracks == NULL)
|
||||
{
|
||||
G4cerr << "G4VPartonStringModel:No KineticTracks produced" << G4endl;
|
||||
continue;
|
||||
}
|
||||
|
||||
G4LorentzVector KTsum1(0.,0.,0.,0.);
|
||||
for ( unsigned int aTrack=0; aTrack<generatedKineticTracks->size();aTrack++)
|
||||
{
|
||||
//G4cout<<" Prod part "<<(*generatedKineticTracks)[aTrack]->GetDefinition()->GetParticleName()<<" "<<(*generatedKineticTracks)[aTrack]->Get4Momentum()<<G4endl;
|
||||
theResult->push_back(generatedKineticTracks->operator[](aTrack));
|
||||
KTsum1+= (*generatedKineticTracks)[aTrack]->Get4Momentum();
|
||||
}
|
||||
KTsecondaries+=KTsum1;
|
||||
|
||||
if ( KTsum1.e() > 0 && std::abs((KTsum1.e()-theStrings->operator[](astring)->Get4Momentum().e()) / KTsum1.e()) > perMillion )
|
||||
{
|
||||
//--debug-- G4cout << "String secondaries(" <<generatedKineticTracks->size()<< ") momentum: "
|
||||
//--debug-- << theStrings->operator[](astring)->Get4Momentum() << " " << KTsum1 << G4endl;
|
||||
NeedEnergyCorrector=true;
|
||||
}
|
||||
|
||||
// clean up
|
||||
delete generatedKineticTracks;
|
||||
}
|
||||
//--DEBUG G4cout << "Strings/secs total 4 momentum " << KTsum << " " <<KTsecondaries << G4endl;
|
||||
|
||||
success=true;
|
||||
if ( NeedEnergyCorrector ) success=EnergyAndMomentumCorrector(theResult, KTsum);
|
||||
|
||||
} while(!success && (attempts < 100));
|
||||
|
||||
#ifdef debug_ExcitedStringDecay
|
||||
G4LorentzVector KTsum1=0;
|
||||
for ( unsigned int aTrack=0; aTrack<theResult->size();aTrack++)
|
||||
{
|
||||
G4cout << " corrected tracks .. " << (*theResult)[aTrack]->GetDefinition()->GetParticleName()
|
||||
<<" " << (*theResult)[aTrack]->Get4Momentum() << G4endl;
|
||||
KTsum1+= (*theResult)[aTrack]->Get4Momentum();
|
||||
}
|
||||
G4cout << "Needcorrector/success " << NeedEnergyCorrector << "/" << success << ", Corrected total 4 momentum " << KTsum1 << G4endl;
|
||||
if ( ! success ) G4cout << "failed to correct E/p" << G4endl;
|
||||
#endif
|
||||
|
||||
return theResult;
|
||||
}
|
||||
|
||||
G4bool G4ExcitedStringDecay::EnergyAndMomentumCorrector
|
||||
(G4KineticTrackVector* Output, G4LorentzVector& TotalCollisionMom)
|
||||
{
|
||||
const int nAttemptScale = 500;
|
||||
const double ErrLimit = 1.E-5;
|
||||
@@ -70,11 +168,14 @@ EnergyAndMomentumCorrector(G4KineticTrackVector* Output, G4LorentzVector& TotalC
|
||||
G4LorentzVector SumMom;
|
||||
G4double SumMass = 0;
|
||||
G4double TotalCollisionMass = TotalCollisionMom.m();
|
||||
|
||||
if( !(TotalCollisionMass<1) && !(TotalCollisionMass>-1) )
|
||||
{
|
||||
std::cout << "TotalCollisionMomentum = "<<TotalCollisionMom<<G4endl;
|
||||
throw G4HadronicException(__FILE__, __LINE__, "G4ExcitedStringDecay received nan mass...");
|
||||
}
|
||||
|
||||
//G4cout<<G4endl<<"EnergyAndMomentumCorrector "<<Output->size()<<G4endl;
|
||||
// Calculate sum hadron 4-momenta and summing hadron mass
|
||||
unsigned int cHadron;
|
||||
for(cHadron = 0; cHadron < Output->size(); cHadron++)
|
||||
@@ -90,9 +191,12 @@ EnergyAndMomentumCorrector(G4KineticTrackVector* Output, G4LorentzVector& TotalC
|
||||
throw G4HadronicException(__FILE__, __LINE__, "G4ExcitedStringDecay::EnergyAndMomentumCorrector() received nan mass...");
|
||||
}
|
||||
}
|
||||
|
||||
//G4cout<<"SumMass TotalCollisionMass "<<SumMass<<" "<<TotalCollisionMass<<G4endl;
|
||||
|
||||
// Cannot correct a single particle
|
||||
if (Output->size() < 2) return FALSE;
|
||||
|
||||
|
||||
if (SumMass > TotalCollisionMass) return FALSE;
|
||||
SumMass = SumMom.m2();
|
||||
if (SumMass < 0) return FALSE;
|
||||
@@ -147,12 +251,6 @@ EnergyAndMomentumCorrector(G4KineticTrackVector* Output, G4LorentzVector& TotalC
|
||||
// Compute c.m.s. interaction velocity and KTV back boost
|
||||
Beta = TotalCollisionMom.boostVector();
|
||||
Output->Boost(Beta);
|
||||
/* // Uzhi
|
||||
G4cout<<"Number of produced hadrons // correct E and P "<<Output->size()<<G4endl; // Uzhi
|
||||
for(cHadron = 0; cHadron < Output->size(); cHadron++)
|
||||
{
|
||||
G4cout<<cHadron<<" "<<Output->operator[](cHadron)->Get4Momentum()<<" "<<Output->operator[](cHadron)->Get4Momentum().mag()<<Output->operator[](cHadron)->GetDefinition()->GetParticleName()<<G4endl;
|
||||
}
|
||||
*/ // Uzhi
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
+13
-23
@@ -79,28 +79,18 @@ G4FragmentingString::G4FragmentingString(const G4FragmentingString &old,
|
||||
decaying=None;
|
||||
if ( old.decaying == Left )
|
||||
{
|
||||
//G4cout<<" Left "<<G4endl;
|
||||
//G4cout<<"Pt right "<<Ptright<<G4endl;
|
||||
//G4cout<<"Pt left "<<Ptleft <<G4endl;
|
||||
RightParton= old.RightParton;
|
||||
Ptright = old.Ptright;
|
||||
LeftParton = newdecay;
|
||||
Ptleft = old.Ptleft - momentum->vect();
|
||||
Ptleft.setZ(0.);
|
||||
//G4cout<<"Pt right "<<Ptright<<G4endl;
|
||||
//G4cout<<"Pt left "<<Ptleft <<G4endl;
|
||||
} else if ( old.decaying == Right )
|
||||
{
|
||||
//G4cout<<" Right "<<G4endl;
|
||||
//G4cout<<"Pt right "<<Ptright<<G4endl;
|
||||
//G4cout<<"Pt left "<<Ptleft <<G4endl;
|
||||
RightParton = newdecay;
|
||||
Ptright = old.Ptright - momentum->vect();
|
||||
Ptright.setZ(0.);
|
||||
LeftParton = old.LeftParton;
|
||||
Ptleft = old.Ptleft;
|
||||
//G4cout<<"Pt right "<<Ptright<<G4endl;
|
||||
//G4cout<<"Pt left "<<Ptleft <<G4endl;
|
||||
} else
|
||||
{
|
||||
throw G4HadronicException(__FILE__, __LINE__, "G4FragmentingString::G4FragmentingString: no decay Direction defined");
|
||||
@@ -115,19 +105,19 @@ G4FragmentingString::G4FragmentingString(const G4FragmentingString &old,
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
|
||||
G4FragmentingString::G4FragmentingString(const G4FragmentingString &old, // Uzhi
|
||||
G4ParticleDefinition * newdecay) // Uzhi
|
||||
{ // Uzhi
|
||||
decaying=None; // Uzhi
|
||||
if ( old.decaying == Left ) // Uzhi
|
||||
{ // Uzhi
|
||||
RightParton= old.RightParton; // Uzhi
|
||||
LeftParton = newdecay; // Uzhi
|
||||
} else if ( old.decaying == Right ) // Uzhi
|
||||
{ // Uzhi
|
||||
RightParton = newdecay; // Uzhi
|
||||
LeftParton = old.LeftParton; // Uzhi
|
||||
} else // Uzhi
|
||||
G4FragmentingString::G4FragmentingString(const G4FragmentingString &old,
|
||||
G4ParticleDefinition * newdecay)
|
||||
{
|
||||
decaying=None;
|
||||
if ( old.decaying == Left )
|
||||
{
|
||||
RightParton= old.RightParton;
|
||||
LeftParton = newdecay;
|
||||
} else if ( old.decaying == Right )
|
||||
{
|
||||
RightParton = newdecay;
|
||||
LeftParton = old.LeftParton;
|
||||
} else
|
||||
{
|
||||
throw G4HadronicException(__FILE__, __LINE__, "G4FragmentingString::G4FragmentingString: no decay Direction defined");
|
||||
}
|
||||
|
||||
+6
-10
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4HadronBuilder.cc,v 1.10 2009/05/22 16:34:31 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4HadronBuilder.cc,v 1.12 2010/11/03 17:11:42 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
// -----------------------------------------------------------------------------
|
||||
// GEANT 4 class implementation file
|
||||
@@ -155,10 +155,8 @@ G4ParticleDefinition * G4HadronBuilder::Meson(G4ParticleDefinition * black,
|
||||
if (MesonDef == 0 ) {
|
||||
G4cerr << " G4HadronBuilder - Warning: No particle for PDGcode= "
|
||||
<< PDGEncoding << G4endl;
|
||||
}
|
||||
if ( ( black->GetPDGCharge()
|
||||
+ white->GetPDGCharge()
|
||||
- MesonDef->GetPDGCharge() ) > perCent ) {
|
||||
} else if ( ( black->GetPDGCharge() + white->GetPDGCharge()
|
||||
- MesonDef->GetPDGCharge() ) > perCent ) {
|
||||
G4cerr << " G4HadronBuilder - Warning: Incorrect Charge : "
|
||||
<< " Quark1/2 = "
|
||||
<< black->GetParticleName() << " / "
|
||||
@@ -260,10 +258,8 @@ G4ParticleDefinition * G4HadronBuilder::Barion(G4ParticleDefinition * black,
|
||||
if (BarionDef == 0 ) {
|
||||
G4cerr << " G4HadronBuilder - Warning: No particle for PDGcode= "
|
||||
<< PDGEncoding << G4endl;
|
||||
}
|
||||
if ( ( black->GetPDGCharge()
|
||||
+ white->GetPDGCharge()
|
||||
- BarionDef->GetPDGCharge() ) > perCent ) {
|
||||
} else if ( ( black->GetPDGCharge() + white->GetPDGCharge()
|
||||
- BarionDef->GetPDGCharge() ) > perCent ) {
|
||||
G4cerr << " G4HadronBuilder - Warning: Incorrect Charge : "
|
||||
<< " DiQuark/Quark = "
|
||||
<< black->GetParticleName() << " / "
|
||||
|
||||
+686
-209
File diff suppressed because it is too large
Load Diff
+2
-2
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4QGSMFragmentation.cc,v 1.9 2008/06/23 08:35:55 vuzhinsk Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4QGSMFragmentation.cc,v 1.10 2010/09/20 12:46:23 vuzhinsk Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
// -----------------------------------------------------------------------------
|
||||
// GEANT 4 class implementation file
|
||||
|
||||
+2
-2
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4VKinkyStringDecay.cc,v 1.4 2008/04/25 14:20:14 vuzhinsk Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4VKinkyStringDecay.cc,v 1.5 2010/09/20 12:46:23 vuzhinsk Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
// Maxim Komogorov
|
||||
//
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
+13
-75
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4VLongitudinalStringDecay.cc,v 1.18 2009/08/03 13:21:25 vuzhinsk Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4VLongitudinalStringDecay.cc,v 1.22 2010/09/20 12:46:23 vuzhinsk Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
// -----------------------------------------------------------------------------
|
||||
// GEANT 4 class implementation file
|
||||
@@ -70,7 +70,7 @@ G4VLongitudinalStringDecay::G4VLongitudinalStringDecay()
|
||||
ClusterLoopInterrupt = 500;
|
||||
|
||||
// Changable Parameters below.
|
||||
SigmaQT = 0.5 * GeV;
|
||||
SigmaQT = 0.5 * GeV; // 0.5
|
||||
|
||||
StrangeSuppress = 0.44; // 27 % strange quarks produced, ie. u:d:s=1:1:0.27
|
||||
DiquarkSuppress = 0.07;
|
||||
@@ -178,9 +178,6 @@ G4KineticTrackVector* G4VLongitudinalStringDecay::LightFragmentationTest(const
|
||||
<< "string .. " << string->Get4Momentum() << " "
|
||||
<< string->Get4Momentum().m() << G4endl;
|
||||
#endif
|
||||
G4cout << "VlongSF Warning replacing string by single hadron " <<G4endl;
|
||||
G4cout << hadrons.first->GetParticleName() << " string .. " <<G4endl;
|
||||
G4cout << string->Get4Momentum() << " " << string->Get4Momentum().m() << G4endl;
|
||||
*/
|
||||
G4ThreeVector Mom3 = string->Get4Momentum().vect();
|
||||
G4LorentzVector Mom(Mom3,
|
||||
@@ -201,8 +198,6 @@ G4cout << string->Get4Momentum() << " " << string->Get4Momentum().m() << G4endl;
|
||||
<< string->Get4Momentum().m() << G4endl;
|
||||
#endif
|
||||
|
||||
// Uzhi Formation time in the case???
|
||||
|
||||
G4LorentzVector Mom1, Mom2;
|
||||
Sample4Momentum(&Mom1, hadrons.first->GetPDGMass(),
|
||||
&Mom2,hadrons.second->GetPDGMass(),
|
||||
@@ -254,6 +249,7 @@ G4double G4VLongitudinalStringDecay::FragmentationMass(
|
||||
|
||||
Hadron1 = (minMassHadronizer->*build)(string->GetLeftParton(),
|
||||
string->GetRightParton());
|
||||
//G4cout<<"Hadron1 "<<Hadron1->GetParticleName()<<G4endl;
|
||||
mass= (Hadron1)->GetPDGMass();
|
||||
} else
|
||||
{
|
||||
@@ -327,8 +323,7 @@ G4KineticTrack * G4VLongitudinalStringDecay::Splitup(
|
||||
G4FragmentingString *string,
|
||||
G4FragmentingString *&newString)
|
||||
{
|
||||
//G4cout<<"In G4VLong String Dec######################"<<G4endl;
|
||||
|
||||
//G4cout<<"Start SplitUP"<<G4endl;
|
||||
//... random choice of string end to use for creating the hadron (decay)
|
||||
SideOfDecay = (G4UniformRand() < 0.5)? 1: -1;
|
||||
if (SideOfDecay < 0)
|
||||
@@ -347,13 +342,16 @@ G4KineticTrack * G4VLongitudinalStringDecay::Splitup(
|
||||
} else {
|
||||
HadronDefinition= DiQuarkSplitup(string->GetDecayParton(), newStringEnd);
|
||||
}
|
||||
|
||||
//G4cout<<"New had "<<HadronDefinition->GetParticleName()<<G4endl;
|
||||
// create new String from old, ie. keep Left and Right order, but replace decay
|
||||
|
||||
newString=new G4FragmentingString(*string,newStringEnd); // To store possible
|
||||
// quark containt of new string
|
||||
//G4cout<<"SplitEandP "<<G4endl;
|
||||
G4LorentzVector* HadronMomentum=SplitEandP(HadronDefinition, string, newString);
|
||||
|
||||
delete newString; newString=0; // Uzhi 20.06.08
|
||||
delete newString; newString=0;
|
||||
|
||||
G4KineticTrack * Hadron =0;
|
||||
if ( HadronMomentum != 0 ) {
|
||||
@@ -364,16 +362,9 @@ G4KineticTrack * G4VLongitudinalStringDecay::Splitup(
|
||||
newString=new G4FragmentingString(*string,newStringEnd,
|
||||
HadronMomentum);
|
||||
|
||||
//G4cout<<"Out G4VLong String Dec######################"<<G4endl;
|
||||
//G4cout<<"newString 4Mom"<<newString->Get4Momentum()<<G4endl;
|
||||
//G4cout<<"newString Pl "<<newString->LightConePlus()<<G4endl;
|
||||
//G4cout<<"newString Mi "<<newString->LightConeMinus()<<G4endl;
|
||||
//G4cout<<"newString Pts "<<newString->StablePt()<<G4endl;
|
||||
//G4cout<<"newString Ptd "<<newString->DecayPt()<<G4endl;
|
||||
//G4cout<<"newString M2 "<<newString->Mass2()<<G4endl;
|
||||
//G4cout<<"newString M2 "<<newString->Mass()<<G4endl;
|
||||
delete HadronMomentum;
|
||||
}
|
||||
//G4cout<<"End SplitUP"<<G4endl;
|
||||
return Hadron;
|
||||
}
|
||||
|
||||
@@ -473,16 +464,6 @@ G4VLongitudinalStringDecay::pDefPair G4VLongitudinalStringDecay::CreatePartonPai
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// G4ThreeVector G4VLongitudinalStringDecay::SampleQuarkPt()
|
||||
// {
|
||||
// G4double width_param= 2.0 * GeV*GeV;
|
||||
// G4double R = G4UniformRand();
|
||||
// G4double Pt = std::sqrt(width_param*R/(1-R));
|
||||
// G4double phi = 2.*pi*G4UniformRand();
|
||||
// return G4ThreeVector(Pt * std::cos(phi),Pt * std::sin(phi),0);
|
||||
// }
|
||||
|
||||
G4ThreeVector G4VLongitudinalStringDecay::SampleQuarkPt(G4double ptMax)
|
||||
{
|
||||
G4double Pt;
|
||||
@@ -504,11 +485,8 @@ void G4VLongitudinalStringDecay::CalculateHadronTimePosition(G4double theInitial
|
||||
{
|
||||
|
||||
// `yo-yo` formation time
|
||||
// const G4double kappa = 1.0 * GeV/fermi/4.; // Uzhi String tension 1.06.08
|
||||
G4double kappa = GetStringTensionParameter();
|
||||
//G4cout<<"Kappa "<<kappa<<G4endl; // Uzhi 20.06.08
|
||||
//G4int Uzhi; G4cin>>Uzhi; // Uzhi 20.06.08
|
||||
//G4cout<<"Number of hadrons "<<Hadrons->size()<<G4endl; // Vova
|
||||
// const G4double kappa = 1.0 * GeV/fermi/4.;
|
||||
G4double kappa = GetStringTensionParameter();
|
||||
for(size_t c1 = 0; c1 < Hadrons->size(); c1++)
|
||||
{
|
||||
G4double SumPz = 0;
|
||||
@@ -521,57 +499,17 @@ void G4VLongitudinalStringDecay::CalculateHadronTimePosition(G4double theInitial
|
||||
G4double HadronE = Hadrons->operator[](c1)->Get4Momentum().e();
|
||||
G4double HadronPz = Hadrons->operator[](c1)->Get4Momentum().pz();
|
||||
Hadrons->operator[](c1)->SetFormationTime(
|
||||
(theInitialStringMass - 2.*SumPz + HadronE - HadronPz)/(2.*kappa)/c_light); //Uzhi1.07.09c_light
|
||||
(theInitialStringMass - 2.*SumPz + HadronE - HadronPz)/(2.*kappa)/c_light);
|
||||
|
||||
G4ThreeVector aPosition(0, 0,
|
||||
(theInitialStringMass - 2.*SumE - HadronE + HadronPz)/(2.*kappa));
|
||||
Hadrons->operator[](c1)->SetPosition(aPosition);
|
||||
|
||||
/*
|
||||
G4cout<<"kappa "<<kappa<<G4endl;
|
||||
G4cout<<c1<<" Partic time, position Old "<<
|
||||
(theInitialStringMass - 2.*SumPz + HadronE - HadronPz)/(2.*kappa)<<' '<<
|
||||
(theInitialStringMass - 2.*SumE - HadronE + HadronPz)/(2.*kappa)<<G4endl;
|
||||
|
||||
G4cout<<c1<<" Partic time, position New "<<
|
||||
(theInitialStringMass - 2.*SumPz + HadronE - HadronPz)/(2.*kappa)/c_light<<' '<<
|
||||
(theInitialStringMass - 2.*SumE - HadronE + HadronPz)/(2.*kappa)<<G4endl;
|
||||
|
||||
G4cout<<"fermi "<<fermi<<" 1/fermi "<<1./fermi<<' '<<"1*fermi/c "<<1.*fermi/c_light<<G4endl;
|
||||
G4int Uzhi; G4cin>>Uzhi; // Uzhi 20.06.08
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
void G4VLongitudinalStringDecay::CalculateHadronTimePosition(G4double theInitialStringMass, G4KineticTrackVector* Hadrons)
|
||||
{
|
||||
// 'constituent' formation time
|
||||
const G4double kappa = 1.0 * GeV/fermi;
|
||||
for(G4int c1 = 0; c1 < Hadrons->length(); c1++)
|
||||
{
|
||||
G4double SumPz = 0;
|
||||
G4double SumE = 0;
|
||||
for(G4int c2 = 0; c2 <= c1; c2++)
|
||||
{
|
||||
SumPz += Hadrons->at(c2)->Get4Momentum().pz();
|
||||
SumE += Hadrons->at(c2)->Get4Momentum().e();
|
||||
}
|
||||
Hadrons->at(c1)->SetFormationTime((theInitialStringMass - 2.*SumPz)/(2.*kappa));
|
||||
G4ThreeVector aPosition(0, 0, (theInitialStringMass - 2.*SumE)/(2.*kappa));
|
||||
Hadrons->at(c1)->SetPosition(aPosition);
|
||||
}
|
||||
c1 = Hadrons->length()-1;
|
||||
Hadrons->at(c1)->SetFormationTime(Hadrons->at(c1-1)->GetFormationTime());
|
||||
Hadrons->at(c1)->SetPosition(Hadrons->at(c1-1)->GetPosition());
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
//*****************************************************************************
|
||||
|
||||
void G4VLongitudinalStringDecay::SetSigmaTransverseMomentum(G4double aValue)
|
||||
{
|
||||
if ( PastInitPhase ) {
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
#------------------------------------------------------------------------------
|
||||
# CMakeLists.txt
|
||||
# Module : G4had_string_man
|
||||
# Package: Geant4.src.G4processes.G4hadronic.G4hadronic_models.G4had_string.G4had_string_man
|
||||
#
|
||||
# CMakeLists.txt for building a single granular library.
|
||||
#
|
||||
# Generated on : 24/9/2010
|
||||
#
|
||||
# $Id: CMakeLists.txt,v 1.1 2010/09/29 19:05:09 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.7 2009/07/17 12:41:20 vuzhinsk Exp $
|
||||
$Id: History,v 1.10 2010/11/30 16:11:25 vuzhinsk Exp $
|
||||
-------------------------------------------------------------------
|
||||
|
||||
==========================================================
|
||||
@@ -14,6 +14,17 @@ code and to keep track of all tags.
|
||||
---------------------------------------------------------------
|
||||
* Please list in reverse chronological order (last date on top)
|
||||
---------------------------------------------------------------
|
||||
30 Nov. 2010 V. Uzhinsky (had-partonstring-mgt-V09-03-01)
|
||||
Member G4int Status in G4VSplitableHadron was changed
|
||||
into G4int curStatus
|
||||
|
||||
8-Sept-2010, G.Folger (had-partonstring-mgt-V09-03-00)
|
||||
use integer interface of G4Nucleus for A&Z
|
||||
|
||||
6 Dec. 2009, V. Uzhinsky (had-partonstring-mgt-V09-02-02)
|
||||
Repeatation of string fragmentation if
|
||||
energy corr. can not be done is implemented.
|
||||
|
||||
17-July-2009 V. Uzhinsky (had-partonstring-mgt-V09-02-01)
|
||||
A Status of nuclear nucleon involved in an interaction is introdused.
|
||||
Status: 0 - spectator, 1 - involved nucleon, 2 - absorbed nucleon
|
||||
|
||||
+4
-4
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4VParticipants.hh,v 1.6 2009/11/19 14:23:09 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4VParticipants.hh,v 1.7 2010/09/08 16:58:04 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
|
||||
#ifndef G4VParticipants_h
|
||||
@@ -58,7 +58,7 @@ class G4VParticipants
|
||||
int operator==(const G4VParticipants &right) const;
|
||||
int operator!=(const G4VParticipants &right) const;
|
||||
|
||||
void Init(G4double theZ, G4double theA);
|
||||
void Init(G4int theZ, G4int theA);
|
||||
|
||||
void SetNucleus(G4V3DNucleus * aNucleus);
|
||||
G4V3DNucleus * GetWoundedNucleus() const;
|
||||
@@ -85,7 +85,7 @@ inline void G4VParticipants::SetNucleus(G4V3DNucleus * aNucleus)
|
||||
theNucleus = aNucleus;
|
||||
}
|
||||
|
||||
inline void G4VParticipants::Init(G4double theA, G4double theZ)
|
||||
inline void G4VParticipants::Init(G4int theA, G4int theZ)
|
||||
{
|
||||
if ( theNucleus == NULL ) theNucleus = new G4Fancy3DNucleus();
|
||||
theNucleus->Init(theA, theZ);
|
||||
|
||||
+5
-5
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4VSplitableHadron.hh,v 1.6 2009/07/17 12:36:41 vuzhinsk Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4VSplitableHadron.hh,v 1.7 2010/11/30 16:07:35 vuzhinsk Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
|
||||
#ifndef G4VSplitableHadron_h
|
||||
@@ -108,7 +108,7 @@ class G4VSplitableHadron
|
||||
G4ThreeVector thePosition;
|
||||
G4int theCollisionCount;
|
||||
|
||||
G4int Status; // Uzhi 17.07.09
|
||||
G4int curStatus; // Uzhi 17.07.09
|
||||
G4bool isSplit;
|
||||
|
||||
};
|
||||
@@ -170,12 +170,12 @@ inline const G4ThreeVector & G4VSplitableHadron::GetPosition() const
|
||||
|
||||
inline void G4VSplitableHadron::SetStatus(G4int aStatus) // Uzhi 17.07.09
|
||||
{
|
||||
Status=aStatus;
|
||||
curStatus=aStatus;
|
||||
}
|
||||
|
||||
inline G4int G4VSplitableHadron::GetStatus() // Uzhi 17.07.09
|
||||
{
|
||||
return Status;
|
||||
return curStatus;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,97 @@
|
||||
#------------------------------------------------------------------------------
|
||||
# sources.cmake
|
||||
# Module : G4had_string_man
|
||||
# Package: Geant4.src.G4processes.G4hadronic.G4hadronic_models.G4had_string.G4had_string_man
|
||||
#
|
||||
# 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:05:17 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/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_man
|
||||
HEADERS
|
||||
G4EventGenerator.hh
|
||||
G4InteractionCode.hh
|
||||
G4InteractionContent.hh
|
||||
G4PomeronCrossSection.hh
|
||||
G4StringModel.hh
|
||||
G4VParticipants.hh
|
||||
G4VPartonStringModel.hh
|
||||
G4VSplitableHadron.hh
|
||||
G4VStringFragmentation.hh
|
||||
G4VertexCode.hh
|
||||
SOURCES
|
||||
G4EventGenerator.cc
|
||||
G4InteractionContent.cc
|
||||
G4PomeronCrossSection.cc
|
||||
G4StringModel.cc
|
||||
G4VParticipants.cc
|
||||
G4VPartonStringModel.cc
|
||||
G4VSplitableHadron.cc
|
||||
G4VStringFragmentation.cc
|
||||
GRANULAR_DEPENDENCIES
|
||||
G4baryons
|
||||
G4bosons
|
||||
G4geometrymng
|
||||
G4globman
|
||||
G4had_mod_man
|
||||
G4had_mod_util
|
||||
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
|
||||
|
||||
+29
-12
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4VPartonStringModel.cc,v 1.6 2009/10/05 12:52:48 vuzhinsk Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4VPartonStringModel.cc,v 1.7 2009/12/06 11:29:33 vuzhinsk Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
//// ------------------------------------------------------------
|
||||
// GEANT 4 class implementation file
|
||||
@@ -104,6 +104,7 @@ G4KineticTrackVector * G4VPartonStringModel::Scatter(const G4Nucleus &theNucleus
|
||||
|
||||
G4KineticTrackVector * theResult = 0;
|
||||
G4double stringEnergy(0);
|
||||
G4LorentzVector SumStringMom(0.,0.,0.,0.);
|
||||
|
||||
for ( unsigned int astring=0; astring < strings->size(); astring++)
|
||||
{
|
||||
@@ -111,8 +112,11 @@ G4KineticTrackVector * G4VPartonStringModel::Scatter(const G4Nucleus &theNucleus
|
||||
stringEnergy += (*strings)[astring]->GetLeftParton()->Get4Momentum().t();
|
||||
stringEnergy += (*strings)[astring]->GetRightParton()->Get4Momentum().t();
|
||||
(*strings)[astring]->LorentzRotate(toLab);
|
||||
SumStringMom+=(*strings)[astring]->Get4Momentum();
|
||||
}
|
||||
|
||||
|
||||
G4double InvMass=SumStringMom.mag();
|
||||
|
||||
#ifdef debug_PartonStringModel
|
||||
G4V3DNucleus * fancynucleus=theThis->GetWoundedNucleus();
|
||||
|
||||
@@ -134,16 +138,29 @@ G4KineticTrackVector * G4VPartonStringModel::Scatter(const G4Nucleus &theNucleus
|
||||
<< Ptmp.e() << " "
|
||||
<< stringEnergy - 939.*hits - Ptmp.e()<< G4endl;
|
||||
#endif
|
||||
|
||||
theResult = stringFragmentationModel->FragmentStrings(strings);
|
||||
/*
|
||||
G4cout<<"Size "<<theResult->size()<<G4endl;
|
||||
for ( unsigned int i=0; i < theResult->size(); i++)
|
||||
{
|
||||
G4double SumMass(0.);
|
||||
attempts = 0;
|
||||
maxAttempts=100;
|
||||
do
|
||||
{
|
||||
attempts++;
|
||||
if(theResult != 0)
|
||||
{
|
||||
std::for_each(theResult->begin(), theResult->end(), DeleteKineticTrack());
|
||||
theResult->clear();
|
||||
}
|
||||
|
||||
theResult = stringFragmentationModel->FragmentStrings(strings);
|
||||
|
||||
if(attempts > maxAttempts ) break;
|
||||
|
||||
SumMass=0.;
|
||||
for ( unsigned int i=0; i < theResult->size(); i++)
|
||||
{
|
||||
SumMass+=(*theResult)[i]->GetDefinition()->GetPDGMass();
|
||||
}
|
||||
} while(SumMass > InvMass);
|
||||
|
||||
G4cout<<(*theResult)[i]->Get4Momentum()<<" "<<(*theResult)[i]->Get4Momentum().mag()<<G4endl;;
|
||||
}
|
||||
*/
|
||||
std::for_each(strings->begin(), strings->end(), DeleteString() );
|
||||
delete strings;
|
||||
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4VSplitableHadron.cc,v 1.7 2009/07/17 12:36:41 vuzhinsk Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4VSplitableHadron.cc,v 1.8 2010/11/30 16:07:35 vuzhinsk Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
|
||||
// ------------------------------------------------------------
|
||||
@@ -42,13 +42,13 @@
|
||||
|
||||
G4VSplitableHadron::G4VSplitableHadron()
|
||||
: theDefinition(NULL), TimeOfCreation(0.), theCollisionCount(0), // Uzhi 8.05.08
|
||||
Status(0), isSplit(false) // Uzhi 17.07.09
|
||||
curStatus(0), isSplit(false) // Uzhi 17.07.09
|
||||
{
|
||||
}
|
||||
|
||||
G4VSplitableHadron::G4VSplitableHadron(const G4ReactionProduct & aPrimary)
|
||||
: TimeOfCreation(0.), theCollisionCount(0), // Uzhi 8.05.08
|
||||
Status(0), isSplit(false) // Uzhi 17.07.09
|
||||
curStatus(0), isSplit(false) // Uzhi 17.07.09
|
||||
{
|
||||
theDefinition=aPrimary.GetDefinition();
|
||||
the4Momentum.setVect(aPrimary.GetMomentum());
|
||||
@@ -63,7 +63,7 @@ G4VSplitableHadron::G4VSplitableHadron(const G4Nucleon & aNucleon)
|
||||
theDefinition =aNucleon.GetParticleType();
|
||||
the4Momentum =aNucleon.GetMomentum();
|
||||
thePosition =aNucleon.GetPosition();
|
||||
Status = 0; // Uzhi 17.07.09
|
||||
curStatus = 0; // Uzhi 17.07.09
|
||||
}
|
||||
|
||||
G4VSplitableHadron::G4VSplitableHadron(const G4VKineticNucleon * aNucleon)
|
||||
@@ -74,7 +74,7 @@ G4VSplitableHadron::G4VSplitableHadron(const G4VKineticNucleon * aNucleon)
|
||||
theDefinition =aNucleon->GetDefinition();
|
||||
the4Momentum =aNucleon->Get4Momentum();
|
||||
thePosition =aNucleon->GetPosition();
|
||||
Status = 0; // Uzhi 17.07.09
|
||||
curStatus = 0; // Uzhi 17.07.09
|
||||
}
|
||||
|
||||
G4VSplitableHadron::G4VSplitableHadron(const G4VSplitableHadron &right)
|
||||
@@ -85,7 +85,7 @@ G4VSplitableHadron::G4VSplitableHadron(const G4VSplitableHadron &right)
|
||||
theDefinition = right.GetDefinition();
|
||||
the4Momentum = right.Get4Momentum();
|
||||
thePosition = right.GetPosition();
|
||||
Status = 0; // Uzhi 17.07.09
|
||||
curStatus = 0; // Uzhi 17.07.09
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
#------------------------------------------------------------------------------
|
||||
# CMakeLists.txt
|
||||
# Module : G4hadronic_qgstring
|
||||
# Package: Geant4.src.G4processes.G4hadronic.G4hadronic_models.G4had_string.G4hadronic_qgstring
|
||||
#
|
||||
# CMakeLists.txt for building a single granular library.
|
||||
#
|
||||
# Generated on : 24/9/2010
|
||||
#
|
||||
# $Id: CMakeLists.txt,v 1.1 2010/09/29 19:05:25 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.8 2009/05/19 12:48:42 gunter Exp $
|
||||
$Id: History,v 1.10 2010/09/08 15:51:28 gunter Exp $
|
||||
-------------------------------------------------------------------
|
||||
|
||||
==========================================================
|
||||
@@ -15,6 +15,14 @@ code and to keep track of all tags.
|
||||
* Please list in reverse chronological order (last date on top)
|
||||
---------------------------------------------------------------
|
||||
|
||||
|
||||
8 Sep 2010, G.Folger (hadr-qgsm-V09-03-01)
|
||||
-----------------------------------------------------
|
||||
- G4QGSModel.icc: use integer (A,Z) interface of nucleus
|
||||
|
||||
12-Mar-2010, G.Folger (hadr-qgsm-V09-03-00)
|
||||
- remove G4PartonStringAnnihilator.{hh,cc} not used anywhere
|
||||
|
||||
19 May 2009, G.Folger (hadr-qgsm-V09-02-02)
|
||||
-----------------------------------------------------
|
||||
- fix in G4SPBaryon: for antibaryon, a diquark & quark was given instead of
|
||||
|
||||
-71
@@ -1,71 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * License and Disclaimer *
|
||||
// * *
|
||||
// * The Geant4 software is copyright of the Copyright Holders of *
|
||||
// * the Geant4 Collaboration. It is provided under the terms and *
|
||||
// * conditions of the Geant4 Software License, included in the file *
|
||||
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
||||
// * include a list of copyright holders. *
|
||||
// * *
|
||||
// * Neither the authors of this software system, nor their employing *
|
||||
// * institutes,nor the agencies providing financial support for this *
|
||||
// * work make any representation or warranty, express or implied, *
|
||||
// * regarding this software system or assume any liability for its *
|
||||
// * use. Please see the license in the file LICENSE and URL above *
|
||||
// * for the full disclaimer and the limitation of liability. *
|
||||
// * *
|
||||
// * This code implementation is the result of the scientific and *
|
||||
// * technical work of the GEANT4 collaboration. *
|
||||
// * By using, copying, modifying or distributing the software (or *
|
||||
// * any work based on the software) you agree to acknowledge its *
|
||||
// * use in resulting scientific publications, and indicate your *
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4PartonStringAnnihilator.hh,v 1.2 2006/06/29 20:56:11 gunter Exp $
|
||||
// -----------------------------------------------------------------------------
|
||||
// GEANT 4 class implementation file
|
||||
//
|
||||
// History: first implementation, Maxim Komogorov, 9-Oct-1998
|
||||
// -----------------------------------------------------------------------------
|
||||
#ifndef G4PartonStringAnnihilator_h
|
||||
#define G4PartonStringAnnihilator_h 1
|
||||
|
||||
#include "G4KineticTrack.hh"
|
||||
#include "G4ExcitedString.hh"
|
||||
#include "G4MesonSplitter.hh"
|
||||
#include "G4BaryonSplitter.hh"
|
||||
|
||||
|
||||
class G4PartonStringAnnihilator
|
||||
{
|
||||
public:
|
||||
G4PartonStringAnnihilator();
|
||||
|
||||
public:
|
||||
|
||||
G4double GetCrossSection(G4KineticTrack& aTarget, G4KineticTrack& aProjectile);
|
||||
G4ExcitedString* GetString(G4KineticTrack& Target, G4KineticTrack& Projectile);
|
||||
|
||||
G4bool SplitUpBarion(G4int Encoding, G4int* q_or_qqbar, G4int* qbar_or_qq); //!
|
||||
|
||||
G4bool isMeson(G4int Encoding);
|
||||
G4bool isBarion(G4int Encoding);
|
||||
G4bool isAntiParticle(G4int Encoding);
|
||||
|
||||
private:
|
||||
G4bool GetStringEnds(G4int Projectile, G4int Target, G4int* Left, G4int* Right);
|
||||
G4bool FindDiquark(G4int Encoding, G4int Quark, G4int* Diquark);
|
||||
G4bool FindQuark(G4int Encoding, G4int Diquark, G4int* Quark);
|
||||
|
||||
private:
|
||||
|
||||
G4double widthOfPtSquare;
|
||||
G4MesonSplitter theMesonSplitter;
|
||||
G4BaryonSplitter theBaryonSplitter;
|
||||
};
|
||||
|
||||
// *************************************************************************************************
|
||||
#endif
|
||||
@@ -45,7 +45,7 @@ template<class ParticipantType>
|
||||
void G4QGSModel<ParticipantType>::Init(const G4Nucleus & aNucleus, const G4DynamicParticle & aProjectile)
|
||||
{
|
||||
// clean-up and consistency with design, HPW Feb 1999
|
||||
theParticipants.Init(aNucleus.GetN(),aNucleus.GetZ());
|
||||
theParticipants.Init(aNucleus.GetA_asInt(),aNucleus.GetZ_asInt());
|
||||
theCurrentVelocity.setX(0);
|
||||
theCurrentVelocity.setY(0);
|
||||
// HPW Feb 1999
|
||||
|
||||
@@ -0,0 +1,120 @@
|
||||
#------------------------------------------------------------------------------
|
||||
# sources.cmake
|
||||
# Module : G4hadronic_qgstring
|
||||
# Package: Geant4.src.G4processes.G4hadronic.G4hadronic_models.G4had_string.G4hadronic_qgstring
|
||||
#
|
||||
# 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:05:33 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/cross_sections/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/management/include)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/models/util/include)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/processes/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 G4hadronic_qgstring
|
||||
HEADERS
|
||||
G4ASCCrossSection.hh
|
||||
G4AnnihilationCrossSection.hh
|
||||
G4BaryonSplitter.hh
|
||||
G4DiffractiveStringBuilder.hh
|
||||
G4GammaAnnCrossSection.hh
|
||||
G4GammaParticipants.hh
|
||||
G4MesonSplitter.hh
|
||||
G4PartonPair.hh
|
||||
G4QGSDiffractiveExcitation.hh
|
||||
G4QGSMParameters.hh
|
||||
G4QGSMSplitableHadron.hh
|
||||
G4QGSModel.hh
|
||||
G4QGSModel.icc
|
||||
G4QGSParticipants.hh
|
||||
G4SPBaryon.hh
|
||||
G4SPBaryonTable.hh
|
||||
G4SPPartonInfo.hh
|
||||
G4SingleDiffractiveExcitation.hh
|
||||
G4SoftStringBuilder.hh
|
||||
G4VAnnihilationCrossSection.hh
|
||||
SOURCES
|
||||
G4ASCCrossSection.cc
|
||||
G4AnnihilationCrossSection.cc
|
||||
G4BaryonSplitter.cc
|
||||
G4DiffractiveStringBuilder.cc
|
||||
G4GammaAnnCrossSection.cc
|
||||
G4GammaParticipants.cc
|
||||
G4MesonSplitter.cc
|
||||
G4PartonPair.cc
|
||||
G4QGSDiffractiveExcitation.cc
|
||||
G4QGSMParameters.cc
|
||||
G4QGSMSplitableHadron.cc
|
||||
G4QGSParticipants.cc
|
||||
G4SPBaryon.cc
|
||||
G4SingleDiffractiveExcitation.cc
|
||||
G4SoftStringBuilder.cc
|
||||
GRANULAR_DEPENDENCIES
|
||||
G4baryons
|
||||
G4bosons
|
||||
G4geometrymng
|
||||
G4globman
|
||||
G4had_mod_man
|
||||
G4had_mod_util
|
||||
G4had_string_man
|
||||
G4hadronic_mgt
|
||||
G4hadronic_proc
|
||||
G4hadronic_util
|
||||
G4hadronic_xsect
|
||||
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
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * License and Disclaimer *
|
||||
// * *
|
||||
// * The Geant4 software is copyright of the Copyright Holders of *
|
||||
// * the Geant4 Collaboration. It is provided under the terms and *
|
||||
// * conditions of the Geant4 Software License, included in the file *
|
||||
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
||||
// * include a list of copyright holders. *
|
||||
// * *
|
||||
// * Neither the authors of this software system, nor their employing *
|
||||
// * institutes,nor the agencies providing financial support for this *
|
||||
// * work make any representation or warranty, express or implied, *
|
||||
// * regarding this software system or assume any liability for its *
|
||||
// * use. Please see the license in the file LICENSE and URL above *
|
||||
// * for the full disclaimer and the limitation of liability. *
|
||||
// * *
|
||||
// * This code implementation is the result of the scientific and *
|
||||
// * technical work of the GEANT4 collaboration. *
|
||||
// * By using, copying, modifying or distributing the software (or *
|
||||
// * any work based on the software) you agree to acknowledge its *
|
||||
// * use in resulting scientific publications, and indicate your *
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
Reference in New Issue
Block a user