Import Geant4 10.4.0 source tree

This commit is contained in:
Gabriele Cosmo
2017-12-08 12:52:30 +01:00
parent 98e455a940
commit fc6af9e721
2166 changed files with 276760 additions and 100873 deletions
@@ -1,4 +1,4 @@
$Id: History 102029 2016-12-16 14:53:08Z gcosmo $
$Id: History 107525 2017-11-21 07:16:52Z gcosmo $
-------------------------------------------------------------------
==========================================================
@@ -15,6 +15,47 @@ code and to keep track of all tags.
* Please list in reverse chronological order (last date on top)
---------------------------------------------------------------
20-Nov-2017 A. Ribon (hadr-string-diff-V10-03-10)
- G4FTFAnnihilation : improved anisotropy of secondary pions in annihilation.
08-Nov-2017 A. Ribon (hadr-string-diff-V10-03-09)
- Minor clean-up and indentation: no changes in the random sequence.
1-Nov-2017 J. Yarba (hadr-string-diff-V10-03-08)
- Backported FTF/diffraction configuration interface
- for now, only baryon projectile
- Affected classes: G4FTFParameters, G4FTFModel
27-Oct-2017 A. Ribon (hadr-string-diff-V10-03-07)
- G4FTFAnnihilation : fixed unphysical neutrons at rest seen in annihilation.
- G4DiffractiveExcitation : added protection and improved kinematics.
26-Oct-2017 A. Ribon (hadr-string-diff-V10-03-06)
- Brought back the stable, production FTF (as in 10.3).
23-Oct-2017 V. Uzhinsky (hadr-string-diff-V10-03-05)
- Bug is erased for nucleus-nucleus interactions in G4FTFParticipants.
23-Oct-2017 V. Uzhinsky (hadr-string-diff-V10-03-04)
- Projectile diffraction is arrowed in Pi + A interactions.
- Isotrophy of annihilation events is introduced.
4-Aug-2017 J. Yarba (hadr-string-diff-V10-03-03)
- Introduce additional separate parameters for projectile and target destruction
- Refine naming of variables/classes
1-Aug-2017 J. Yarba (hadr-string-diff-V10-03-02)
- Initial set of FTF configurable parameters is implemented (only baryon projectile for now)
- Results of several tests (process and/or physics list level) before and after code updates
appear to be identical
21-Jul-2017 V. Uzhinsky (hadr-string-diff-V10-03-01)
- After implementation of the rotating strings in the LUND string fragmentation
process probability parameterizations were improved for Pi - Nucleon interactions.
Good results are obtained for HARP Collaboration data (p/Pi+/Pi- + A
at 3, 5, 8, 12 GeV/c) and for Pi N inclusive reactions.
14-Dec-2016 A. Ribon (hadr-string-diff-V10-03-00)
- After the release G4 10.3, with "stable" version, this tag brings back
the "development" version, similar (although not identical because
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4FTFParameters.hh 100828 2016-11-02 15:25:59Z gcosmo $
// $Id: G4FTFParameters.hh 107317 2017-11-08 16:25:57Z gcosmo $
// GEANT4 tag $Name: $
//
#ifndef G4FTFParameters_h
@@ -38,12 +38,210 @@
#include "G4Exp.hh"
// NOTE: the settings are different for:
// * baryons projectile
// * anti-baryons projectile
// * pions (chg or pi0) projectile
// * kaons projectile (pdg = +/-321, 311, 130, or 310)
// * "undefined" projectile - nucleon assumed
class G4FTFParamCollection {
public:
//dtor
virtual ~G4FTFParamCollection() {}
// parameters of excitation
//
// Proc=0 --> Qexchg w/o excitation
//
double GetProc0A1() const { return fProc0A1; }
double GetProc0B1() const { return fProc0B1; }
double GetProc0A2() const { return fProc0A2; }
double GetProc0B2() const { return fProc0B2; }
double GetProc0A3() const { return fProc0A3; }
double GetProc0Atop() const { return fProc0Atop; }
double GetProc0Ymin() const { return fProc0Ymin; }
//
// Proc=1 --> Qexchg w/excitation
//
// Proc=2 & Proc=3 for the case ( AbsProjectileBaryonNumber > 1 || NumberOfTargetNucleons > 1 )
// (diffraction dissociation)
//
bool IsProjDiffDissociation() const { return fProjDiffDissociation; }
bool IsTgtDiffDissociation() const { return fTgtDiffDissociation; }
//
double GetProc1A1() const { return fProc1A1; }
double GetProc1B1() const { return fProc1B1; }
double GetProc1A2() const { return fProc1A2; }
double GetProc1B2() const { return fProc1B2; }
double GetProc1A3() const { return fProc1A3; }
double GetProc1Atop() const { return fProc1Atop; }
double GetProc1Ymin() const { return fProc0Ymin; }
//
// Proc=4 --> Qexchg "w/additional multiplier" in excitation
//
double GetProc4A1() const { return fProc4A1; }
double GetProc4B1() const { return fProc4B1; }
double GetProc4A2() const { return fProc4A2; }
double GetProc4B2() const { return fProc4B2; }
double GetProc4A3() const { return fProc4A3; }
double GetProc4Atop() const { return fProc4Atop; }
double GetProc4Ymin() const { return fProc4Ymin; }
//
//
double GetDeltaProbAtQuarkExchange() const { return fDeltaProbAtQuarkExchange; }
double GetProbOfSameQuarkExchange() const { return fProbOfSameQuarkExchange; }
double GetProjMinDiffMass() const { return fProjMinDiffMass; }
double GetProjMinNonDiffMass() const { return fProjMinNonDiffMass; }
double GetTgtMinDiffMass() const { return fTgtMinDiffMass; }
double GetTgtMinNonDiffMass() const { return fTgtMinNonDiffMass; }
double GetAveragePt2() const { return fAveragePt2; }
double GetProbLogDistrPrD() const { return fProbLogDistrPrD; }
double GetProbLogDistr() const { return fProbLogDistr; }
// NOTE (JVY): There is also the Pt2Kind parameter but for now it's set to 0., so we'll leave it aside
// --> FIXME !!! --> void Get/SetBaryonMaxNumberOfCollisions( const double, const double ); // 1st is Plab, 2nd - D=2.
// NOTE (JVY): These parameters are COMMON among various projectiles !!!
//
double GetNuclearProjDestructP1() const { return fNuclearProjDestructP1; }
bool IsNuclearProjDestructP1_NBRNDEP() const { return fNuclearProjDestructP1_NBRNDEP; }
double GetNuclearTgtDestructP1() const { return fNuclearTgtDestructP1; }
bool IsNuclearTgtDestructP1_ADEP() const { return fNuclearTgtDestructP1_ADEP; }
double GetNuclearProjDestructP2() const { return fNuclearProjDestructP2; }
double GetNuclearProjDestructP3() const { return fNuclearProjDestructP3; }
double GetNuclearTgtDestructP2() const { return fNuclearTgtDestructP2; }
double GetNuclearTgtDestructP3() const { return fNuclearTgtDestructP3; }
double GetPt2NuclearDestructP1() const { return fPt2NuclearDestructP1; }
double GetPt2NuclearDestructP2() const { return fPt2NuclearDestructP2; }
double GetPt2NuclearDestructP3() const { return fPt2NuclearDestructP3; }
double GetPt2NuclearDestructP4() const { return fPt2NuclearDestructP4; }
//
// separately for baryons, mesons, etc.
//
double GetR2ofNuclearDestruct() const { return fR2ofNuclearDestruct; }
double GetExciEnergyPerWoundedNucleon() const { return fExciEnergyPerWoundedNucleon; }
double GetDofNuclearDestruct() const { return fDofNuclearDestruct; }
double GetMaxPt2ofNuclearDestruct() const { return fMaxPt2ofNuclearDestruct; }
protected:
// ctor
G4FTFParamCollection();
// parameters of excitation
//
//
// these are for Inelastic interactions, i.e. Xinelastic=(Xtotal-Xelastix)>0.
// for elastic, all the A's & B's, Atop & Ymin are zeros
// general formula: Pp = A1*exp(B1*Y) + A2*exp(B2*Y) + A3
// but if Y<Ymin, then Pp=max(0.,Atop)
// for details, see also G4FTFParameters::GetProcProb( ProcN, y )
//
// Proc=0 --> Qexchg w/o excitation
double fProc0A1; // D=13.71
double fProc0B1; // D=1.75
double fProc0A2; // D=-30.69 (or -214.5 as in Doc ?)
double fProc0B2; // D=3. ( or 4. as in Doc ?)
double fProc0A3; // D=0.
double fProc0Atop; // D=1. ( or 0.5 as in Doc ?)
double fProc0Ymin; // D=0.93 (or 1.1 as in Doc ?)
// Proc=1 --> Qexchg w/excitation
double fProc1A1; // D=25.
double fProc1B1; // D=1.
double fProc1A2; // D=-50.34
double fProc1B2; // D=1.5
double fProc1A3; // D=0.
double fProc1Atop; // D=0.
double fProc1Ymin; // D=1.4
//
// NOTE: Proc #2 & 3 are projectile & target diffraction
// they have more complex definition of A1 & A2
// (see around line 540 or so)
// SetParams( 2, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93);// Projectile diffraction
// SetParams( 3, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93);// Target diffraction
//
// Also, for ( AbsProjectileBaryonNumber > 1 || NumberOfTargetNucleons > 1 )
// projectile and/or target diffraction (dissociation) may be switched ON/OFF
bool fProjDiffDissociation;
bool fTgtDiffDissociation;
//
// Proc=4 --> Qexchg w/additional multiplier in excitation
double fProc4A1; // D=0.6 (or 1. as in Doc ?)
double fProc4B1; // D=0.
double fProc4A2; // D=-1.2 (or -2.01 as in Doc ?)
double fProc4B2; // D=0.5
double fProc4A3; // D=0.
double fProc4Atop; // D=0.
double fProc4Ymin; // D=1.4
//
// parameters of participating baryon excitation
//
double fDeltaProbAtQuarkExchange; // D=0.
double fProbOfSameQuarkExchange; // D=0. if A<=26, otherwise D=1.
double fProjMinDiffMass; // projectile, D=1.16GeV
double fProjMinNonDiffMass; // projectile, D=1.16GeV
double fTgtMinDiffMass; // target, D=1.16GeV
double fTgtMinNonDiffMass; // target, D=1.16GeV
double fAveragePt2; // D=0.3GeV**2 ( or 0.15 as in the Doc ???)
double fProbLogDistrPrD; // D=0.6 (or 0.3 ???)
double fProbLogDistr; // D=0.6 (or 0.3 ???)
// parameters of nuclear distruction
//
// NOTE (JVY): there're 3 cases here:
// * baryon projectile
// * anti-baryon projectile
// * meson projectile
//
// double fBaryonMaxNumberOfCollisions; // D=2.
// void SetBaryonProbOfInteraction( const double ); // ??? this is prob. of inelastic interaction
// that is set internally based on certain conditions...
// general (i.e. for used for baryons,anti-baryons, and mesons)
// NOTE: these parameters have stayed THE SAME for quite a while
double fNuclearProjDestructP1; // D=0.00481 in 10.3.ref04 !!!
// BUT !!! In 10.3.ref04 as well as in 10.2-seriesit's multiplied of AbsProjectileBaryonNumber
// which somehow is 0 for the proton projectile (see in 10.3.ref04 around lines 130-140 In G4FTFParameters.cc).
// For the target destr. it's multipled by the number of target nucleons (12 for Carbon).
// In 10.3.p01 it's set to 1. FLAT OUT for both projectile & target, no multiplications, etc.
// Now, make default at 1.
bool fNuclearProjDestructP1_NBRNDEP;
double fNuclearTgtDestructP1; // Make D=1. as in 10.3.p01
bool fNuclearTgtDestructP1_ADEP;
double fNuclearProjDestructP2; // D=4.0
double fNuclearProjDestructP3; // D=2.1
double fNuclearTgtDestructP2; // D=4.0
double fNuclearTgtDestructP3; // D=2.1
//
double fPt2NuclearDestructP1; // D=0.035
double fPt2NuclearDestructP2; // D=0.04
double fPt2NuclearDestructP3; // D=4.0
double fPt2NuclearDestructP4; // D=2.5
// baryons
double fR2ofNuclearDestruct; // D=1.5*fermi*fermi
double fExciEnergyPerWoundedNucleon; // D=40MeV
double fDofNuclearDestruct; // D=0.3
// NOTE: this parameter has changed from 1. to 9. between 10.2 and 10.4.ref04 !!!
double fMaxPt2ofNuclearDestruct; // D=9GeV**2
private:
void Reset();
};
class G4FTFParamCollBaryonProj : public G4FTFParamCollection {
public:
// ctor
G4FTFParamCollBaryonProj();
};
class G4FTFParameters {
public:
G4FTFParameters( const G4ParticleDefinition* , G4int theA, G4int theZ, G4double s );
// G4FTFParameters( const G4ParticleDefinition* , G4int theA, G4int theZ, G4double s );
G4FTFParameters();
~G4FTFParameters();
void InitForInteraction( const G4ParticleDefinition* , G4int theA, G4int theZ, G4double s );
// Set geometrical parameteres
void SethNcmsEnergy( const G4double s );
void SetTotalCrossSection( const G4double Xtotal );
@@ -148,8 +346,11 @@ class G4FTFParameters {
G4double GetPt2ofNuclearDestruction();
G4double GetMaxPt2ofNuclearDestruction();
//private:
G4FTFParameters();
// JVY, July 31, 2017: Is there any reason for NOT making
// all the members data private ???
//
//private:
// ---> G4FTFParameters();
// Initial energy of hN interactions
G4double FTFhNcmsEnergy; // Initial hN CMS energy
@@ -202,6 +403,14 @@ class G4FTFParameters {
G4double Pt2ofNuclearDestruction; // Pt2
G4double MaxPt2ofNuclearDestruction; // Max Pt2
private:
void Reset();
// JVY, Oct. 31, 2017: encapsulates (current set of) parameters for the baryon projectile
//
G4FTFParamCollBaryonProj fParCollBaryonProj;
// G4-MT changes
private:
static G4ThreadLocal bool chipsComponentXSisInitialized;
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4DiffractiveSplitableHadron.cc 100828 2016-11-02 15:25:59Z gcosmo $
// $Id: G4DiffractiveSplitableHadron.cc 107317 2017-11-08 16:25:57Z gcosmo $
// GEANT4 tag $Name: $
//
@@ -197,7 +197,6 @@ void G4DiffractiveSplitableHadron::ChooseStringEnds( G4int PDGcode, G4int* aEnd,
G4double SuppresUUDDSS=1.0/2.0;
if((j1000 == j100) && (j1000 == j10)) SuppresUUDDSS=1.;
//
const G4int maxNumberOfLoops = 1000;
G4int loopCounter = 0;
do
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4FTFAnnihilation.cc 102029 2016-12-16 14:53:08Z gcosmo $
// $Id: G4FTFAnnihilation.cc 107525 2017-11-21 07:16:52Z gcosmo $
//
// ------------------------------------------------------------
@@ -66,7 +66,8 @@
//#include "G4ios.hh"
//#include "UZHI_diffraction.hh"
#include "G4ParticleTable.hh" // Uzhi March 2016
#include "G4ParticleTable.hh"
//============================================================================
//#define debugFTFannih
@@ -89,7 +90,7 @@ G4bool G4FTFAnnihilation::Annihilate( G4VSplitableHadron* projectile,
G4VSplitableHadron*& AdditionalString,
G4FTFParameters* theParameters ) const {
//theParameters->SetProbabilityOfAnnihilation( 0.0 ); // Uzhi March 2016 ??? for other Anti_bar annih.
//theParameters->SetProbabilityOfAnnihilation( 0.0 ); // Uzhi March 2016 ? for other Anti_bar annih.
#ifdef debugFTFannih
G4cout << "---------------------------- Annihilation----------------" << G4endl;
@@ -99,7 +100,7 @@ G4bool G4FTFAnnihilation::Annihilate( G4VSplitableHadron* projectile,
G4LorentzVector Pprojectile = projectile->Get4Momentum();
G4int ProjectilePDGcode = projectile->GetDefinition()->GetPDGEncoding();
if ( ProjectilePDGcode > 0 ) {
target->SetStatus( 3 ); // 2->3 Uzhi Oct 2014
target->SetStatus( 3 ); // 2->3
return false;
}
//G4double M0projectile = Pprojectile.mag();
@@ -142,6 +143,17 @@ G4bool G4FTFAnnihilation::Annihilate( G4VSplitableHadron* projectile,
G4LorentzRotation toLab( toCms.inverse() );
G4double SqrtS = std::sqrt( S );
//AR-Nov2017 String rotation: Begin
G4bool RotateStrings = false;
G4LorentzRotation RandomRotation;
if ( G4UniformRand() <= G4Pow::GetInstance()->powA( 1880.0/SqrtS, 4.0 ) ) {
RotateStrings = true;
RandomRotation.rotateZ( 2.*pi*G4UniformRand() );
RandomRotation.rotateY( std::acos( 2.*G4UniformRand()-1. ) );
}
//AR-Nov2017 String rotation: End
G4double maxPtSquare;
G4double X_a( 0.0 ), X_b( 0.0 ), X_c( 0.0 ), X_d( 0.0 );
@@ -238,11 +250,12 @@ G4bool G4FTFAnnihilation::Annihilate( G4VSplitableHadron* projectile,
#endif
G4double Xannihilation = X_a + X_b + X_c + X_d;
//X_a=0.; // Uzhi
//X_b=0.;
//X_c=0.;
//X_d=0.;
//Xannihilation = X_a + X_b + X_c + X_d;
//X_a=0.0;
//X_b=0.0;
//X_c=0.0;
//X_d=0.0;
//Xannihilation = X_a + X_b + X_c + X_d;
// Projectile unpacking
G4int AQ[3];
@@ -287,40 +300,40 @@ G4bool G4FTFAnnihilation::Annihilate( G4VSplitableHadron* projectile,
projectile->SetSecondParton( Q[0] );
projectile->SetStatus( 0 );
// Uzhi March 2016 start
G4int aAQ, aQ;
aAQ=std::abs( AQ[0] ); aQ=std::abs( Q[0] );
G4int NewCode;
G4double aKsi = G4UniformRand();
G4int aAQ, aQ;
aAQ = std::abs( AQ[0] ); aQ = std::abs( Q[0] );
G4int NewCode;
G4double aKsi = G4UniformRand();
if ( aAQ == aQ )
{
if ( aAQ != 3 )
{
NewCode = 111; // Pi0-meson
if ( aKsi < 0.5 )
{
NewCode = 221; // Eta -meson
if ( aKsi < 0.25 ) {NewCode = 331;} // Eta'-meson
}
} else
{
NewCode = 221; // Eta -meson
if( aKsi < 0.5 ) {NewCode = 331;} // Eta'-meson
}
} else
{
if ( aAQ > aQ ){ NewCode = aAQ*100 + aQ*10 + 1; NewCode *= aAQ/AQ[0]; }
else { NewCode = aQ*100 + aAQ*10 + 1; NewCode *= aQ/Q[0]; }
}
if ( aAQ == aQ ) {
if ( aAQ != 3 ) {
NewCode = 111; // Pi0-meson
if ( aKsi < 0.5 ) {
NewCode = 221; // Eta -meson
if ( aKsi < 0.25 ) {
NewCode = 331; // Eta'-meson
}
}
} else {
NewCode = 221; // Eta -meson
if ( aKsi < 0.5 ) {
NewCode = 331; // Eta'-meson
}
}
} else {
if ( aAQ > aQ ) {
NewCode = aAQ*100 + aQ*10 + 1; NewCode *= aAQ/AQ[0];
} else {
NewCode = aQ*100 + aAQ*10 + 1; NewCode *= aQ/Q[0];
}
}
G4ParticleDefinition* TestParticle = G4ParticleTable::GetParticleTable()->FindParticle( NewCode );
if(!TestParticle) return false;
projectile->SetDefinition( TestParticle );
G4ParticleDefinition* TestParticle = G4ParticleTable::GetParticleTable()->FindParticle( NewCode );
if ( ! TestParticle ) return false;
projectile->SetDefinition( TestParticle );
theParameters->SetProjMinDiffMass( 0.5 ); // Uzhi 2016 M+140 ??
theParameters->SetProjMinNonDiffMass( 0.5 ); // Uzhi 2016 M+140 ??
// Uzhi March 2016 end
theParameters->SetProjMinDiffMass( 0.5 ); // Uzhi 2016 M+140 ?
theParameters->SetProjMinNonDiffMass( 0.5 ); // Uzhi 2016 M+140 ?
//G4cout << "String 2 " << Q[1] << " " << AQ[1] << G4endl;
target->SplitUp();
@@ -328,68 +341,68 @@ theParameters->SetProjMinNonDiffMass( 0.5 ); // Uzhi 2016 M+140 ??
target->SetSecondParton( AQ[1] );
target->SetStatus( 0 );
// Uzhi March 2016 Start
aAQ=std::abs( AQ[1] ); aQ=std::abs( Q[1] ); aKsi = G4UniformRand();
if ( aAQ == aQ )
{
if ( aAQ != 3 )
{
NewCode = 111; // Pi0-meson
if ( aKsi < 0.5 )
{
NewCode = 221; // Eta -meson
if ( aKsi < 0.25 ) {NewCode = 331;} // Eta'-meson
}
} else
{
NewCode = 221; // Eta -meson
if( aKsi < 0.5 ) {NewCode = 331;} // Eta'-meson
}
} else
{
if ( aAQ > aQ ){ NewCode = aAQ*100 + aQ*10 + 1; NewCode *= aAQ/AQ[1]; }
else { NewCode = aQ*100 + aAQ*10 + 1; NewCode *= aQ/Q[1]; }
}
TestParticle = G4ParticleTable::GetParticleTable()->FindParticle( NewCode );
if(!TestParticle) return false;
target->SetDefinition( TestParticle );
aAQ = std::abs( AQ[1] ); aQ = std::abs( Q[1] ); aKsi = G4UniformRand();
if ( aAQ == aQ ) {
if ( aAQ != 3 ) {
NewCode = 111; // Pi0-meson
if ( aKsi < 0.5 ) {
NewCode = 221; // Eta -meson
if ( aKsi < 0.25 ) {
NewCode = 331; // Eta'-meson
}
}
} else {
NewCode = 221; // Eta -meson
if ( aKsi < 0.5 ) {
NewCode = 331; // Eta'-meson
}
}
} else {
if ( aAQ > aQ ) {
NewCode = aAQ*100 + aQ*10 + 1; NewCode *= aAQ/AQ[1];
} else {
NewCode = aQ*100 + aAQ*10 + 1; NewCode *= aQ/Q[1];
}
}
theParameters->SetTarMinDiffMass( 0.5 ); // Uzhi 2016 M+140 ??
theParameters->SetTarMinNonDiffMass( 0.5 ); // Uzhi 2016 M+140 ??
// Uzhi March 2016 end
TestParticle = G4ParticleTable::GetParticleTable()->FindParticle( NewCode );
if ( ! TestParticle ) return false;
target->SetDefinition( TestParticle );
theParameters->SetTarMinDiffMass( 0.5 ); // Uzhi 2016 M+140 ?
theParameters->SetTarMinNonDiffMass( 0.5 ); // Uzhi 2016 M+140 ?
//G4cout << "String 3 " << AQ[2] << " " << Q[2] << G4endl;
AdditionalString = new G4DiffractiveSplitableHadron();
// Uzhi March 2016 start
aAQ=std::abs( AQ[2] ); aQ=std::abs( Q[2] ); aKsi = G4UniformRand();
aAQ = std::abs( AQ[2] ); aQ = std::abs( Q[2] ); aKsi = G4UniformRand();
if ( aAQ == aQ )
{
if ( aAQ != 3 )
{
NewCode = 111; // Pi0-meson
if ( aKsi < 0.5 )
{
NewCode = 221; // Eta -meson
if ( aKsi < 0.25 ) {NewCode = 331;} // Eta'-meson
}
} else
{
NewCode = 221; // Eta -meson
if( aKsi < 0.5 ) {NewCode = 331;} // Eta'-meson
}
} else
{
if ( aAQ > aQ ){ NewCode = aAQ*100 + aQ*10 + 1; NewCode *= aAQ/AQ[2]; }
else { NewCode = aQ*100 + aAQ*10 + 1; NewCode *= aQ/Q[2]; }
}
if ( aAQ == aQ ) {
if ( aAQ != 3 ) {
NewCode = 111; // Pi0-meson
if ( aKsi < 0.5 ) {
NewCode = 221; // Eta -meson
if ( aKsi < 0.25 ) {
NewCode = 331; // Eta'-meson
}
}
} else {
NewCode = 221; // Eta -meson
if ( aKsi < 0.5 ) {
NewCode = 331; // Eta'-meson
}
}
} else {
if ( aAQ > aQ ) {
NewCode = aAQ*100 + aQ*10 + 1; NewCode *= aAQ/AQ[2];
} else {
NewCode = aQ*100 + aAQ*10 + 1; NewCode *= aQ/Q[2];
}
}
TestParticle = G4ParticleTable::GetParticleTable()->FindParticle( NewCode );
if(!TestParticle) return false;
AdditionalString->SetDefinition( TestParticle );
// Uzhi March 2016 end
TestParticle = G4ParticleTable::GetParticleTable()->FindParticle( NewCode );
if ( ! TestParticle ) return false;
AdditionalString->SetDefinition( TestParticle );
AdditionalString->SplitUp();
AdditionalString->SetFirstParton( AQ[2] );
@@ -560,6 +573,7 @@ AdditionalString->SetDefinition( TestParticle );
G4ThreeVector tmp = Quark_Mom[0] + Quark_Mom[3];
G4LorentzVector Pstring1( tmp, std::sqrt( Quark_Mom[0].mag2() + MassQ2 ) +
std::sqrt( Quark_Mom[3].mag2() + MassQ2 ) );
if ( RotateStrings ) Pstring1 *= RandomRotation; //AR-Nov2017 String rotation
G4double Ystring1 = Pstring1.rapidity();
//G4cout << "Mom 1 string " << G4endl << Quark_Mom[0] << G4endl << Quark_Mom[3] << G4endl
@@ -569,6 +583,7 @@ AdditionalString->SetDefinition( TestParticle );
tmp = Quark_Mom[1] + Quark_Mom[4];
G4LorentzVector Pstring2( tmp, std::sqrt( Quark_Mom[1].mag2() + MassQ2 ) +
std::sqrt( Quark_Mom[4].mag2() + MassQ2 ) );
if ( RotateStrings ) Pstring2 *= RandomRotation; //AR-Nov2017 String rotation
G4double Ystring2 = Pstring2.rapidity();
//G4cout << "Mom 2 string " << G4endl << Quark_Mom[1] << G4endl << Quark_Mom[4] << G4endl
@@ -578,6 +593,7 @@ AdditionalString->SetDefinition( TestParticle );
tmp = Quark_Mom[2] + Quark_Mom[5];
G4LorentzVector Pstring3( tmp, std::sqrt( Quark_Mom[2].mag2() + MassQ2 ) +
std::sqrt( Quark_Mom[5].mag2() + MassQ2 ) );
if ( RotateStrings ) Pstring3 *= RandomRotation; //AR-Nov2017 String rotation
G4double Ystring3 = Pstring3.rapidity();
//G4cout << "Mom 3 string " << G4endl << Quark_Mom[2] << G4endl << Quark_Mom[5] << G4endl
@@ -643,7 +659,7 @@ AdditionalString->SetDefinition( TestParticle );
AdditionalString->IncrementCollisionCount( 1 );
target->IncrementCollisionCount( 1 );
theParameters->SetProbabilityOfAnnihilation( 0.0 ); // Uzhi March 2016
//AR-Oct2017 theParameters->SetProbabilityOfAnnihilation( 0.0 );
return true;
@@ -704,14 +720,26 @@ theParameters->SetProbabilityOfAnnihilation( 0.0 ); // Uzhi March 2016
//projectile->SetSecondParton( DQ );
projectile->SetFirstParton( DQ );
projectile->SetSecondParton( Anti_DQ );
//AR-Nov2017 String rotation : Begin
if ( RotateStrings ) {
G4LorentzVector Pquark = G4LorentzVector( 0., 0., SqrtS/2., SqrtS/2. );
Pquark *= RandomRotation;
G4LorentzVector Paquark = G4LorentzVector( 0., 0., -SqrtS/2., SqrtS/2. );
Paquark *= RandomRotation;
Pquark.transform(toLab); projectile->GetNextParton()->Set4Momentum(Pquark);
Paquark.transform(toLab); projectile->GetNextAntiParton()->Set4Momentum(Paquark);
}
//AR-Nov2017 String rotation : End
projectile->SetStatus( 0 );
target->SetStatus( 4 ); // The target nucleon has annihilated 3->4 Uzhi Oct 2014
target->SetStatus( 4 ); // The target nucleon has annihilated 3->4
Pprojectile.setPx( 0.0 );
Pprojectile.setPy( 0.0 );
Pprojectile.setPz( 0.0 );
Pprojectile.setE( SqrtS );
Pprojectile.transform( toLab );
// Uzhi March 2016 if QQ_QQbar will interact Set Mmin, MdifMin
// Uzhi March 2016 if QQ_QQbar will interact Set Mmin, MdifMin
// Calculation of the creation time
projectile->SetTimeOfCreation( target->GetTimeOfCreation() );
@@ -726,8 +754,8 @@ theParameters->SetProbabilityOfAnnihilation( 0.0 ); // Uzhi March 2016
projectile->IncrementCollisionCount( 1 );
target->IncrementCollisionCount( 1 );
//theParameters->SetProbabilityOfAnnihilation( 0.0 ); // Uzhi March 2016
// In the case baryon and anti-baryon are created. Thus the antibaryon can annihilate latter.
//theParameters->SetProbabilityOfAnnihilation( 0.0 );
// In the case baryon and anti-baryon are created. Thus the antibaryon can annihilate later.
return true;
}
@@ -780,40 +808,40 @@ theParameters->SetProbabilityOfAnnihilation( 0.0 ); // Uzhi March 2016
projectile->SetSecondParton( LeftQ1 );
projectile->SetStatus( 0 );
// Uzhi March 2016 start
G4int aAQ, aQ;
aAQ=std::abs( LeftAQ1 ); aQ=std::abs( LeftQ1 );
G4int aAQ, aQ;
aAQ = std::abs( LeftAQ1 ); aQ = std::abs( LeftQ1 );
G4int NewCode;
G4double aKsi = G4UniformRand();
G4int NewCode;
G4double aKsi = G4UniformRand();
if ( aAQ == aQ )
{
if ( aAQ != 3 )
{
NewCode = 111; // Pi0-meson
if ( aKsi < 0.5 )
{
NewCode = 221; // Eta -meson
if ( aKsi < 0.25 ) {NewCode = 331;} // Eta'-meson
}
} else
{
NewCode = 221; // Eta -meson
if( aKsi < 0.5 ) {NewCode = 331;} // Eta'-meson
}
} else
{
if ( aAQ > aQ ){ NewCode = aAQ*100 + aQ*10 + 1; NewCode *= aAQ/LeftAQ1; }
else { NewCode = aQ*100 + aAQ*10 + 1; NewCode *= aQ/LeftQ1; }
}
if ( aAQ == aQ ) {
if ( aAQ != 3 ) {
NewCode = 111; // Pi0-meson
if ( aKsi < 0.5 ) {
NewCode = 221; // Eta -meson
if ( aKsi < 0.25 ) {
NewCode = 331; // Eta'-meson
}
}
} else {
NewCode = 221; // Eta -meson
if ( aKsi < 0.5 ) {
NewCode = 331; // Eta'-meson
}
}
} else {
if ( aAQ > aQ ) {
NewCode = aAQ*100 + aQ*10 + 1; NewCode *= aAQ/LeftAQ1;
} else {
NewCode = aQ*100 + aAQ*10 + 1; NewCode *= aQ/LeftQ1;
}
}
G4ParticleDefinition* TestParticle = G4ParticleTable::GetParticleTable()->FindParticle( NewCode );
if(!TestParticle) return false;
projectile->SetDefinition( TestParticle );
theParameters->SetProjMinDiffMass( 0.5 ); // (0.5) // GeV Uzhi March 2016 ???
theParameters->SetProjMinNonDiffMass( 0.5 );
// Uzhi March 2016 end
G4ParticleDefinition* TestParticle = G4ParticleTable::GetParticleTable()->FindParticle( NewCode );
if ( ! TestParticle ) return false;
projectile->SetDefinition( TestParticle );
theParameters->SetProjMinDiffMass( 0.5 ); // (0.5) // GeV Uzhi March 2016 ?
theParameters->SetProjMinNonDiffMass( 0.5 );
//G4cout << "String 2 " << LeftAQ2 << " " << LeftQ2 << G4endl;
target->SplitUp();
@@ -821,36 +849,36 @@ theParameters->SetProjMinNonDiffMass( 0.5 );
target->SetSecondParton( LeftAQ2 );
target->SetStatus( 0 );
// Uzhi March 2016 start
aAQ=std::abs( LeftAQ2 ); aQ=std::abs( LeftQ2 ); aKsi = G4UniformRand();
aAQ = std::abs( LeftAQ2 ); aQ = std::abs( LeftQ2 ); aKsi = G4UniformRand();
if ( aAQ == aQ )
{
if ( aAQ != 3 )
{
NewCode = 111; // Pi0-meson
if ( aKsi < 0.5 )
{
NewCode = 221; // Eta -meson
if ( aKsi < 0.25 ) {NewCode = 331;} // Eta'-meson
}
} else
{
NewCode = 221; // Eta -meson
if( aKsi < 0.5 ) {NewCode = 331;} // Eta'-meson
}
} else
{
if ( aAQ > aQ ){ NewCode = aAQ*100 + aQ*10 + 1; NewCode *= aAQ/LeftAQ2; }
else { NewCode = aQ*100 + aAQ*10 + 1; NewCode *= aQ/LeftQ2; }
}
if ( aAQ == aQ ) {
if ( aAQ != 3 ) {
NewCode = 111; // Pi0-meson
if ( aKsi < 0.5 ) {
NewCode = 221; // Eta -meson
if ( aKsi < 0.25 ) {
NewCode = 331; // Eta'-meson
}
}
} else {
NewCode = 221; // Eta -meson
if ( aKsi < 0.5 ) {
NewCode = 331; // Eta'-meson
}
}
} else {
if ( aAQ > aQ ) {
NewCode = aAQ*100 + aQ*10 + 1; NewCode *= aAQ/LeftAQ2;
} else {
NewCode = aQ*100 + aAQ*10 + 1; NewCode *= aQ/LeftQ2;
}
}
TestParticle = G4ParticleTable::GetParticleTable()->FindParticle( NewCode );
if(!TestParticle) return false;
target->SetDefinition( TestParticle );
theParameters->SetTarMinDiffMass( 0.5 ); // Uzhi March 2016 ???
theParameters->SetTarMinNonDiffMass( 0.5 );
// Uzhi March 2016
TestParticle = G4ParticleTable::GetParticleTable()->FindParticle( NewCode );
if ( ! TestParticle ) return false;
target->SetDefinition( TestParticle );
theParameters->SetTarMinDiffMass( 0.5 ); // Uzhi March 2016 ?
theParameters->SetTarMinNonDiffMass( 0.5 );
// Sampling kinematical properties
// 1 string LeftAQ1-LeftQ1// 2 string LeftAQ2-LeftQ2
@@ -995,6 +1023,7 @@ theParameters->SetTarMinNonDiffMass( 0.5 );
G4ThreeVector tmp = Quark_Mom[0] + Quark_Mom[2];
G4LorentzVector Pstring1( tmp, std::sqrt( Quark_Mom[0].mag2() + MassQ2 ) +
std::sqrt( Quark_Mom[2].mag2() + MassQ2 ) );
if ( RotateStrings ) Pstring1 *= RandomRotation; //AR-Nov2017 String rotation
G4double Ystring1 = Pstring1.rapidity();
//G4cout << "Mom 1 string " << G4endl << Quark_Mom[0] << G4endl << Quark_Mom[2] << G4endl
@@ -1004,6 +1033,7 @@ theParameters->SetTarMinNonDiffMass( 0.5 );
tmp = Quark_Mom[1] + Quark_Mom[3];
G4LorentzVector Pstring2( tmp, std::sqrt( Quark_Mom[1].mag2() + MassQ2 ) +
std::sqrt( Quark_Mom[3].mag2() + MassQ2 ) );
if ( RotateStrings ) Pstring2 *= RandomRotation; //AR-Nov2017 String rotation
G4double Ystring2 = Pstring2.rapidity();
//G4cout << "Mom 2 string " << G4endl <<Quark_Mom[1] << G4endl << Quark_Mom[3] << G4endl
@@ -1034,7 +1064,7 @@ theParameters->SetTarMinNonDiffMass( 0.5 );
projectile->IncrementCollisionCount( 1 );
target->IncrementCollisionCount( 1 );
theParameters->SetProbabilityOfAnnihilation( 0.0 ); // Uzhi March 2016
//AR-Oct2017 theParameters->SetProbabilityOfAnnihilation( 0.0 );
return true;
@@ -1100,48 +1130,56 @@ theParameters->SetProbabilityOfAnnihilation( 0.0 ); // Uzhi March 2016
projectile->SetSecondParton( LeftAQ );
projectile->SetStatus( 0 );
// Uzhi March 2016 start
G4int aAQ, aQ;
aAQ=std::abs( LeftAQ ); aQ=std::abs( LeftQ );
G4int aAQ, aQ;
aAQ = std::abs( LeftAQ ); aQ = std::abs( LeftQ );
G4int NewCode;
G4double aKsi = G4UniformRand();
G4int NewCode;
G4double aKsi = G4UniformRand();
if ( aAQ == aQ )
{
if ( aAQ != 3 )
{
NewCode = 111; // Pi0-meson
if ( aKsi < 0.5 )
{
NewCode = 221; // Eta -meson
if ( aKsi < 0.25 ) {NewCode = 331;} // Eta'-meson
}
} else
{
NewCode = 221; // Eta -meson
if( aKsi < 0.5 ) {NewCode = 331;} // Eta'-meson
}
} else
{
if ( aAQ > aQ ){ NewCode = aAQ*100 + aQ*10 + 1; NewCode *= aAQ/LeftAQ; }
else { NewCode = aQ*100 + aAQ*10 + 1; NewCode *= aQ/LeftQ; }
}
if ( aAQ == aQ ) {
if ( aAQ != 3 ) {
NewCode = 111; // Pi0-meson
if ( aKsi < 0.5 ) {
NewCode = 221; // Eta -meson
if ( aKsi < 0.25 ) {
NewCode = 331; // Eta'-meson
}
}
} else {
NewCode = 221; // Eta -meson
if ( aKsi < 0.5 ) {
NewCode = 331; // Eta'-meson
}
}
} else {
if ( aAQ > aQ ) {
NewCode = aAQ*100 + aQ*10 + 1; NewCode *= aAQ/LeftAQ;
} else {
NewCode = aQ*100 + aAQ*10 + 1; NewCode *= aQ/LeftQ;
}
}
G4ParticleDefinition* TestParticle = G4ParticleTable::GetParticleTable()->FindParticle( NewCode );
if(!TestParticle) return false;
projectile->SetDefinition( TestParticle );
theParameters->SetProjMinDiffMass( 0.5 ); // (0.5) // GeV Uzhi March 2016
theParameters->SetProjMinNonDiffMass( 0.5 );
// Uzhi March 2016 end
G4ParticleDefinition* TestParticle = G4ParticleTable::GetParticleTable()->FindParticle( NewCode );
if ( ! TestParticle ) return false;
projectile->SetDefinition( TestParticle );
theParameters->SetProjMinDiffMass( 0.5 ); // (0.5) // GeV Uzhi March 2016
theParameters->SetProjMinNonDiffMass( 0.5 );
target->SetStatus( 4 ); // The target nucleon has annihilated 3->4 Uzhi Oct 2014
target->SetStatus( 4 ); // The target nucleon has annihilated 3->4
Pprojectile.setPx( 0.0 );
Pprojectile.setPy( 0.0 );
Pprojectile.setPz( 0.0 );
Pprojectile.setE( SqrtS );
Pprojectile.transform( toLab );
//AR-Nov2017 String rotation : Begin
G4LorentzVector Pquark = G4LorentzVector( 0., 0., SqrtS/2., SqrtS/2. );
G4LorentzVector Paquark = G4LorentzVector( 0., 0., -SqrtS/2., SqrtS/2. );
if ( RotateStrings ) { Pquark *= RandomRotation; Paquark *= RandomRotation; }
Pquark.transform(toLab); projectile->GetNextParton()->Set4Momentum(Pquark);
Paquark.transform(toLab); projectile->GetNextAntiParton()->Set4Momentum(Paquark);
//AR-Nov2017 String rotation : End
// Calculation of the creation time
projectile->SetTimeOfCreation( target->GetTimeOfCreation() );
projectile->SetPosition( target->GetPosition() );
@@ -1154,7 +1192,7 @@ theParameters->SetProjMinNonDiffMass( 0.5 );
projectile->IncrementCollisionCount( 1 );
target->IncrementCollisionCount( 1 );
theParameters->SetProbabilityOfAnnihilation( 0.0 ); // Uzhi March 2016
//AR-Oct2017 theParameters->SetProbabilityOfAnnihilation( 0.0 );
return true;
}
@@ -1237,3 +1275,4 @@ int G4FTFAnnihilation::operator!=( const G4FTFAnnihilation& ) const {
throw G4HadronicException( __FILE__, __LINE__,
"G4DiffractiveExcitation != operator not meant to be called" );
}
File diff suppressed because it is too large Load Diff
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4FTFParameters.cc 102029 2016-12-16 14:53:08Z gcosmo $
// $Id: G4FTFParameters.cc 107317 2017-11-08 16:25:57Z gcosmo $
// GEANT4 tag $Name: $
//
@@ -50,51 +50,429 @@
#include "G4Log.hh"
#include "G4Pow.hh"
#include "G4HadronicDeveloperParameters.hh"
G4HadronicDeveloperParameters& HDP = G4HadronicDeveloperParameters::GetInstance();
class G4FTFSettingDefaultHDP
{
public:
// ctor
G4FTFSettingDefaultHDP() {
//
// Cross sections for elementary processes
//
// these are for Inelastic interactions, i.e. Xinelastic=(Xtotal-Xelastix)>0.
// for elastic, all the A's & B's, Atop & Ymin are zeros
// general formula: Pp = A1*exp(B1*Y) + A2*exp(B2*Y) + A3
// but if Y<Ymin, then Pp=max(0.,Atop)
// for details, see also G4FTFParameters::GetProcProb( ProcN, y )
//
// Baryon projectile
//
/* JVY, Oct. 31, 2017: Per Alberto R. & Vladimir U., keep this group of parameters FIXED
// Process=0 --> Qexchg w/o excitation
//
HDP.SetDefault( "FTF_BARYON_PROC0_A1", 13.71 );
HDP.SetDefault( "FTF_BARYON_PROC0_B1", 1.75 );
HDP.SetDefault( "FTF_BARYON_PROC0_A2",-214.5 );
HDP.SetDefault( "FTF_BARYON_PROC0_B2", 4.25 );
HDP.SetDefault( "FTF_BARYON_PROC0_A3", 0.0 );
HDP.SetDefault( "FTF_BARYON_PROC0_ATOP", 0.5 );
HDP.SetDefault( "FTF_BARYON_PROC0_YMIN", 1.1 );
//
// Process=1 --> Qexchg w/excitation
//
HDP.SetDefault( "FTF_BARYON_PROC1_A1", 25. );
HDP.SetDefault( "FTF_BARYON_PROC1_B1", 1. );
HDP.SetDefault( "FTF_BARYON_PROC1_A2", -50.34 );
HDP.SetDefault( "FTF_BARYON_PROC1_B2", 1.5 );
HDP.SetDefault( "FTF_BARYON_PROC1_A3", 0. );
HDP.SetDefault( "FTF_BARYON_PROC1_ATOP", 0. );
HDP.SetDefault( "FTF_BARYON_PROC1_YMIN", 1.4 );
*/
//
// NOTE: Process #2 & 3 are projectile & target diffraction
// they have more complex definition of A1 & A2
// (see around line 540 or so)
// SetParams( 2, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93);// Projectile diffraction
// SetParams( 3, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93);// Target diffraction
//
// Also, for ( AbsProjectileBaryonNumber > 1 || NumberOfTargetNucleons > 1 )
// projectile and/or target diffraction (dissociation) may be switched ON/OFF
//
HDP.SetDefault( "FTF_BARYON_DIFF_DISSO_PROJ", false );
HDP.SetDefault( "FTF_BARYON_DIFF_DISSO_TGT", true ); // as in hadr-string-diff-V10-03-07
//
/* JVY, Oct. 31, 2017: Per Alberto R. & Vladimir U., keep this group of parameters FIXED
// Process=4 --> Qexchg w/additional multiplier in excitation
//
HDP.SetDefault( "FTF_BARYON_PROC4_A1", 1. );
HDP.SetDefault( "FTF_BARYON_PROC4_B1", 0. );
HDP.SetDefault( "FTF_BARYON_PROC4_A2", -2.01);
HDP.SetDefault( "FTF_BARYON_PROC4_B2", 0.5 );
HDP.SetDefault( "FTF_BARYON_PROC4_A3", 0. );
HDP.SetDefault( "FTF_BARYON_PROC4_ATOP",0. );
HDP.SetDefault( "FTF_BARYON_PROC4_YMIN",1.4 );
*/
//
// Parameters of participating hadron (baryon) excitation
//
HDP.SetDefault( "FTF_BARYON_DELTA_PROB_QEXCHG", 0. );
HDP.SetDefault( "FTF_BARYON_PROB_SAME_QEXCHG", 0. );
HDP.SetDefault( "FTF_BARYON_DIFF_M_PROJ", 1.16, 1.16, 3. );
HDP.SetDefault( "FTF_BARYON_NONDIFF_M_PROJ", 1.16, 1.16, 3. );
HDP.SetDefault( "FTF_BARYON_DIFF_M_TGT", 1.16, 1.16, 3. );
HDP.SetDefault( "FTF_BARYON_NONDIFF_M_TGT", 1.16, 1.16, 3. );
HDP.SetDefault( "FTF_BARYON_AVRG_PT2", 0.15, 0.08, 1. );
//
// JVY, Oct. 6, 2017: Per Alberto R., keep these two settings fixed (for now)
//
// HDP.SetDefault( "FTF_BARYON_PROB_DISTR_PROJ", 0.3 );
// HDP.SetDefault( "FTF_BARYON_PROB_DISTR_TGT", 0.3 );
//
// nuclear destruction - common parameters (with validity ranges, if applicable)
//
HDP.SetDefault( "FTF_NUCDESTR_P1_PROJ", 1., 0., 1. ); // in principle, it should be 1./NBRN - FIXME later !
HDP.SetDefault( "FTF_NUCDESTR_P1_NBRN_PROJ", false );
HDP.SetDefault( "FTF_NUCDESTR_P1_TGT", 1., 0., 1. );
HDP.SetDefault( "FTF_NUCDESTR_P1_ADEP_TGT", false );
// for now, keep fixed p2 & p3 for the tgt destruction
HDP.SetDefault( "FTF_NUCDESTR_P2_TGT", 4.0, 2., 16. );
HDP.SetDefault( "FTF_NUCDESTR_P3_TGT", 2.1, 0., 4. );
HDP.SetDefault( "FTF_PT2_NUCDESTR_P1", 0.035, 0., 0.25 );
HDP.SetDefault( "FTF_PT2_NUCDESTR_P2", 0.04, 0., 0.25 );
HDP.SetDefault( "FTF_PT2_NUCDESTR_P3", 4.0, 2., 16. );
HDP.SetDefault( "FTF_PT2_NUCDESTR_P4", 2.5, 0., 4. );
//
// nuclear desctruction - specific to baryon projectile
//
HDP.SetDefault( "FTF_BARYON_NUCDESTR_R2", 1.5*CLHEP::fermi*CLHEP::fermi, 0.5*CLHEP::fermi*CLHEP::fermi, 2.*CLHEP::fermi*CLHEP::fermi );
HDP.SetDefault( "FTF_BARYON_EXCI_E_PER_WNDNUCLN", 40.*CLHEP::MeV, 0., 100.*CLHEP::MeV );
HDP.SetDefault( "FTF_BARYON_NUCDESTR_DOF", 0.3, 0.1, 0.4 );
//
// JVY, Oct. 6, 2017: Per Alberto R., this is just a technical parameter,
// and it should NOT be changed
//
// HDP.SetDefault( "FTF_BARYON_NUCDESTR_MAXPT2", 1. * CLHEP::GeV*CLHEP::GeV );
}
};
G4FTFSettingDefaultHDP FTFDefaultsHDP;
//============================================================================
//#define debugFTFparams
//============================================================================
G4FTFParameters::G4FTFParameters() :
FTFhNcmsEnergy( 0.0 ),
FTFxsManager( 0 ),
FTFXtotal( 0.0 ), FTFXelastic( 0.0 ), FTFXinelastic( 0.0 ), FTFXannihilation( 0.0 ),
ProbabilityOfAnnihilation( 0.0 ), ProbabilityOfElasticScatt( 0.0 ),
RadiusOfHNinteractions2( 0.0 ), FTFSlope( 0.0 ),
AvaragePt2ofElasticScattering( 0.0 ), FTFGamma0( 0.0 ),
DeltaProbAtQuarkExchange( 0.0 ), ProbOfSameQuarkExchange( 0.0 ),
ProjMinDiffMass( 0.0 ), ProjMinNonDiffMass( 0.0 ), ProbLogDistrPrD(0.0),
TarMinDiffMass( 0.0 ), TarMinNonDiffMass( 0.0 ),
AveragePt2( 0.0 ), ProbLogDistr( 0.0 ),
Pt2kink( 0.0 ),
MaxNumberOfCollisions( 0.0 ), ProbOfInelInteraction( 0.0 ),
CofNuclearDestructionPr( 0.0 ), CofNuclearDestruction( 0.0 ),
R2ofNuclearDestruction( 0.0 ), ExcitationEnergyPerWoundedNucleon( 0.0 ),
DofNuclearDestruction( 0.0 ), Pt2ofNuclearDestruction( 0.0 ), MaxPt2ofNuclearDestruction( 0.0 )
G4FTFParamCollection::G4FTFParamCollection()
{
for ( G4int i = 0; i < 4; i++ ) {
for ( G4int j = 0; j < 7; j++ ) {
ProcParams[i][j] = 0.0;
}
}
Reset(); // zero out everything
// general (i.e. for used for baryons,anti-baryons, and mesons)
//
HDP.DeveloperGet( "FTF_NUCDESTR_P1_PROJ", fNuclearProjDestructP1 );
HDP.DeveloperGet( "FTF_NUCDESTR_P1_NBRN_PROJ",fNuclearProjDestructP1_NBRNDEP );
HDP.DeveloperGet( "FTF_NUCDESTR_P1_TGT", fNuclearTgtDestructP1 );
HDP.DeveloperGet( "FTF_NUCDESTR_P1_ADEP_TGT", fNuclearTgtDestructP1_ADEP );
HDP.DeveloperGet( "FTF_NUCDESTR_P2_TGT", fNuclearTgtDestructP2 );
HDP.DeveloperGet( "FTF_NUCDESTR_P3_TGT", fNuclearTgtDestructP3 );
//
HDP.DeveloperGet( "FTF_PT2_NUCDESTR_P1", fPt2NuclearDestructP1 );
HDP.DeveloperGet( "FTF_PT2_NUCDESTR_P2", fPt2NuclearDestructP2 );
HDP.DeveloperGet( "FTF_PT2_NUCDESTR_P3", fPt2NuclearDestructP3 );
HDP.DeveloperGet( "FTF_PT2_NUCDESTR_P4", fPt2NuclearDestructP4 );
//
// fNuclearProjDestructP1 = 1.; // in 10.2.p03 & 10.3.ref04-ref07/08/09 it's 0.00481; in 10.3.p01/p02/p03, etc. it's be 1. (fixed)
// fNuclearProjDestructP1_NBRNDEP = false;
// fNuclearTgtDestructP1 = 1.; // in 10.2.p03 & 10.3.ref04-ref07/08/09 it's 0.00481; in 10.3.p01/p02/p03, etc. it's be 1. (fixed)
// fNuclearTgtDestructP1_ADEP = false;
fNuclearProjDestructP2 = 4.0;
fNuclearProjDestructP3 = 2.1;
// fNuclearTgtDestructP2 = 4.0;
// fNuclearTgtDestructP3 = 2.1;
// fPt2NuclearDestructP1 = 0.035;
// fPt2NuclearDestructP2 = 0.04;
// fPt2NuclearDestructP3 = 4.0;
// fPt2NuclearDestructP4 = 2.5;
}
void G4FTFParamCollection::Reset()
{
// parameters of excitation
// Proc=0 --> Qexchg w/o excitation
fProc0A1 = 0.;
fProc0B1 = 0.;
fProc0A2 = 0.;
fProc0B2 = 0.;
fProc0A3 = 0.;
fProc0Atop = 0.;
fProc0Ymin = 0.;
// Proc=1 --> Qexchg w/excitation
fProc1A1 = 0.;
fProc1B1 = 0.;
fProc1A2 = 0.;
fProc1B2 = 0.;
fProc1A3 = 0.;
fProc1Atop = 0.;
fProc1Ymin = 0.;
// Proc=2 & Proc=3 for ( AbsProjectileBaryonNumber > 1 || NumberOfTargetNucleons > 1 )
// Do NOT do anything as it's set once and for all !!!
// Proc=4 --> Qexchg w/additional multiplier in excitation
fProc4A1 = 0.;
fProc4B1 = 0.;
fProc4A2 = 0.;
fProc4B2 = 0.;
fProc4A3 = 0.;
fProc4Atop = 0.;
fProc4Ymin = 0.;
// parameters of participating baryon excitation
fDeltaProbAtQuarkExchange = 0.;
fProbOfSameQuarkExchange = 0.;
fProjMinDiffMass = 0.;
fProjMinNonDiffMass = 0.;
fTgtMinDiffMass = 0.;
fTgtMinNonDiffMass = 0.;
fAveragePt2 = 0.;
fProbLogDistrPrD = 0.;
fProbLogDistr = 0.;
// parameters of nuclear distruction
// COMMONs
fNuclearProjDestructP1 = 0.;
fNuclearTgtDestructP1 = 0.;
fNuclearProjDestructP2 = 0.;
fNuclearProjDestructP3 = 0.;
fNuclearTgtDestructP2 = 0.;
fNuclearTgtDestructP3 = 0.;
fPt2NuclearDestructP1 = 0.;
fPt2NuclearDestructP2 = 0.;
fPt2NuclearDestructP3 = 0.;
fPt2NuclearDestructP4 = 0.;
// baryons
fR2ofNuclearDestruct = 0.;
fExciEnergyPerWoundedNucleon = 0.;
fDofNuclearDestruct = 0.;
fMaxPt2ofNuclearDestruct = 0.;
return;
}
//============================================================================
G4FTFParameters::~G4FTFParameters() {}
G4FTFParamCollBaryonProj::G4FTFParamCollBaryonProj()
: G4FTFParamCollection()
{
// parameters of participating hadron (baryon) excitation
//
// baryons projectile
//
// Proc=0 --> Qexchg w/o excitation
//
/* As of Oct. 31, 2017 keep these fixed
HDP.DeveloperGet( "FTF_BARYON_PROC0_A1", fProc0A1 );
HDP.DeveloperGet( "FTF_BARYON_PROC0_B1", fProc0B1 );
HDP.DeveloperGet( "FTF_BARYON_PROC0_A2", fProc0A2 );
HDP.DeveloperGet( "FTF_BARYON_PROC0_B2", fProc0B2 );
HDP.DeveloperGet( "FTF_BARYON_PROC0_A3", fProc0A3 );
HDP.DeveloperGet( "FTF_BARYON_PROC0_ATOP", fProc0Atop );
HDP.DeveloperGet( "FTF_BARYON_PROC0_YMIN", fProc0Ymin );
*/
//
fProc0A1 = 13.71;
fProc0B1 = 1.75;
fProc0A2 =-214.5;
fProc0B2 = 4.25;
fProc0A3 = 0.;
fProc0Atop = 0.5;
fProc0Ymin = 1.1;
//
// Proc=1 --> Qexchg w/excitation
//
/* As of Oct. 31, 2017 keep these fixed
HDP.DeveloperGet( "FTF_BARYON_PROC1_A1", fProc1A1 );
HDP.DeveloperGet( "FTF_BARYON_PROC1_B1", fProc1B1 );
HDP.DeveloperGet( "FTF_BARYON_PROC1_A2", fProc1A2 );
HDP.DeveloperGet( "FTF_BARYON_PROC1_B2", fProc1B2 );
HDP.DeveloperGet( "FTF_BARYON_PROC1_A3", fProc1A3 );
HDP.DeveloperGet( "FTF_BARYON_PROC1_ATOP", fProc1Atop );
HDP.DeveloperGet( "FTF_BARYON_PROC1_YMIN", fProc1Ymin );
*/
//
fProc1A1 = 25.;
fProc1B1 = 1.;
fProc1A2 = -50.34;
fProc1B2 = 1.5;
fProc1A3 = 0.;
fProc1Atop = 0.;
fProc1Ymin = 1.4;
//
// Proc=2 & Proc=3 for the case ( AbsProjectileBaryonNumber > 1 || NumberOfTargetNucleons > 1 )
// (diffraction dissociation)
//
HDP.DeveloperGet( "FTF_BARYON_DIFF_DISSO_PROJ", fProjDiffDissociation );
HDP.DeveloperGet( "FTF_BARYON_DIFF_DISSO_TGT", fTgtDiffDissociation );
//
// fProjDiffDissociation = false;
// fTgtDiffDissociation = true;
//
//
// Proc=4 --> Qexchg "w/additional multiplier" in excitation
//
/* As of Oct. 31, 2017 keep these fixed
HDP.DeveloperGet( "FTF_BARYON_PROC4_A1", fProc4A1 );
HDP.DeveloperGet( "FTF_BARYON_PROC4_B1", fProc4B1 );
HDP.DeveloperGet( "FTF_BARYON_PROC4_A2", fProc4A2 );
HDP.DeveloperGet( "FTF_BARYON_PROC4_B2", fProc4B2 );
HDP.DeveloperGet( "FTF_BARYON_PROC4_A3", fProc4A3 );
HDP.DeveloperGet( "FTF_BARYON_PROC4_ATOP", fProc4Atop );
HDP.DeveloperGet( "FTF_BARYON_PROC4_YMIN", fProc4Ymin );
*/
//
fProc4A1 = 1.0;
fProc4B1 = 0.;
fProc4A2 = -2.01;
fProc4B2 = 0.5;
fProc4A3 = 0.;
fProc4Atop = 0.;
fProc4Ymin = 1.4;
//
//
HDP.DeveloperGet( "FTF_BARYON_DELTA_PROB_QEXCHG", fDeltaProbAtQuarkExchange );
HDP.DeveloperGet( "FTF_BARYON_PROB_SAME_QEXCHG", fProbOfSameQuarkExchange );
HDP.DeveloperGet( "FTF_BARYON_DIFF_M_PROJ", fProjMinDiffMass );
HDP.DeveloperGet( "FTF_BARYON_NONDIFF_M_PROJ", fProjMinNonDiffMass );
HDP.DeveloperGet( "FTF_BARYON_DIFF_M_TGT", fTgtMinDiffMass );
HDP.DeveloperGet( "FTF_BARYON_NONDIFF_M_TGT", fTgtMinNonDiffMass );
HDP.DeveloperGet( "FTF_BARYON_AVRG_PT2", fAveragePt2 );
//
// fDeltaProbAtQuarkExchange = 0.;
// fProbOfSameQuarkExchange = 0.;
// fProjMinDiffMass = 1.16; // it's supposed to be in GeV but do NOT do (*CLHEP::GeV)
// because it'll be done in the G4FTFParameters::SetProjMinDiffMass
// fProjMinNonDiffMass = 1.16; // do NOT (*CLHEP::GeV) - same as above
// fTgtMinDiffMass = 1.16; // do NOT (*CLHEP::GeV) - same as above
// fTgtMinNonDiffMass = 1.16; // do NOT (*CLHEP::GeV) - same as above
// fAveragePt2 = 0.15; // do NOT (*CLHEP::GeV*CLHEP::GeV)
//
// JVY - Per Alberto R., we're curretly keeping these two settings fixed,
// thus they're defined here explicitly, rather than via HDP
//
// HDP.DeveloperGet( "FTF_BARYON_PROB_DISTR_PROJ", fProbLogDistrPrD );
// HDP.DeveloperGet( "FTF_BARYON_PROB_DISTR_TGT", fProbLogDistr );
fProbLogDistrPrD = 0.3;
fProbLogDistr = 0.3;
// nuclear destruction
//
// baryons
//
// ---> LATER !!! ---> fBaryonMaxNumberOfCollisions = 2.;
//
HDP.DeveloperGet( "FTF_BARYON_NUCDESTR_R2", fR2ofNuclearDestruct );
HDP.DeveloperGet( "FTF_BARYON_EXCI_E_PER_WNDNUCLN", fExciEnergyPerWoundedNucleon );
HDP.DeveloperGet( "FTF_BARYON_NUCDESTR_DOF", fDofNuclearDestruct );
//
// fR2ofNuclearDestruct = 1.5 * CLHEP::fermi*CLHEP::fermi;
// fExciEnergyPerWoundedNucleon = 40. * CLHEP::MeV;
// fDofNuclearDestruct = 0.3;
//
// NOTE-1: this parameter has changed from 1. to 9. between 10.2 and 10.3.ref07 !!!
// ... then it went back to 1. for the 10.4-candidate...
// NOTE-2: this is a "technical" parameter, it should not be changed; this is why
// it is defined explicitly rather than via HDP
// --> HDP.DeveloperGet( "FTF_BARYON_NUCDESTR_MAXPT2", fMaxPt2ofNuclearDestruct );
fMaxPt2ofNuclearDestruct = 1. * CLHEP::GeV*CLHEP::GeV;
}
//============================================================================
G4ThreadLocal bool G4FTFParameters::chipsComponentXSisInitialized = false;
G4ThreadLocal G4ChipsComponentXS* G4FTFParameters::chipsComponentXSinstance = 0;
//============================================================================
G4FTFParameters::G4FTFParameters()
{
FTFxsManager = 0;
Reset();
// Andrea Dotti (13Jan2013):
// The following lines are changed for G4MT. Originally the code was:
// static G4ChipsComponentXS* _instance = new G4ChipsComponentXS(); // Witek Pokorski
// Note the code could go back at original if _instance could be shared among threads
if ( ! chipsComponentXSisInitialized ) {
chipsComponentXSisInitialized = true;
chipsComponentXSinstance = new G4ChipsComponentXS();
}
G4ChipsComponentXS* _instance = chipsComponentXSinstance;
FTFxsManager = _instance;
}
//============================================================================
G4FTFParameters::~G4FTFParameters() {}
//============================================================================
void G4FTFParameters::Reset()
{
FTFhNcmsEnergy = 0.0;
FTFXtotal = 0.0;
FTFXelastic = 0.0;
FTFXinelastic = 0.0;
FTFXannihilation = 0.0;
ProbabilityOfAnnihilation = 0.0;
ProbabilityOfElasticScatt = 0.0;
RadiusOfHNinteractions2 = 0.0;
FTFSlope = 0.0;
AvaragePt2ofElasticScattering = 0.0;
FTFGamma0 = 0.0;
DeltaProbAtQuarkExchange = 0.0;
ProbOfSameQuarkExchange = 0.0;
ProjMinDiffMass = 0.0;
ProjMinNonDiffMass = 0.0;
ProbLogDistrPrD = 0.0;
TarMinDiffMass = 0.0;
TarMinNonDiffMass = 0.0;
AveragePt2 = 0.0;
ProbLogDistr = 0.0;
Pt2kink = 0.0;
MaxNumberOfCollisions = 0.0;
ProbOfInelInteraction = 0.0;
CofNuclearDestructionPr = 0.0;
CofNuclearDestruction = 0.0;
R2ofNuclearDestruction = 0.0;
ExcitationEnergyPerWoundedNucleon = 0.0;
DofNuclearDestruction = 0.0;
Pt2ofNuclearDestruction = 0.0;
MaxPt2ofNuclearDestruction = 0.0;
for ( G4int i = 0; i < 4; i++ ) {
for ( G4int j = 0; j < 7; j++ ) {
ProcParams[i][j] = 0.0;
}
}
return;
}
//============================================================================
/*
G4FTFParameters::G4FTFParameters( const G4ParticleDefinition* particle,
G4int theA, G4int theZ, G4double PlabPerParticle ) :
FTFhNcmsEnergy( 0.0 ),
@@ -112,12 +490,19 @@ G4FTFParameters::G4FTFParameters( const G4ParticleDefinition* particle,
CofNuclearDestructionPr( 0.0 ), CofNuclearDestruction( 0.0 ),
R2ofNuclearDestruction( 0.0 ), ExcitationEnergyPerWoundedNucleon( 0.0 ),
DofNuclearDestruction( 0.0 ), Pt2ofNuclearDestruction( 0.0 ), MaxPt2ofNuclearDestruction( 0.0 )
*/
void G4FTFParameters::InitForInteraction( const G4ParticleDefinition* particle,
G4int theA, G4int theZ, G4double PlabPerParticle )
{
/*
for ( G4int i = 0; i < 4; i++ ) {
for ( G4int j = 0; j < 7; j++ ) {
ProcParams[i][j] = 0.0;
}
}
*/
Reset();
G4int ProjectilePDGcode = particle->GetPDGEncoding();
G4int ProjectileabsPDGcode = std::abs( ProjectilePDGcode );
@@ -133,7 +518,7 @@ G4FTFParameters::G4FTFParameters( const G4ParticleDefinition* particle,
AbsProjectileBaryonNumber = std::abs( ProjectileBaryonNumber );
AbsProjectileCharge = G4int( particle->GetPDGCharge() );
if ( ProjectileBaryonNumber > 1 ) {
ProjectilePDGcode = 2212; ProjectileabsPDGcode = 2212; // Proton
ProjectilePDGcode = 2212; ProjectileabsPDGcode = 2212; // Proton
} else {
ProjectilePDGcode = -2212; ProjectileabsPDGcode = 2212; // Anti-Proton
}
@@ -171,6 +556,8 @@ G4FTFParameters::G4FTFParameters( const G4ParticleDefinition* particle,
TargetMass /= GeV; TargetMass2 /= (GeV*GeV);
ProjectileMass /= GeV; ProjectileMass2 /= (GeV*GeV);
/* JYV, Oct. 31, 2017: Keep it in the ctor
// Andrea Dotti (13Jan2013):
// The following lines are changed for G4MT. Originally the code was:
// static G4ChipsComponentXS* _instance = new G4ChipsComponentXS(); // Witek Pokorski
@@ -181,6 +568,7 @@ G4FTFParameters::G4FTFParameters( const G4ParticleDefinition* particle,
}
G4ChipsComponentXS* _instance = chipsComponentXSinstance;
FTFxsManager = _instance;
*/
Plab /= GeV;
G4double Xftf = 0.0;
@@ -248,9 +636,9 @@ G4FTFParameters::G4FTFParameters( const G4ParticleDefinition* particle,
X_d = 6.614; // mb
} else { // Total and elastic cross section of PbarP interactions a'la Arkhipov
G4double LogS = G4Log( ECMSsqr / 33.0625 );
G4double Xasmpt = 36.04 + 0.304*LogS*LogS; // mb
G4double Xasmpt = 36.04 + 0.304*LogS*LogS; // mb
LogS = G4Log( SqrtS / 20.74 );
G4double Basmpt = 11.92 + 0.3036*LogS*LogS; // GeV^(-2)
G4double Basmpt = 11.92 + 0.3036*LogS*LogS; // GeV^(-2)
G4double R0 = std::sqrt( 0.40874044*Xasmpt - Basmpt ); // GeV^(-1)
G4double FlowF = SqrtS / std::sqrt( ECMSsqr*ECMSsqr + ProjectileMass2*ProjectileMass2 +
@@ -259,7 +647,7 @@ G4FTFParameters::G4FTFParameters( const G4ParticleDefinition* particle,
- 2.0*ProjectileMass2*TargetMass2 );
Xtotal = Xasmpt * ( 1.0 + 13.55*FlowF/R0/R0/R0*
(1.0 - 4.47/SqrtS + 12.38/ECMSsqr - 12.43/SqrtS/ECMSsqr) ); // mb
(1.0 - 4.47/SqrtS + 12.38/ECMSsqr - 12.43/SqrtS/ECMSsqr) ); // mb
Xasmpt = 4.4 + 0.101*LogS*LogS; // mb
Xelastic = Xasmpt * ( 1.0 + 59.27*FlowF/R0/R0/R0*
@@ -292,31 +680,31 @@ G4FTFParameters::G4FTFParameters( const G4ParticleDefinition* particle,
G4double Xann_on_P( 0.0), Xann_on_N( 0.0 );
if ( ProjectilePDGcode == -2212 ) { // Pbar+P/N
if ( ProjectilePDGcode == -2212 ) { // Pbar+P/N
Xann_on_P = X_a + X_b*5.0 + X_c*5.0 + X_d*6.0;
Xann_on_N = X_a + X_b*4.0 + X_c*4.0 + X_d*4.0;
} else if ( ProjectilePDGcode == -2112 ) { // NeutrBar+P/N
} else if ( ProjectilePDGcode == -2112 ) { // NeutrBar+P/N
Xann_on_P = X_a + X_b*4.0 + X_c*4.0 + X_d*4.0;
Xann_on_N = X_a + X_b*5.0 + X_c*5.0 + X_d*6.0;
} else if ( ProjectilePDGcode == -3122 ) { // LambdaBar+P/N
} else if ( ProjectilePDGcode == -3122 ) { // LambdaBar+P/N
Xann_on_P = X_a + X_b*3.0 + X_c*3.0 + X_d*2.0;
Xann_on_N = X_a + X_b*3.0 + X_c*3.0 + X_d*2.0;
} else if ( ProjectilePDGcode == -3112 ) { // Sigma-Bar+P/N
} else if ( ProjectilePDGcode == -3112 ) { // Sigma-Bar+P/N
Xann_on_P = X_a + X_b*2.0 + X_c*2.0 + X_d*0.0;
Xann_on_N = X_a + X_b*4.0 + X_c*4.0 + X_d*2.0;
} else if ( ProjectilePDGcode == -3212 ) { // Sigma0Bar+P/N
} else if ( ProjectilePDGcode == -3212 ) { // Sigma0Bar+P/N
Xann_on_P = X_a + X_b*3.0 + X_c*3.0 + X_d*2.0;
Xann_on_N = X_a + X_b*3.0 + X_c*3.0 + X_d*2.0;
} else if ( ProjectilePDGcode == -3222 ) { // Sigma+Bar+P/N
} else if ( ProjectilePDGcode == -3222 ) { // Sigma+Bar+P/N
Xann_on_P = X_a + X_b*4.0 + X_c*4.0 + X_d*2.0;
Xann_on_N = X_a + X_b*2.0 + X_c*2.0 + X_d*0.0;
} else if ( ProjectilePDGcode == -3312 ) { // Xi-Bar+P/N
} else if ( ProjectilePDGcode == -3312 ) { // Xi-Bar+P/N
Xann_on_P = X_a + X_b*1.0 + X_c*1.0 + X_d*0.0;
Xann_on_N = X_a + X_b*2.0 + X_c*2.0 + X_d*0.0;
} else if ( ProjectilePDGcode == -3322 ) { // Xi0Bar+P/N
} else if ( ProjectilePDGcode == -3322 ) { // Xi0Bar+P/N
Xann_on_P = X_a + X_b*2.0 + X_c*2.0 + X_d*0.0;
Xann_on_N = X_a + X_b*1.0 + X_c*1.0 + X_d*0.0;
} else if ( ProjectilePDGcode == -3334 ) { // Omega-Bar+P/N
} else if ( ProjectilePDGcode == -3334 ) { // Omega-Bar+P/N
Xann_on_P = X_a + X_b*0.0 + X_c*0.0 + X_d*0.0;
Xann_on_N = X_a + X_b*0.0 + X_c*0.0 + X_d*0.0;
} else {
@@ -513,22 +901,51 @@ G4FTFParameters::G4FTFParameters( const G4ParticleDefinition* particle,
// Parameters of elastic scattering
// Gaussian parametrization of elastic scattering amplitude assumed
SetAvaragePt2ofElasticScattering( 1.0/( Xtotal*Xtotal/16.0/pi/Xelastic/0.3894 )*GeV*GeV );
// G4cout << "AvaragePt2ofElasticScattering " << GetAvaragePt2ofElasticScattering() << G4endl;
//G4cout << "AvaragePt2ofElasticScattering " << GetAvaragePt2ofElasticScattering() << G4endl;
// Parameters of excitations
G4double Xinel = Xtotal - Xelastic; // Uzhi 25.04.2012
G4double Xinel = Xtotal - Xelastic;
//G4cout << "Param ProjectilePDGcode " << ProjectilePDGcode << G4endl;
if ( ProjectilePDGcode > 1000 ) { // Projectile is baryon
// Proc# A1 B1 A2 B2 A3 Atop Ymin
// SetParams( 0, 13.71, 1.75, -214.5, 4.25, 0.0, 0.5 , 1.1 ); // Qexchange without Exc.
SetParams( 0, 13.71, 1.75, -30.69, 3.0 , 0.0, 1.0 , 0.93 ); // Qexchange without Exc.
SetParams( 1, 25.0 , 1.0 , -50.34, 1.5 , 0.0, 0.0 , 1.4 ); // Qexchange with Exc.
/* original hadr-string-diff-V10-03-07 (similar to 10.3.x)
SetParams( 0, 13.71, 1.75, -214.5, 4.25, 0.0, 0.5 , 1.1 ); // Qexchange without Exc.
SetParams( 1, 25.0, 1.0, -50.34, 1.5 , 0.0, 0.0 , 1.4 ); // Qexchange with Exc.
*/
// ---> JVY - update
//
SetParams( 0, fParCollBaryonProj.GetProc0A1(),
fParCollBaryonProj.GetProc0B1(),
fParCollBaryonProj.GetProc0A2(),
fParCollBaryonProj.GetProc0B2(),
fParCollBaryonProj.GetProc0A3(),
fParCollBaryonProj.GetProc0Atop(),
fParCollBaryonProj.GetProc0Ymin() ); // Qexchange without Exc.
SetParams( 1, fParCollBaryonProj.GetProc1A1(),
fParCollBaryonProj.GetProc1B1(),
fParCollBaryonProj.GetProc1A2(),
fParCollBaryonProj.GetProc1B2(),
fParCollBaryonProj.GetProc1A3(),
fParCollBaryonProj.GetProc1Atop(),
fParCollBaryonProj.GetProc1Ymin() ); // Qexchange with Exc.
// ---> end update
if( Xinel > 0.) {
SetParams( 2, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93);// Projectile diffraction
SetParams( 3, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93);// Target diffraction
SetParams( 4, 0.6 , 0.0 , -1.20, 0.5 , 0.0, 0.0 , 1.4 );// Qexchange with Exc. Additional multiply
/* original hadr-string-diff-V10-03-07
SetParams( 4, 1.0, 0.0 , -2.01 , 0.5 , 0.0, 0.0 , 1.4 );// Qexchange with Exc. Additional multiply
*/
// JVY update
SetParams( 4, fParCollBaryonProj.GetProc4A1(),
fParCollBaryonProj.GetProc4B1(),
fParCollBaryonProj.GetProc4A2(),
fParCollBaryonProj.GetProc4B2(),
fParCollBaryonProj.GetProc4A3(),
fParCollBaryonProj.GetProc4Atop(),
fParCollBaryonProj.GetProc4Ymin() ); // Qexchange with Exc. Additional multiply
// ---> end update
} else {
SetParams( 2, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0);
SetParams( 3, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0);
@@ -536,11 +953,14 @@ G4FTFParameters::G4FTFParameters( const G4ParticleDefinition* particle,
}
if ( AbsProjectileBaryonNumber > 1 || NumberOfTargetNucleons > 1 ) {
// It is not decided what to do with diffraction dissociation in Had-Nucl and Nucl-Nucl interactions
SetParams( 2, 0.0, 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Projectile diffraction
// SetParams( 3, 0.0, 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Target diffraction
// It is not decided what to do with diffraction dissociation in Had-Nucl and Nucl-Nucl interactions
if ( ! fParCollBaryonProj.IsProjDiffDissociation() )
SetParams( 2, 0.0, 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Projectile diffraction
if ( ! fParCollBaryonProj.IsTgtDiffDissociation() )
SetParams( 3, 0.0, 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Target diffraction
}
/* original hadr-string-diff-V10-03-07
SetDeltaProbAtQuarkExchange( 0.0 );
if ( NumberOfTargetNucleons > 26 ) {
SetProbOfSameQuarkExchange( 1.0);
@@ -551,9 +971,25 @@ G4FTFParameters::G4FTFParameters( const G4ParticleDefinition* particle,
SetProjMinNonDiffMass( 1.16 ); // GeV
SetTarMinDiffMass( 1.16 ); // GeV
SetTarMinNonDiffMass( 1.16 ); // GeV
SetAveragePt2( 0.3 ); // GeV^2 // Uzhi Oct 2014
SetProbLogDistrPrD( 0.6 ); // Uzhi June 2016, 0.5 0.3
SetProbLogDistr(0.6); // Uzhi June 2016 0.4->0.6
SetAveragePt2( 0.15 ); // GeV^2
SetProbLogDistrPrD( 0.3 ); // Before it was: 0.5
SetProbLogDistr(0.3 ); // Before it was: 0.5
*/
// ---> JVY - update
SetDeltaProbAtQuarkExchange( fParCollBaryonProj.GetDeltaProbAtQuarkExchange() );
if ( NumberOfTargetNucleons > 26 ) {
SetProbOfSameQuarkExchange( 1.0);
} else {
SetProbOfSameQuarkExchange( fParCollBaryonProj.GetProbOfSameQuarkExchange() );
}
SetProjMinDiffMass( fParCollBaryonProj.GetProjMinDiffMass() ); // GeV
SetProjMinNonDiffMass( fParCollBaryonProj.GetProjMinNonDiffMass() ); // GeV
SetTarMinDiffMass( fParCollBaryonProj.GetTgtMinDiffMass() ); // GeV
SetTarMinNonDiffMass( fParCollBaryonProj.GetTgtMinNonDiffMass() ); // GeV
SetAveragePt2( fParCollBaryonProj.GetAveragePt2() ); // GeV^2
SetProbLogDistrPrD( fParCollBaryonProj.GetProbLogDistrPrD() );
SetProbLogDistr( fParCollBaryonProj.GetProbLogDistr() );
// ---> end update
} else if( ProjectilePDGcode < -1000 ) { // Projectile is anti_baryon
@@ -572,18 +1008,18 @@ G4FTFParameters::G4FTFParameters( const G4ParticleDefinition* particle,
if ( AbsProjectileBaryonNumber > 1 || NumberOfTargetNucleons > 1 ) {
SetParams( 2, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Projectile diffraction
// SetParams( 3, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Target diffraction
//SetParams( 3, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Target diffraction
}
SetDeltaProbAtQuarkExchange( 0.0 );
SetProbOfSameQuarkExchange( 0.0 );
SetProjMinDiffMass( ProjectileMass + 0.22 ); // GeV
SetProjMinNonDiffMass( ProjectileMass + 0.22 ); // GeV
SetTarMinDiffMass( TargetMass + 0.22 ); // GeV
SetTarMinNonDiffMass( TargetMass + 0.22 ); // GeV
SetAveragePt2( 0.3 ); // GeV^2 // Uzhi Oct 2014
SetProbLogDistrPrD( 0.6 ); // Uzhi June 2016 0.4->0.6
SetProbLogDistr( 0.6 ); // Uzhi June 2016 0.4->0.6
SetAveragePt2( 0.15 ); // GeV^2
SetProbLogDistrPrD( 0.3 );
SetProbLogDistr( 0.3 );
} else if ( ProjectileabsPDGcode == 211 || ProjectilePDGcode == 111 ) { // Projectile is Pion
@@ -596,7 +1032,7 @@ G4FTFParameters::G4FTFParameters( const G4ParticleDefinition* particle,
if ( AbsProjectileBaryonNumber > 1 || NumberOfTargetNucleons > 1 ) {
SetParams( 2, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Projectile diffraction
// SetParams( 3, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Target diffraction
//SetParams( 3, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Target diffraction
}
SetDeltaProbAtQuarkExchange( 0.56 ); // (0.35)
@@ -604,9 +1040,9 @@ G4FTFParameters::G4FTFParameters( const G4ParticleDefinition* particle,
SetProjMinNonDiffMass( 0.5 ); // (0.5) // GeV
SetTarMinDiffMass( 1.16 ); // GeV
SetTarMinNonDiffMass( 1.16 ); // GeV
SetAveragePt2( 0.3 ); // GeV^2 // Uzhi Oct 2014
SetProbLogDistrPrD( 0.6 ); // Uzhi June 2016 0.4->0.6
SetProbLogDistr( 0.6 ); // Uzhi June 2016 0.4->0.6
SetAveragePt2( 0.15 ); // GeV^2
SetProbLogDistrPrD( 0.3 );
SetProbLogDistr( 0.3 );
} else if ( ProjectileabsPDGcode == 321 || ProjectileabsPDGcode == 311 ||
ProjectilePDGcode == 130 || ProjectilePDGcode == 310 ) { // Projectile is Kaon
@@ -620,22 +1056,22 @@ G4FTFParameters::G4FTFParameters( const G4ParticleDefinition* particle,
if ( AbsProjectileBaryonNumber > 1 || NumberOfTargetNucleons > 1 ) {
SetParams( 2, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Projectile diffraction
// SetParams( 3, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Target diffraction
//SetParams( 3, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Target diffraction
}
SetDeltaProbAtQuarkExchange( 0.6 );
SetProjMinDiffMass( 0.7 ); // (1.4) // (0.7) // GeV
SetProjMinNonDiffMass( 0.7 ); // (1.4) // (0.7) // GeV
SetTarMinDiffMass( 1.16 ); // GeV
SetTarMinNonDiffMass( 1.16 ); // GeV
SetAveragePt2( 0.3 ); // GeV^2 // Uzhi Oct 2014
SetProbLogDistrPrD( 0.6 ); // Uzhi June 2016 0.4->0.6
SetProbLogDistr( 0.6 ); // Uzhi June 2016 0.4->0.6
SetAveragePt2( 0.15 ); // GeV^2
SetProbLogDistrPrD( 0.5 );
SetProbLogDistr( 0.3 );
} else { // Projectile is undefined, Nucleon assumed
// Proc# A1 B1 A2 B2 A3 Atop Ymin
// SetParams( 0, 13.71, 1.75, -214.5, 4.25, 0.0, 0.5 , 1.1 );// Qexchange without Exc. May 2016
SetParams( 0, 13.71, 1.75, -30.69, 3.0 , 0.0, 1.0 , 0.93 ); // Qexchange without Exc.
SetParams( 0, 13.71, 1.75, -214.5, 4.25, 0.0, 0.5 , 1.1 ); // Qexchange without Exc.
SetParams( 1, 25.0, 1.0, -50.34, 1.5 , 0.0, 0.0 , 1.4 ); // Qexchange with Exc.
if( Xinel > 0.) {
SetParams( 2, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93); // Projectile diffraction
@@ -648,7 +1084,7 @@ G4FTFParameters::G4FTFParameters( const G4ParticleDefinition* particle,
}
if ( AbsProjectileBaryonNumber > 1 || NumberOfTargetNucleons > 1 ) {
SetParams( 2, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Projectile diffraction
// SetParams( 3, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Target diffraction
//SetParams( 3, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Target diffraction
}
SetDeltaProbAtQuarkExchange( 0.0 ); // 7 June 2011
SetProbOfSameQuarkExchange( 0.0 );
@@ -656,104 +1092,149 @@ G4FTFParameters::G4FTFParameters( const G4ParticleDefinition* particle,
SetProjMinNonDiffMass( ProjectileMass + 0.22 ); // GeV
SetTarMinDiffMass( TargetMass + 0.22 ); // GeV
SetTarMinNonDiffMass( TargetMass + 0.22 ); // GeV
SetAveragePt2( 0.3 ); // GeV^2 // Uzhi Oct 2014
SetProbLogDistrPrD( 0.6 ); // Uzhi June 2016 0.4->0.6
SetProbLogDistr( 0.6 ); // Uzhi June 2016 0.4->0.6
SetAveragePt2( 0.15 ); // GeV^2
SetProbLogDistrPrD( 0.3 );
SetProbLogDistr( 0.3 );
}
// Set parameters of a string kink
// SetPt2Kink( 6.0*GeV*GeV ); // Uzhi Oct 2014
SetPt2Kink( 0.0*GeV*GeV ); // Uzhi Oct 2014 // Uzhi to switch off kinky strings
// Set parameters of a string kink
// SetPt2Kink( 6.0*GeV*GeV );
SetPt2Kink( 0.0*GeV*GeV ); // Uzhi Oct 2014 to switch off kinky strings
G4double Puubar( 1.0/3.0 ), Pddbar( 1.0/3.0 ), Pssbar( 1.0/3.0 ); // SU(3) symmetry
// G4double Puubar( 0.41 ), Pddbar( 0.41 ), Pssbar( 0.18 ); // Broken SU(3) symmetry
//G4double Puubar( 0.41 ), Pddbar( 0.41 ), Pssbar( 0.18 ); // Broken SU(3) symmetry
SetQuarkProbabilitiesAtGluonSplitUp( Puubar, Pddbar, Pssbar );
// Set parameters of nuclear destruction
if ( ProjectileabsPDGcode < 1000 ) { // Meson projectile
SetMaxNumberOfCollisions( Plab, 2.0 ); // 3.0 )
SetCofNuclearDestruction( 0.00481*G4double(NumberOfTargetNucleons)* // Uzhi 3.05.2015
G4Exp( 4.0*(Ylab - 2.1) )/( 1.0 + G4Exp( 4.0*(Ylab - 2.1) ) ) );
SetR2ofNuclearDestruction( 1.5*fermi*fermi );
SetDofNuclearDestruction( 0.3 );
SetPt2ofNuclearDestruction( ( 0.035 + 0.04*G4Exp( 4.0*(Ylab - 2.5) )/
// Set parameters of nuclear destruction
if ( ProjectileabsPDGcode < 1000 ) { // Meson projectile
SetMaxNumberOfCollisions( Plab, 2.0 ); // 3.0 )
//AR-18May2016 SetCofNuclearDestruction( 0.00481*G4double(NumberOfTargetNucleons)* // Uzhi 3.05.2015
SetCofNuclearDestruction( 1.0* // AR-18May2016
G4Exp( 4.0*(Ylab - 2.1) )/( 1.0 + G4Exp( 4.0*(Ylab - 2.1) ) ) );
SetR2ofNuclearDestruction( 1.5*fermi*fermi );
SetDofNuclearDestruction( 0.3 );
SetPt2ofNuclearDestruction( ( 0.035 + 0.04*G4Exp( 4.0*(Ylab - 2.5) )/
( 1.0 + G4Exp( 4.0*(Ylab - 2.5) ) ) )*GeV*GeV );
SetMaxPt2ofNuclearDestruction( 1.0*GeV*GeV );
SetExcitationEnergyPerWoundedNucleon( 40.0*MeV ); // Uzhi March 2015: 100 -> 40
} else if ( ProjectilePDGcode < -1000 ) { // for anti-baryon projectile
SetMaxNumberOfCollisions( Plab, 2.0 ); // 3.0 )
SetCofNuclearDestruction( 0.00481*G4double(NumberOfTargetNucleons)* // Uzhi 3.05.2015
SetMaxPt2ofNuclearDestruction( 1.0*GeV*GeV );
SetExcitationEnergyPerWoundedNucleon( 40.0*MeV );
} else if ( ProjectilePDGcode < -1000 ) { // for anti-baryon projectile
SetMaxNumberOfCollisions( Plab, 2.0 ); // 3.0 )
//AR-18May2016 SetCofNuclearDestruction( 0.00481*G4double(NumberOfTargetNucleons)* // Uzhi 3.05.2015
SetCofNuclearDestruction( 1.0* // AR-18May2016
G4Exp( 4.0*(Ylab - 2.1) )/( 1.0 + G4Exp( 4.0*(Ylab - 2.1) ) ) );
SetR2ofNuclearDestruction( 1.5*fermi*fermi );
SetDofNuclearDestruction( 0.3 );
SetPt2ofNuclearDestruction( ( 0.035 + 0.04*G4Exp( 4.0*(Ylab - 2.5) )/
SetR2ofNuclearDestruction( 1.5*fermi*fermi );
SetDofNuclearDestruction( 0.3 );
SetPt2ofNuclearDestruction( ( 0.035 + 0.04*G4Exp( 4.0*(Ylab - 2.5) )/
( 1.0 + G4Exp( 4.0*(Ylab - 2.5) ) ) )*GeV*GeV );
SetMaxPt2ofNuclearDestruction( 1.0*GeV*GeV );
SetExcitationEnergyPerWoundedNucleon( 40.0*MeV ); // Uzhi March 2015: 100 -> 20
if ( Plab < 2.0 ) { // 2 GeV/c
// For slow anti-baryon we have to garanty putting on mass-shell
SetCofNuclearDestruction( 0.0 );
SetR2ofNuclearDestruction( 1.5*fermi*fermi );
SetDofNuclearDestruction( 0.01 );
SetPt2ofNuclearDestruction( 0.035*GeV*GeV );
SetMaxPt2ofNuclearDestruction( 0.04*GeV*GeV );
}
} else { // Projectile baryon assumed
SetMaxNumberOfCollisions( Plab, 2.0 ); // 3.0 )
SetMaxPt2ofNuclearDestruction( 1.0*GeV*GeV );
SetExcitationEnergyPerWoundedNucleon( 40.0*MeV );
if ( Plab < 2.0 ) { // 2 GeV/c
// For slow anti-baryon we have to garanty putting on mass-shell
SetCofNuclearDestruction( 0.0 );
SetR2ofNuclearDestruction( 1.5*fermi*fermi );
SetDofNuclearDestruction( 0.01 );
SetPt2ofNuclearDestruction( 0.035*GeV*GeV );
SetMaxPt2ofNuclearDestruction( 0.04*GeV*GeV );
//SetExcitationEnergyPerWoundedNucleon( 0.0 ); // ?????
}
} else { // Projectile baryon assumed
SetCofNuclearDestructionPr( 0.00481*G4double(AbsProjectileBaryonNumber)*
G4Exp( 4.0*(Ylab - 2.1) )/( 1.0 + G4Exp( 4.0*(Ylab - 2.1) ) ) );
// NOTE: FIXME !!! (JVY) Will decide later how/if to make this one configurable...
//
SetMaxNumberOfCollisions( Plab, 2.0 ); // 3.0 )
SetCofNuclearDestruction( 0.00481*G4double(NumberOfTargetNucleons)*
G4Exp( 4.0*(Ylab - 2.1) )/( 1.0 + G4Exp( 4.0*(Ylab - 2.1) ) ) );
SetR2ofNuclearDestruction( 1.5*fermi*fermi );
SetDofNuclearDestruction( 0.3 );
SetPt2ofNuclearDestruction( ( 0.035 + 0.04*G4Exp( 4.0*(Ylab - 2.5) )/
( 1.0 + G4Exp( 4.0*(Ylab - 2.5) ) ) )*GeV*GeV);
//G4cout<<"Pt2 "<<std::sqrt(GetPt2ofNuclearDestruction())<<" "<<std::sqrt(GetPt2ofNuclearDestruction()/2.)<<G4endl;
//{G4int Uzhi; G4cin>>Uzhi;}
SetMaxPt2ofNuclearDestruction( 9.0*GeV*GeV );
SetExcitationEnergyPerWoundedNucleon( 40.0*MeV ); // Uzhi March 2015: 100 -> 40
}
/* original hadr-string-diff-V10-03-07
//AR-18May2016 SetCofNuclearDestructionPr( 0.00481*G4double(AbsProjectileBaryonNumber)* // Uzhi 3.05.2015
SetCofNuclearDestructionPr( 1.0* // AR-18May2016
G4Exp( 4.0*(Ylab - 2.1) )/( 1.0 + G4Exp( 4.0*(Ylab - 2.1) ) ) );
//AR-18May2016 SetCofNuclearDestruction( 0.00481*G4double(NumberOfTargetNucleons)* // Uzhi 3.05.2015
SetCofNuclearDestruction( 1.0* // AR-18May2016
G4Exp( 4.0*(Ylab - 2.1) )/( 1.0 + G4Exp( 4.0*(Ylab - 2.1) ) ) );
SetR2ofNuclearDestruction( 1.5*fermi*fermi );
SetDofNuclearDestruction( 0.3 );
SetPt2ofNuclearDestruction( ( 0.035 + 0.04*G4Exp( 4.0*(Ylab - 2.5) )/
( 1.0 + G4Exp( 4.0*(Ylab - 2.5) ) ) )*GeV*GeV );
SetMaxPt2ofNuclearDestruction( 1.0*GeV*GeV );
SetExcitationEnergyPerWoundedNucleon( 40.0*MeV );
*/
//SetCofNuclearDestruction( 0.47*G4Exp( 2.0*(Ylab - 2.5) )/( 1.0 + G4Exp( 2.0*(Ylab - 2.5) ) ) );
//SetPt2ofNuclearDestruction( ( 0.035 + 0.1*G4Exp( 4.0*(Ylab - 3.0) )/( 1.0 + G4Exp( 4.0*(Ylab - 3.0) ) ) )*GeV*GeV );
// ---> JVY - update
//
// projectile destruction - does NOT matter for particle projectile, only for a nucleus projectile
//
double coeff = 0.;
coeff = fParCollBaryonProj.GetNuclearProjDestructP1();
if ( fParCollBaryonProj.IsNuclearProjDestructP1_NBRNDEP() )
{
coeff *= G4double(AbsProjectileBaryonNumber);
}
double exfactor = G4Exp( fParCollBaryonProj.GetNuclearProjDestructP2()*(Ylab-fParCollBaryonProj.GetNuclearProjDestructP3()) );
coeff *= exfactor;
coeff /= ( 1.+ exfactor );
SetCofNuclearDestructionPr( coeff );
//
// target desctruction
coeff = fParCollBaryonProj.GetNuclearTgtDestructP1();
if ( fParCollBaryonProj.IsNuclearTgtDestructP1_ADEP() )
{
coeff *= G4double(NumberOfTargetNucleons);
}
exfactor = G4Exp( fParCollBaryonProj.GetNuclearTgtDestructP2()*(Ylab-fParCollBaryonProj.GetNuclearTgtDestructP3()) );
coeff *= exfactor;
coeff /= ( 1.+ exfactor );
SetCofNuclearDestruction( coeff );
//
SetR2ofNuclearDestruction( fParCollBaryonProj.GetR2ofNuclearDestruct() );
SetDofNuclearDestruction( fParCollBaryonProj.GetDofNuclearDestruct() );
//
coeff = fParCollBaryonProj.GetPt2NuclearDestructP2();
exfactor = G4Exp( fParCollBaryonProj.GetPt2NuclearDestructP3()*(Ylab-fParCollBaryonProj.GetPt2NuclearDestructP4()) );
coeff *= exfactor;
coeff /= ( 1. + exfactor );
SetPt2ofNuclearDestruction( (fParCollBaryonProj.GetPt2NuclearDestructP1()+coeff)*CLHEP::GeV*CLHEP::GeV );
//
SetMaxPt2ofNuclearDestruction( fParCollBaryonProj.GetMaxPt2ofNuclearDestruct() );
SetExcitationEnergyPerWoundedNucleon( fParCollBaryonProj.GetExciEnergyPerWoundedNucleon() );
// end of update
//SetMagQuarkExchange( 120.0 ); // 210.0 PipP
//SetSlopeQuarkExchange( 2.0 );
//SetDeltaProbAtQuarkExchange( 0.6 );
//SetProjMinDiffMass( 0.7 ); // GeV 1.1
//SetProjMinNonDiffMass( 0.7 ); // GeV
//SetProbabilityOfProjDiff( 0.0); // 0.85*G4Pow::GetInstance()->powA( s/GeV/GeV, -0.5 ) ); // 40/32 X-dif/X-inel
//SetTarMinDiffMass( 1.1 ); // GeV
//SetTarMinNonDiffMass( 1.1 ); // GeV
//SetProbabilityOfTarDiff( 0.0 ); // 0.85*G4Pow::GetInstance()->powA( s/GeV/GeV, -0.5 ) ); // 40/32 X-dif/X-inel
}
//SetAveragePt2( 0.0 ); // GeV^2 0.3
//------------------------------------
//SetProbabilityOfElasticScatt( 1.0, 0.0); //1.0); //(Xtotal, Xelastic);
//SetProbabilityOfProjDiff( 1.0*0.62*G4Pow::GetInstance()->powA( s/GeV/GeV, -0.51 ) ); // 0->1
//SetProbabilityOfTarDiff( 4.0*0.62*G4Pow::GetInstance()->powA( s/GeV/GeV, -0.51 ) ); // 2->4
//SetAveragePt2( 0.3 ); // (0.15)
//SetAvaragePt2ofElasticScattering( 0.0 );
//SetCofNuclearDestruction( 0.47*G4Exp( 2.0*(Ylab - 2.5) )/( 1.0 + G4Exp( 2.0*(Ylab - 2.5) ) ) );
//SetPt2ofNuclearDestruction( ( 0.035 + 0.1*G4Exp( 4.0*(Ylab - 3.0) )/( 1.0 + G4Exp( 4.0*(Ylab - 3.0) ) ) )*GeV*GeV );
//SetMaxNumberOfCollisions( Plab, 6.0 ); //(4.0*(Plab + 0.01), Plab); // 6.0 );
//SetAveragePt2( 0.15 );
//SetCofNuclearDestruction(1.);//( 0.5 ); // (0.25)
//SetExcitationEnergyPerWoundedNucleon(0.);//( 30.0*MeV ); // (75.0*MeV)
//SetDofNuclearDestruction(0.6);//( 0.2 ); //0.4 // 0.3 0.5
//SetPt2ofNuclearDestruction(0.);//(2.*0.075*GeV*GeV); //( 0.3*GeV*GeV ); // (0.168*GeV*GeV)
//SetMagQuarkExchange( 120.0 ); // 210.0 PipP
//SetSlopeQuarkExchange( 2.0 );
//SetDeltaProbAtQuarkExchange( 0.6 );
//SetProjMinDiffMass( 0.7 ); // GeV 1.1
//SetProjMinNonDiffMass( 0.7 ); // GeV
//SetProbabilityOfProjDiff( 0.0); // 0.85*G4Pow::GetInstance()->powA( s/GeV/GeV, -0.5 ) ); // 40/32 X-dif/X-inel
//SetTarMinDiffMass( 1.1 ); // GeV
//SetTarMinNonDiffMass( 1.1 ); // GeV
//SetProbabilityOfTarDiff( 0.0 ); // 0.85*G4Pow::GetInstance()->powA( s/GeV/GeV, -0.5 ) ); // 40/32 X-dif/X-inel
//SetMaxNumberOfCollisions( Plab, 78.0 ); // 3.0 )
//SetAveragePt2( 0.0 ); // GeV^2 0.3
//------------------------------------
//SetProbabilityOfElasticScatt( 1.0, 1.0); //(Xtotal, Xelastic);
//SetProbabilityOfProjDiff( 1.0*0.62*G4Pow::GetInstance()->powA( s/GeV/GeV, -0.51 ) ); // 0->1
//SetProbabilityOfTarDiff( 4.0*0.62*G4Pow::GetInstance()->powA( s/GeV/GeV, -0.51 ) ); // 2->4
//SetAveragePt2( 0.3 ); // (0.15)
//SetAvaragePt2ofElasticScattering( 0.0 );
//G4cout << "Cnd " << GetCofNuclearDestruction() << G4endl;
//G4cout << "Dnd " << GetDofNuclearDestruction() << G4endl;
//G4cout << "Pt2 " << GetPt2ofNuclearDestruction()/GeV/GeV << G4endl;
//G4int Uzhi; G4cin >> Uzhi;
//SetMaxNumberOfCollisions( Plab, 6.0 ); //(4.0*(Plab + 0.01), Plab); // 6.0 );
//SetAveragePt2( 0.15 );
//SetCofNuclearDestruction(-1.);//( 0.75 ); // (0.25)
//SetExcitationEnergyPerWoundedNucleon(0.);//( 30.0*MeV ); // (75.0*MeV)
//SetDofNuclearDestruction(0.);//( 0.2 ); //0.4 // 0.3 0.5
//SetPt2ofNuclearDestruction(0.);//(2.*0.075*GeV*GeV); //( 0.3*GeV*GeV ); // (0.168*GeV*GeV)
//SetMaxNumberOfCollisions( Plab, 78.0 ); // 3.0 )
//G4cout << "Cnd " << GetCofNuclearDestruction() << G4endl;
//G4cout << "Dnd " << GetDofNuclearDestruction() << G4endl;
//G4cout << "Pt2 " << GetPt2ofNuclearDestruction()/GeV/GeV << G4endl;
//G4int Uzhi; G4cin >> Uzhi;
}
//============================================================================
G4double G4FTFParameters::GetProcProb( const G4int ProcN, const G4double y ) {
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4FTFParticipants.cc 100828 2016-11-02 15:25:59Z gcosmo $
// $Id: G4FTFParticipants.cc 106965 2017-10-31 08:40:14Z gcosmo $
// GEANT4 tag $Name: $
//