Import Geant4 11.1.0 source tree
This commit is contained in:
+1
-2
@@ -170,8 +170,7 @@ G4KineticTrackVector *G4ExcitedStringDecay::FragmentStrings(const G4ExcitedStrin
|
||||
if (generatedKineticTracks == nullptr || generatedKineticTracks->size() == 0)
|
||||
{
|
||||
// G4cerr << "G4VPartonStringModel:No KineticTracks produced" << G4endl;
|
||||
// continue;
|
||||
success=false; NeedEnergyCorrector=false; break;
|
||||
continue;
|
||||
}
|
||||
|
||||
G4LorentzVector KTsum1(0.,0.,0.,0.);
|
||||
|
||||
+11
-14
@@ -42,21 +42,21 @@
|
||||
//#define debug_Hbuilder
|
||||
//#define debug_heavyHadrons
|
||||
|
||||
G4HadronBuilder::G4HadronBuilder(G4double mesonMix, G4double barionMix,
|
||||
std::vector<double> scalarMesonMix,
|
||||
std::vector<double> vectorMesonMix,
|
||||
G4double Eta_cProb, G4double Eta_bProb, G4double mesonMixSSbar)
|
||||
G4HadronBuilder::G4HadronBuilder(const std::vector<G4double> & mesonMix, const G4double barionMix,
|
||||
const std::vector<G4double> & scalarMesonMix,
|
||||
const std::vector<G4double> & vectorMesonMix,
|
||||
const G4double Eta_cProb, const G4double Eta_bProb)
|
||||
{
|
||||
mesonSpinMix = mesonMix;
|
||||
mesonSpinMixSSbar = mesonMixSSbar;
|
||||
barionSpinMix = barionMix;
|
||||
scalarMesonMixings = scalarMesonMix;
|
||||
vectorMesonMixings = vectorMesonMix;
|
||||
|
||||
ProbEta_c = Eta_cProb;
|
||||
ProbEta_b = Eta_bProb;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
G4ParticleDefinition * G4HadronBuilder::Build(G4ParticleDefinition * black, G4ParticleDefinition * white)
|
||||
{
|
||||
if (black->GetParticleSubType()== "di_quark" || white->GetParticleSubType()== "di_quark" ) {
|
||||
@@ -65,12 +65,10 @@ G4ParticleDefinition * G4HadronBuilder::Build(G4ParticleDefinition * black, G4Pa
|
||||
return Barion(black,white,spin);
|
||||
} else {
|
||||
// Meson
|
||||
Spin spin = SpinZero;
|
||||
if ( std::abs(black->GetPDGEncoding()) == 3 && std::abs(white->GetPDGEncoding()) == 3 ) {
|
||||
spin = (G4UniformRand() < mesonSpinMixSSbar) ? SpinZero : SpinOne;
|
||||
} else {
|
||||
spin = (G4UniformRand() < mesonSpinMix) ? SpinZero : SpinOne;
|
||||
}
|
||||
G4int StrangeQ = 0;
|
||||
if( std::abs(black->GetPDGEncoding()) >= 3 ) StrangeQ++;
|
||||
if( std::abs(white->GetPDGEncoding()) >= 3 ) StrangeQ++;
|
||||
Spin spin = (G4UniformRand() < mesonSpinMix[StrangeQ]) ? SpinZero : SpinOne;
|
||||
return Meson(black,white,spin);
|
||||
}
|
||||
}
|
||||
@@ -309,7 +307,6 @@ G4ParticleDefinition * G4HadronBuilder::Meson(G4ParticleDefinition * black,
|
||||
if (MesonDef == 0 ) {
|
||||
G4cerr << " G4HadronBuilder - Warning: No particle for PDGcode= "
|
||||
<< PDGEncoding << G4endl;
|
||||
|
||||
} else if ( ( black->GetPDGCharge() + white->GetPDGCharge()
|
||||
- MesonDef->GetPDGCharge() ) > perCent ) {
|
||||
G4cerr << " G4HadronBuilder - Warning: Incorrect Charge : "
|
||||
@@ -324,6 +321,7 @@ G4ParticleDefinition * G4HadronBuilder::Meson(G4ParticleDefinition * black,
|
||||
return MesonDef;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
G4ParticleDefinition * G4HadronBuilder::Barion(G4ParticleDefinition * black,
|
||||
G4ParticleDefinition * white,Spin theSpin)
|
||||
@@ -628,4 +626,3 @@ G4ParticleDefinition * G4HadronBuilder::Barion(G4ParticleDefinition * black,
|
||||
|
||||
return BarionDef;
|
||||
}
|
||||
|
||||
|
||||
+50
-45
@@ -53,11 +53,13 @@ G4LundStringFragmentation::G4LundStringFragmentation()
|
||||
// For ProduceOneHadron it is required
|
||||
// that no one pi-meson can be produced.
|
||||
SigmaQT = 0.435 * GeV;
|
||||
Tmt = 190.0 * MeV;
|
||||
Tmt = 190.0 * MeV;
|
||||
|
||||
SetStringTensionParameter(1.*GeV/fermi);
|
||||
SetDiquarkBreakProbability(0.5);
|
||||
SetDiquarkBreakProbability(0.3);
|
||||
|
||||
SetStrangenessSuppression((1.0 - 0.12)/2.0);
|
||||
SetDiquarkSuppression(0.15);
|
||||
SetDiquarkSuppression(0.07);
|
||||
|
||||
// Check if charmed and bottom hadrons are enabled: if this is the case, then
|
||||
// set the non-zero probabilities for c-cbar and b-bbar creation from the vacuum,
|
||||
@@ -65,7 +67,7 @@ G4LundStringFragmentation::G4LundStringFragmentation()
|
||||
// hadrons can't/can be created during the string fragmentation of ordinary
|
||||
// (i.e. not heavy) projectile hadron nuclear reactions.
|
||||
if ( G4HadronicParameters::Instance()->EnableBCParticles() ) {
|
||||
SetProbCCbar(0.005); // According to O.I. Piskunova Yad. Fiz. 56 (1993) 1094
|
||||
SetProbCCbar(0.0002); // According to O.I. Piskunova Yad. Fiz. 56 (1993) 1094; tuned by Uzhi Oct. 2022
|
||||
SetProbBBbar(5.0e-5); // According to O.I. Piskunova Yad. Fiz. 56 (1993) 1094
|
||||
} else {
|
||||
SetProbCCbar(0.0);
|
||||
@@ -376,7 +378,8 @@ G4KineticTrack * G4LundStringFragmentation::Splitup(G4FragmentingString *string,
|
||||
if (string->GetRightParton()->GetParticleSubType() != "quark") NumberOfpossibleBaryons++;
|
||||
|
||||
G4double ActualProb = ProbDqADq ;
|
||||
ActualProb *= (1.0-sqr(NumberOfpossibleBaryons*1400.0/StringMass));
|
||||
ActualProb *= (1.0-G4Pow::GetInstance()->powA(NumberOfpossibleBaryons*1400.0/StringMass, 8.0));
|
||||
if(ActualProb <0.0) ActualProb = 0.;
|
||||
|
||||
SetDiquarkSuppression(ActualProb);
|
||||
|
||||
@@ -385,7 +388,8 @@ G4KineticTrack * G4LundStringFragmentation::Splitup(G4FragmentingString *string,
|
||||
else if ( NumberOfpossibleBaryons == 4 ){Mth = 2380.0;} // 2 Mlambda/Msigma + Mk + Mpi
|
||||
else {}
|
||||
|
||||
ActualProb = ProbSaS * (1.0 - G4Pow::GetInstance()->powA( Mth/StringMass , 4.0 ));
|
||||
ActualProb = ProbSaS;
|
||||
ActualProb *= (1.0 - G4Pow::GetInstance()->powA( Mth/StringMass, 2.5 ));
|
||||
if ( ActualProb < 0.0 ) ActualProb = 0.0;
|
||||
SetStrangenessSuppression((1.0-ActualProb)/2.0);
|
||||
|
||||
@@ -459,7 +463,7 @@ G4ParticleDefinition * G4LundStringFragmentation::DiQuarkSplitup(G4ParticleDefin
|
||||
G4ParticleDefinition *&created)
|
||||
{
|
||||
G4double StrSup=GetStrangeSuppress();
|
||||
G4double ProbQQbar = (1.0 - 2.0*StrSup);
|
||||
G4double ProbQQbar = (1.0 - 2.0*StrSup)*1.25;
|
||||
|
||||
//... can Diquark break or not?
|
||||
if (G4UniformRand() < DiquarkBreakProb ){
|
||||
@@ -476,7 +480,9 @@ G4ParticleDefinition * G4LundStringFragmentation::DiQuarkSplitup(G4ParticleDefin
|
||||
|
||||
G4int IsParticle=(decayQuarkEncoding>0) ? -1 : +1; // if we have a quark, we need antiquark
|
||||
|
||||
SetStrangenessSuppression((1.0-ProbQQbar)/2.0);
|
||||
pDefPair QuarkPair = CreatePartonPair(IsParticle,false); // no diquarks wanted
|
||||
SetStrangenessSuppression((1.0-StrSup)/2.0);
|
||||
|
||||
//... Build new Diquark
|
||||
G4int QuarkEncoding=QuarkPair.second->GetPDGEncoding();
|
||||
@@ -496,7 +502,7 @@ G4ParticleDefinition * G4LundStringFragmentation::DiQuarkSplitup(G4ParticleDefin
|
||||
|
||||
G4int IsParticle=(decay->GetPDGEncoding()>0) ? +1 : -1; // if we have a diquark, we need quark
|
||||
|
||||
StrangeSuppress=(1.0 - ProbQQbar * 0.9)/2.0;
|
||||
StrangeSuppress=(1.0 - ProbQQbar)/2.0;
|
||||
pDefPair QuarkPair = CreatePartonPair(IsParticle,false); // no diquarks wanted
|
||||
|
||||
created = QuarkPair.second;
|
||||
@@ -550,6 +556,7 @@ G4LorentzVector * G4LundStringFragmentation::SplitEandP(G4ParticleDefinition * p
|
||||
G4double HadronMt, Pt, Pt2, phi;
|
||||
|
||||
G4double TmtCur = Tmt;
|
||||
|
||||
if ( (string->GetDecayParton()->GetParticleSubType()== "quark") &&
|
||||
(pHadron->GetBaryonNumber() != 0) ) {
|
||||
TmtCur = Tmt*0.37; // q->B
|
||||
@@ -674,6 +681,7 @@ G4double G4LundStringFragmentation::GetLightConeZ(G4double zmin, G4double zmax,
|
||||
G4double an = 2.5;
|
||||
an +=(sqr(Px)+sqr(Py))/sqr(GeV)-0.5;
|
||||
z=zmin + (zmax-zmin)*G4Pow::GetInstance()->powA(G4UniformRand(),1./an);
|
||||
if( PDGEncodingOfDecayParton > 3000 ) z=zmin+zmax-z;
|
||||
}
|
||||
|
||||
return z;
|
||||
@@ -723,43 +731,41 @@ G4bool G4LundStringFragmentation::SplitLast(G4FragmentingString * string,
|
||||
|
||||
if (string->IsAFourQuarkString() )
|
||||
{
|
||||
G4int IDleft = std::abs( string->GetLeftParton()->GetPDGEncoding() );
|
||||
G4int IDright = std::abs( string->GetRightParton()->GetPDGEncoding() );
|
||||
if ( IDleft > 3100 || IDright > 3100 )
|
||||
{
|
||||
if (! Diquark_AntiDiquark_belowThreshold_lastSplitting(string, LeftHadron, RightHadron) )
|
||||
G4int IDleft =std::abs(string->GetLeftParton()->GetPDGEncoding());
|
||||
G4int IDright=std::abs(string->GetRightParton()->GetPDGEncoding());
|
||||
|
||||
if ( (IDleft > 3000) || (IDright > 3000) ) {
|
||||
if ( ! Diquark_AntiDiquark_belowThreshold_lastSplitting(string, LeftHadron, RightHadron) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
// The string is qq-qqbar type. Diquarks are on the string ends
|
||||
if (StringMass-MinimalStringMass < 0.)
|
||||
{
|
||||
if (! Diquark_AntiDiquark_belowThreshold_lastSplitting(string, LeftHadron, RightHadron) )
|
||||
{
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
} else
|
||||
{
|
||||
// The string is qq-qqbar type. Diquarks are on the string ends
|
||||
if (StringMass-MinimalStringMass < 0.)
|
||||
{
|
||||
if (! Diquark_AntiDiquark_belowThreshold_lastSplitting(string, LeftHadron, RightHadron) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
} else
|
||||
{
|
||||
Diquark_AntiDiquark_aboveThreshold_lastSplitting(string, LeftHadron, RightHadron);
|
||||
} else
|
||||
{
|
||||
Diquark_AntiDiquark_aboveThreshold_lastSplitting(string, LeftHadron, RightHadron);
|
||||
|
||||
if (NumberOf_FS == 0) return false;
|
||||
if (NumberOf_FS == 0) return false;
|
||||
|
||||
sampledState = SampleState();
|
||||
if (string->GetLeftParton()->GetPDGEncoding() < 0)
|
||||
{
|
||||
LeftHadron =FS_LeftHadron[sampledState];
|
||||
RightHadron=FS_RightHadron[sampledState];
|
||||
} else
|
||||
{
|
||||
LeftHadron =FS_RightHadron[sampledState];
|
||||
RightHadron=FS_LeftHadron[sampledState];
|
||||
}
|
||||
}
|
||||
sampledState = SampleState();
|
||||
if (string->GetLeftParton()->GetPDGEncoding() < 0)
|
||||
{
|
||||
LeftHadron =FS_LeftHadron[sampledState];
|
||||
RightHadron=FS_RightHadron[sampledState];
|
||||
} else
|
||||
{
|
||||
LeftHadron =FS_RightHadron[sampledState];
|
||||
RightHadron=FS_LeftHadron[sampledState];
|
||||
}
|
||||
}
|
||||
} else
|
||||
{
|
||||
} // ID > 3300
|
||||
} else {
|
||||
if (string->DecayIsQuark() && string->StableIsQuark() )
|
||||
{ //... there are quarks on cluster ends
|
||||
#ifdef debug_LUNDfragmentation
|
||||
@@ -878,12 +884,13 @@ Diquark_AntiDiquark_belowThreshold_lastSplitting(G4FragmentingString * & string,
|
||||
}
|
||||
|
||||
isOK = (LeftHadron != nullptr) && (RightHadron != nullptr);
|
||||
|
||||
if(isOK) { isOK = (StringMass > LeftHadron->GetPDGMass() + RightHadron->GetPDGMass()); }
|
||||
++cClusterInterrupt;
|
||||
//... repeat procedure, if mass of cluster is too low to produce hadrons
|
||||
//... ClusterMassCut = 0.15*GeV model parameter
|
||||
}
|
||||
while (isOK == false || cClusterInterrupt < ClusterLoopInterrupt);
|
||||
while (isOK == false && cClusterInterrupt < ClusterLoopInterrupt);
|
||||
/* Loop checking, 07.08.2015, A.Ribon */
|
||||
return isOK;
|
||||
}
|
||||
@@ -1145,7 +1152,7 @@ G4bool G4LundStringFragmentation::Quark_AntiQuark_lastSplitting(G4FragmentingStr
|
||||
NumberOf_FS=0;
|
||||
for (G4int ProdQ=1; ProdQ < 4; ProdQ++) // Loop over quark-antiquark cases: u-ubar, d-dbar, s-sbar
|
||||
{ // (as last splitting, do not consider c-cbar and b-bbar cases)
|
||||
//G4cout << "NumberOf_FS ProdQ " << NumberOf_FS << " " << ProdQ << G4endl;
|
||||
//G4cout<<"NumberOf_FS ProdQ "<<NumberOf_FS<<" "<<ProdQ<<G4endl;
|
||||
LeftHadronCharge = QuarkCharge - Qcharge[ProdQ-1];
|
||||
G4int SignQ = LeftHadronCharge/3; if (SignQ == 0) SignQ = 1;
|
||||
|
||||
@@ -1175,7 +1182,7 @@ G4bool G4LundStringFragmentation::Quark_AntiQuark_lastSplitting(G4FragmentingStr
|
||||
//<<ProdQ-1<<" "<<StateQ<<" "<<SignQ*Meson[AbsIDquark-1][ProdQ-1][StateQ]<<G4endl;
|
||||
LeftHadron=G4ParticleTable::GetParticleTable()->FindParticle(SignQ*
|
||||
Meson[AbsIDquark-1][ProdQ-1][StateQ]);
|
||||
//G4cout<<"LeftHadron "<<LeftHadron<<G4endl;
|
||||
//G4cout<<"LeftHadron "<<LeftHadron<<G4endl;
|
||||
if (LeftHadron == NULL) { StateQ++; continue; }
|
||||
//G4cout<<"LeftHadron "<<LeftHadron->GetParticleName()<<G4endl;
|
||||
G4double LeftHadronMass=LeftHadron->GetPDGMass();
|
||||
@@ -1211,7 +1218,6 @@ G4bool G4LundStringFragmentation::Quark_AntiQuark_lastSplitting(G4FragmentingStr
|
||||
MesonWeight[AbsIDquark-1][ProdQ-1][StateQ]*
|
||||
MesonWeight[AbsIDanti_quark-1][ProdQ-1][StateAQ]*
|
||||
Prob_QQbar[ProdQ-1];
|
||||
|
||||
if (string->GetLeftParton()->GetPDGEncoding()>0)
|
||||
{
|
||||
FS_LeftHadron[NumberOf_FS] = RightHadron;
|
||||
@@ -1261,7 +1267,6 @@ G4int G4LundStringFragmentation::SampleState(void)
|
||||
}
|
||||
|
||||
G4double SumWeights=0.;
|
||||
|
||||
for (G4int i=0; i<NumberOf_FS; i++) {SumWeights+=FS_Weight[i];}
|
||||
|
||||
G4double ksi=G4UniformRand();
|
||||
|
||||
+32
-36
@@ -48,11 +48,11 @@
|
||||
|
||||
G4QGSMFragmentation::G4QGSMFragmentation()
|
||||
{
|
||||
SigmaQT = 0.45 * GeV; // Uzhi June 2020
|
||||
SigmaQT = 0.45 * GeV;
|
||||
|
||||
MassCut = 0.35*GeV;
|
||||
|
||||
SetStrangenessSuppression((1.0 - 0.12)/2.); // Uzhi June 2020 0.16 -> 0.12
|
||||
SetStrangenessSuppression((1.0 - 0.16)/2.);
|
||||
|
||||
// Check if charmed and bottom hadrons are enabled: if this is the case, then
|
||||
// set the non-zero probabilities for c-cbar and b-bbar creation from the vacuum,
|
||||
@@ -60,15 +60,15 @@ G4QGSMFragmentation::G4QGSMFragmentation()
|
||||
// hadrons can't/can be created during the string fragmentation of ordinary
|
||||
// (i.e. not heavy) projectile hadron nuclear reactions.
|
||||
if ( G4HadronicParameters::Instance()->EnableBCParticles() ) {
|
||||
SetProbCCbar(0.005); // According to O.I. Piskunova Yad. Fiz. 56 (1993) 1094
|
||||
SetProbCCbar(0.0002); // According to O.I. Piskunova Yad. Fiz. 56 (1993) 1094; tuned by Uzhi Oct. 2022
|
||||
SetProbBBbar(5.0e-5); // According to O.I. Piskunova Yad. Fiz. 56 (1993) 1094
|
||||
} else {
|
||||
SetProbCCbar(0.0);
|
||||
SetProbBBbar(0.0);
|
||||
}
|
||||
|
||||
SetDiquarkSuppression(0.195); // Uzhi June 2020 0.32 -> 0.195
|
||||
SetDiquarkBreakProbability(0.0); // Uzhi June 2020 0.7 -> 0.0
|
||||
SetDiquarkSuppression(0.32);
|
||||
SetDiquarkBreakProbability(0.7);
|
||||
|
||||
SetMinMasses();
|
||||
|
||||
@@ -220,11 +220,11 @@ G4KineticTrackVector* G4QGSMFragmentation::FragmentString(const G4ExcitedString&
|
||||
|
||||
// Split current string into 2 final Hadrons
|
||||
#ifdef debug_QGSMfragmentation
|
||||
if( inner_sucess ) { // Uzhi June 2020
|
||||
if( inner_sucess ) {
|
||||
G4cout<<"Split remaining string into 2 final hadrons."<<G4endl;
|
||||
} else {
|
||||
G4cout<<" New attempt to fragment string"<<G4endl;
|
||||
} // Uzhi June 2020
|
||||
}
|
||||
#endif
|
||||
// To the close production of hadrons at last string decay
|
||||
if ( inner_sucess &&
|
||||
@@ -277,8 +277,7 @@ G4KineticTrackVector* G4QGSMFragmentation::FragmentString(const G4ExcitedString&
|
||||
|
||||
G4bool G4QGSMFragmentation::IsItFragmentable(const G4FragmentingString * string)
|
||||
{
|
||||
//Uzhi June 2020 return sqr( PossibleHadronMass(string) + MassCut ) < string->Mass2();
|
||||
return sqr( MinimalStringMass + MassCut ) < string->Mass2(); // Uzhi June 2020
|
||||
return sqr( MinimalStringMass + MassCut ) < string->Mass2();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------------------------------
|
||||
@@ -428,8 +427,8 @@ G4ParticleDefinition *G4QGSMFragmentation::DiQuarkSplitup( G4ParticleDefinition*
|
||||
G4ParticleDefinition * decayQuark=FindParticle(decayQuarkEncoding);
|
||||
G4ParticleDefinition * had=hadronizer->Build(QuarkPair.first, decayQuark);
|
||||
|
||||
DecayQuark = decay->GetPDGEncoding(); //Uzhi June 2020 decayQuarkEncoding;
|
||||
NewQuark = NewDecayEncoding; //Uzhi June 2020 QuarkPair.first->GetPDGEncoding();
|
||||
DecayQuark = decay->GetPDGEncoding();
|
||||
NewQuark = NewDecayEncoding;
|
||||
|
||||
return had;
|
||||
|
||||
@@ -489,8 +488,8 @@ G4LorentzVector * G4QGSMFragmentation::SplitEandP(G4ParticleDefinition * pHadron
|
||||
G4ThreeVector HadronPt , RemSysPt;
|
||||
G4double HadronMassT2, ResidualMassT2;
|
||||
|
||||
//Uzhi June 2020 Mt distribution is implemented
|
||||
G4double HadronMt, Pt, Pt2, phi; // Uzhi June 2020
|
||||
// Mt distribution is implemented
|
||||
G4double HadronMt, Pt, Pt2, phi;
|
||||
|
||||
//... sample Pt of the hadron
|
||||
G4int attempt=0;
|
||||
@@ -498,12 +497,11 @@ G4LorentzVector * G4QGSMFragmentation::SplitEandP(G4ParticleDefinition * pHadron
|
||||
{
|
||||
attempt++; if (attempt > StringLoopInterrupt) return 0;
|
||||
|
||||
HadronMt = HadronMass - 200.0*G4Log(G4UniformRand()); // Uzhi June 2020, 200.0 must be tuned
|
||||
Pt2 = sqr(HadronMt)-sqr(HadronMass); Pt=std::sqrt(Pt2); // Uzhi June 2020
|
||||
HadronMt = HadronMass - 200.0*G4Log(G4UniformRand()); // 200.0 must be tuned
|
||||
Pt2 = sqr(HadronMt)-sqr(HadronMass); Pt=std::sqrt(Pt2);
|
||||
phi = 2.*pi*G4UniformRand();
|
||||
G4ThreeVector SampleQuarkPtw= G4ThreeVector(Pt*std::cos(phi), Pt*std::sin(phi), 0);
|
||||
HadronPt =SampleQuarkPtw + string->DecayPt(); // Uzhi June 2020
|
||||
//Uzhi June 2020 HadronPt =SampleQuarkPt() + string->DecayPt(); // Save this for possible return
|
||||
HadronPt =SampleQuarkPtw + string->DecayPt();
|
||||
HadronPt.setZ(0);
|
||||
RemSysPt = StringPt - HadronPt;
|
||||
|
||||
@@ -558,7 +556,7 @@ G4LorentzVector * G4QGSMFragmentation::SplitEandP(G4ParticleDefinition * pHadron
|
||||
G4double G4QGSMFragmentation::GetLightConeZ(G4double zmin, G4double zmax, G4int /* PartonEncoding */ ,
|
||||
G4ParticleDefinition* /* pHadron */, G4double ptx , G4double pty)
|
||||
{
|
||||
G4double lambda = 2.0*(sqr(ptx)+sqr(pty))/sqr(GeV); // Uzhi June 2020
|
||||
G4double lambda = 2.0*(sqr(ptx)+sqr(pty))/sqr(GeV);
|
||||
|
||||
#ifdef debug_QGSMfragmentation
|
||||
G4cout<<"GetLightConeZ zmin zmax Parton pHadron "<<zmin<<" "<<zmax<<" "/*<< PartonEncoding */
|
||||
@@ -595,10 +593,11 @@ G4double G4QGSMFragmentation::GetLightConeZ(G4double zmin, G4double zmax, G4int
|
||||
|
||||
if ( d1 < 0. ) {
|
||||
q1 = absDecayQuarkCode/1000; q2 = (absDecayQuarkCode % 1000)/100; DiQold = IndexDiQ[q1-1][q2-1];
|
||||
d1 = FFqq2qq[DiQold][absNewQuarkCode-1][0]; d2 = FFqq2qq[DiQold][absNewQuarkCode-1][1];
|
||||
qA = absNewQuarkCode/1000; qB = (absNewQuarkCode % 1000)/100; DiQnew = IndexDiQ[qA-1][qB-1];
|
||||
d1 = FFqq2qq[DiQold][DiQnew][0]; d2 = FFqq2qq[DiQold][DiQnew][1];
|
||||
}
|
||||
|
||||
d2 +=lambda; // Uzhi June 2020
|
||||
d2 +=lambda;
|
||||
d1+=1.0; d2+=1.0;
|
||||
|
||||
invD1=1./d1; invD2=1./d2;
|
||||
@@ -648,7 +647,7 @@ G4bool G4QGSMFragmentation::SplitLast(G4FragmentingString * string,
|
||||
G4double LeftHadronMass(0.); G4double RightHadronMass(0.);
|
||||
do
|
||||
{
|
||||
if (cClusterInterrupt++ >= ClusterLoopInterrupt) return false; // Uzhi June 2020
|
||||
if (cClusterInterrupt++ >= ClusterLoopInterrupt) return false;
|
||||
LeftHadronMass = -MaxMass; RightHadronMass = -MaxMass;
|
||||
|
||||
G4ParticleDefinition * quark = nullptr;
|
||||
@@ -664,12 +663,12 @@ G4bool G4QGSMFragmentation::SplitLast(G4FragmentingString * string,
|
||||
pDefPair QuarkPair = CreatePartonPair(IsParticle);
|
||||
quark = QuarkPair.second;
|
||||
|
||||
LeftHadron= hadronizer->BuildLowSpin(QuarkPair.first, string->GetLeftParton());
|
||||
if ( LeftHadron == NULL ) continue; // Uzhi June 2020
|
||||
RightHadron = hadronizer->BuildLowSpin(string->GetRightParton(), quark); // Uzhi June 2020
|
||||
if ( RightHadron == NULL ) continue; // Uzhi June 2020
|
||||
} else if( (!string->DecayIsQuark() && string->StableIsQuark() ) || // Uzhi June 2020
|
||||
( string->DecayIsQuark() && !string->StableIsQuark() ) ) { // Uzhi June 2020
|
||||
LeftHadron= hadronizer->Build(QuarkPair.first, string->GetLeftParton());
|
||||
if ( LeftHadron == NULL ) continue;
|
||||
RightHadron = hadronizer->Build(string->GetRightParton(), quark);
|
||||
if ( RightHadron == NULL ) continue;
|
||||
} else if( (!string->DecayIsQuark() && string->StableIsQuark() ) ||
|
||||
( string->DecayIsQuark() && !string->StableIsQuark() ) ) {
|
||||
//... there is a Diquark on one of cluster ends
|
||||
G4int IsParticle;
|
||||
if ( string->StableIsQuark() ) {
|
||||
@@ -685,13 +684,11 @@ G4bool G4QGSMFragmentation::SplitLast(G4FragmentingString * string,
|
||||
pDefPair QuarkPair = CreatePartonPair(IsParticle,false); // no diquarks wanted
|
||||
//SetStrangenessSuppression((1.0-ProbSaS)/2.0);
|
||||
quark = QuarkPair.second;
|
||||
LeftHadron=hadronizer->BuildLowSpin(QuarkPair.first, string->GetLeftParton());
|
||||
if ( LeftHadron == NULL ) continue; // Uzhi June 2020
|
||||
RightHadron = hadronizer->BuildLowSpin(string->GetRightParton(), quark); // Uzhi June 2020
|
||||
if ( RightHadron == NULL ) continue; // Uzhi June 2020
|
||||
} else { // Diquark and anti-diquark are on the string ends // Uzhi June 2020
|
||||
//+++++++++++++++++++++++++++++++ Inserted from FTF // Uzhi June 2020
|
||||
// Uzhi G4double StringMass = string->Mass();
|
||||
LeftHadron=hadronizer->Build(QuarkPair.first, string->GetLeftParton());
|
||||
if ( LeftHadron == NULL ) continue;
|
||||
RightHadron = hadronizer->Build(string->GetRightParton(), quark);
|
||||
if ( RightHadron == NULL ) continue;
|
||||
} else { // Diquark and anti-diquark are on the string ends
|
||||
if (cClusterInterrupt++ >= ClusterLoopInterrupt) return false;
|
||||
G4int LeftQuark1= string->GetLeftParton()->GetPDGEncoding()/1000;
|
||||
G4int LeftQuark2=(string->GetLeftParton()->GetPDGEncoding()/100)%10;
|
||||
@@ -705,7 +702,6 @@ G4bool G4QGSMFragmentation::SplitLast(G4FragmentingString * string,
|
||||
RightHadron =hadronizer->Build(FindParticle( LeftQuark2), FindParticle(RightQuark1));
|
||||
}
|
||||
if ( (LeftHadron == NULL) || (RightHadron == NULL) ) continue;
|
||||
// End of inserting from FTF Uzhi June 2020
|
||||
}
|
||||
LeftHadronMass = LeftHadron->GetPDGMass();
|
||||
RightHadronMass = RightHadron->GetPDGMass();
|
||||
@@ -742,7 +738,7 @@ G4bool G4QGSMFragmentation::SplitLast(G4FragmentingString * string,
|
||||
void G4QGSMFragmentation::Sample4Momentum(G4LorentzVector* Mom , G4double Mass ,
|
||||
G4LorentzVector* AntiMom, G4double AntiMass, G4double InitialMass)
|
||||
{
|
||||
#ifdef debug_QGSMfragmentation // Uzhi June 2020
|
||||
#ifdef debug_QGSMfragmentation
|
||||
G4cout<<"Sample4Momentum Last-----------------------------------------"<<G4endl;
|
||||
G4cout<<" StrMass "<<InitialMass<<" Mass1 "<<Mass<<" Mass2 "<<AntiMass<<G4endl;
|
||||
G4cout<<" SumMass "<<Mass+AntiMass<<G4endl;
|
||||
|
||||
+42
-75
@@ -80,18 +80,20 @@ G4VLongitudinalStringDecay::G4VLongitudinalStringDecay(const G4String& name)
|
||||
DiquarkBreakProb = 0.1; // Probability of (qq)->h+(qq)'
|
||||
|
||||
//... pspin_meson is probability to create pseudo-scalar meson
|
||||
pspin_meson = 0.4;
|
||||
pspin_mesonSSbar = 0.3;
|
||||
|
||||
pspin_meson.resize(3);
|
||||
pspin_meson[0] = 0.5; // u or d + anti-u or anti-d
|
||||
pspin_meson[1] = 0.4; // one of the quark is strange, or charm, or bottom
|
||||
pspin_meson[2] = 0.3; // both of the quark are strange, or charm, or bottom
|
||||
|
||||
//... pspin_barion is probability to create 1/2 barion
|
||||
pspin_barion = 0.5;
|
||||
|
||||
//... vectorMesonMix[] is quark mixing parameters for vector mesons (Variable spin = 3)
|
||||
vectorMesonMix.resize(6);
|
||||
vectorMesonMix[0] = 0.0;
|
||||
vectorMesonMix[1] = 0.375;
|
||||
vectorMesonMix[1] = 0.5;
|
||||
vectorMesonMix[2] = 0.0;
|
||||
vectorMesonMix[3] = 0.375;
|
||||
vectorMesonMix[3] = 0.5;
|
||||
vectorMesonMix[4] = 1.0;
|
||||
vectorMesonMix[5] = 1.0;
|
||||
|
||||
@@ -112,7 +114,7 @@ G4VLongitudinalStringDecay::G4VLongitudinalStringDecay(const G4String& name)
|
||||
// Parameters may be changed until the first fragmentation starts
|
||||
PastInitPhase=false;
|
||||
hadronizer = new G4HadronBuilder( pspin_meson, pspin_barion, scalarMesonMix, vectorMesonMix,
|
||||
ProbEta_c, ProbEta_b, pspin_mesonSSbar );
|
||||
ProbEta_c, ProbEta_b );
|
||||
|
||||
MaxMass=-350.0*GeV; // If there will be a particle with mass larger than Higgs the value must be changed.
|
||||
|
||||
@@ -497,21 +499,6 @@ void G4VLongitudinalStringDecay::SetDiquarkBreakProbability(G4double aValue)
|
||||
|
||||
//----------------------------------------------------------------------------------------------------------
|
||||
|
||||
void G4VLongitudinalStringDecay::SetVectorMesonProbability(G4double aValue)
|
||||
{
|
||||
if ( PastInitPhase ) {
|
||||
throw G4HadronicException(__FILE__, __LINE__,
|
||||
"G4VLongitudinalStringDecay::SetVectorMesonProbability after FragmentString() not allowed");
|
||||
} else {
|
||||
pspin_meson = aValue;
|
||||
delete hadronizer;
|
||||
hadronizer = new G4HadronBuilder( pspin_meson, pspin_barion, scalarMesonMix, vectorMesonMix,
|
||||
ProbEta_c, ProbEta_b , pspin_mesonSSbar );
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------------------------------
|
||||
|
||||
void G4VLongitudinalStringDecay::SetSpinThreeHalfBarionProbability(G4double aValue)
|
||||
{
|
||||
if ( PastInitPhase ) {
|
||||
@@ -520,8 +507,8 @@ void G4VLongitudinalStringDecay::SetSpinThreeHalfBarionProbability(G4double aVal
|
||||
} else {
|
||||
pspin_barion = aValue;
|
||||
delete hadronizer;
|
||||
hadronizer = new G4HadronBuilder( pspin_meson, pspin_barion, scalarMesonMix, vectorMesonMix,
|
||||
ProbEta_c, ProbEta_b, pspin_mesonSSbar );
|
||||
hadronizer = new G4HadronBuilder( pspin_meson, pspin_barion, scalarMesonMix, vectorMesonMix,
|
||||
ProbEta_c, ProbEta_b );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -543,8 +530,8 @@ void G4VLongitudinalStringDecay::SetScalarMesonMixings(std::vector<G4double> aVe
|
||||
scalarMesonMix[4] = aVector[4];
|
||||
scalarMesonMix[5] = aVector[5];
|
||||
delete hadronizer;
|
||||
hadronizer = new G4HadronBuilder( pspin_meson, pspin_barion, scalarMesonMix, vectorMesonMix,
|
||||
ProbEta_c, ProbEta_b, pspin_mesonSSbar );
|
||||
hadronizer = new G4HadronBuilder( pspin_meson, pspin_barion, scalarMesonMix, vectorMesonMix,
|
||||
ProbEta_c, ProbEta_b );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -566,8 +553,8 @@ void G4VLongitudinalStringDecay::SetVectorMesonMixings(std::vector<G4double> aVe
|
||||
vectorMesonMix[4] = aVector[4];
|
||||
vectorMesonMix[5] = aVector[5];
|
||||
delete hadronizer;
|
||||
hadronizer = new G4HadronBuilder( pspin_meson, pspin_barion, scalarMesonMix, vectorMesonMix,
|
||||
ProbEta_c, ProbEta_b, pspin_mesonSSbar );
|
||||
hadronizer = new G4HadronBuilder( pspin_meson, pspin_barion, scalarMesonMix, vectorMesonMix,
|
||||
ProbEta_c, ProbEta_b );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -690,13 +677,19 @@ void G4VLongitudinalStringDecay::SetMinMasses()
|
||||
}
|
||||
}
|
||||
//--------------------------
|
||||
G4int StrangeQ = 0;
|
||||
G4int StrangeAQ = 0;
|
||||
for (G4int i=0; i<5; i++)
|
||||
{ for (G4int j=0; j<5; j++)
|
||||
{
|
||||
{
|
||||
if( i >= 2 ) StrangeQ=1;
|
||||
for (G4int j=0; j<5; j++)
|
||||
{
|
||||
StrangeAQ = 0;
|
||||
if( j >= 2 ) StrangeAQ=1;
|
||||
Meson[i][j][0] = 100 * (std::max(i,j)+1) + 10 * (std::min(i,j)+1) + 1; // Scalar meson
|
||||
MesonWeight[i][j][0] = ( pspin_meson);
|
||||
MesonWeight[i][j][0] = ( pspin_meson[StrangeQ + StrangeAQ]);
|
||||
Meson[i][j][1] = 100 * (std::max(i,j)+1) + 10 * (std::min(i,j)+1) + 3; // Vector meson
|
||||
MesonWeight[i][j][1] = (1.-pspin_meson);
|
||||
MesonWeight[i][j][1] = (1.-pspin_meson[StrangeQ + StrangeAQ]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -704,65 +697,39 @@ void G4VLongitudinalStringDecay::SetMinMasses()
|
||||
//dd1 -> scalarMesonMix[0] * 111 + (1-scalarMesonMix[0]-scalarMesonMix[1]) * 221 + scalarMesonMix[1] * 331 (000)
|
||||
//dd1 -> Pi0 Eta Eta'
|
||||
|
||||
Meson[0][0][0] = 111; MesonWeight[0][0][0] = ( pspin_meson) * ( scalarMesonMix[0] ); // Pi0
|
||||
Meson[0][0][2] = 221; MesonWeight[0][0][3] = ( pspin_meson) * (1-scalarMesonMix[0]-scalarMesonMix[1]); // Eta
|
||||
Meson[0][0][3] = 331; MesonWeight[0][0][4] = ( pspin_meson) * ( scalarMesonMix[1]); // Eta'
|
||||
|
||||
/*
|
||||
//dd3 -> vectorMesonMix[0] * 113 + (1-vectorMesonMix[0]-vectorMesonMix[1]) * 223 + vectorMesonMix[1] * 333 (001)
|
||||
//dd3 -> rho_0 omega phi
|
||||
|
||||
Meson[0][0][1] = 113; MesonWeight[0][0][1] = (1.-pspin_meson) * ( vectorMesonMix[0] ); // Rho
|
||||
Meson[0][0][4] = 223; MesonWeight[0][0][4] = (1.-pspin_meson) * (1-vectorMesonMix[0]-vectorMesonMix[1]); // omega
|
||||
Meson[0][0][5] = 333; MesonWeight[0][0][5] = (1.-pspin_meson) * ( vectorMesonMix[1]); // phi
|
||||
*/
|
||||
Meson[0][0][0] = 111; MesonWeight[0][0][0] = ( pspin_meson[0]) * ( scalarMesonMix[0] ); // Pi0
|
||||
Meson[0][0][2] = 221; MesonWeight[0][0][3] = ( pspin_meson[0]) * (1-scalarMesonMix[0]-scalarMesonMix[1]); // Eta
|
||||
Meson[0][0][3] = 331; MesonWeight[0][0][4] = ( pspin_meson[0]) * ( scalarMesonMix[1]); // Eta'
|
||||
|
||||
//dd3 -> (1-vectorMesonMix[1] * 113 + vectorMesonMix[1] * 223 (001)
|
||||
//dd3 -> rho_0 omega
|
||||
|
||||
Meson[0][0][1] = 113; MesonWeight[0][0][1] = (1.-pspin_meson) * (1-vectorMesonMix[1]); // Rho
|
||||
Meson[0][0][4] = 223; MesonWeight[0][0][4] = (1.-pspin_meson) * ( vectorMesonMix[1]); // omega
|
||||
Meson[0][0][1] = 113; MesonWeight[0][0][1] = (1.-pspin_meson[0]) * (1-vectorMesonMix[1]); // Rho
|
||||
Meson[0][0][4] = 223; MesonWeight[0][0][4] = (1.-pspin_meson[0]) * ( vectorMesonMix[1]); // omega
|
||||
|
||||
//uu1 -> scalarMesonMix[0] * 111 + (1-scalarMesonMix[0]-scalarMesonMix[1]) * 221 + scalarMesonMix[1] * 331 (110)
|
||||
//uu1 -> Pi0 Eta Eta'
|
||||
|
||||
Meson[1][1][0] = 111; MesonWeight[1][1][0] = ( pspin_meson) * ( scalarMesonMix[0] ); // Pi0
|
||||
Meson[1][1][2] = 221; MesonWeight[1][1][2] = ( pspin_meson) * (1-scalarMesonMix[0]-scalarMesonMix[1]); // Eta
|
||||
Meson[1][1][3] = 331; MesonWeight[1][1][3] = ( pspin_meson) * ( scalarMesonMix[1]); // Eta'
|
||||
|
||||
/*
|
||||
//uu3 -> vectorMesonMix[0] * 113 + (1-vectorMesonMix[0]-vectorMesonMix[1]) * 223 + vectorMesonMix[1] * 333 (111)
|
||||
//uu3 -> rho_0 omega phi
|
||||
|
||||
Meson[1][1][1] = 113; MesonWeight[1][1][1] = (1.-pspin_meson) * ( vectorMesonMix[0] ); // Rho
|
||||
Meson[1][1][4] = 223; MesonWeight[1][1][4] = (1.-pspin_meson) * (1-vectorMesonMix[0]-vectorMesonMix[1]); // omega
|
||||
Meson[1][1][5] = 333; MesonWeight[1][1][5] = (1.-pspin_meson) * ( vectorMesonMix[1]); // phi
|
||||
*/
|
||||
Meson[1][1][0] = 111; MesonWeight[1][1][0] = ( pspin_meson[0]) * ( scalarMesonMix[0] ); // Pi0
|
||||
Meson[1][1][2] = 221; MesonWeight[1][1][2] = ( pspin_meson[0]) * (1-scalarMesonMix[0]-scalarMesonMix[1]); // Eta
|
||||
Meson[1][1][3] = 331; MesonWeight[1][1][3] = ( pspin_meson[0]) * ( scalarMesonMix[1]); // Eta'
|
||||
|
||||
//uu3 -> (1-vectorMesonMix[1]) * 113 + vectorMesonMix[1] * 223 (111)
|
||||
//uu3 -> rho_0 omega
|
||||
|
||||
Meson[1][1][1] = 113; MesonWeight[1][1][1] = (1.-pspin_meson) * (1-vectorMesonMix[1]); // Rho
|
||||
Meson[1][1][4] = 223; MesonWeight[1][1][4] = (1.-pspin_meson) * ( vectorMesonMix[1]); // omega
|
||||
Meson[1][1][1] = 113; MesonWeight[1][1][1] = (1.-pspin_meson[0]) * (1-vectorMesonMix[1]); // Rho
|
||||
Meson[1][1][4] = 223; MesonWeight[1][1][4] = (1.-pspin_meson[0]) * ( vectorMesonMix[1]); // omega
|
||||
|
||||
//ss1 -> (1-scalarMesonMix[5]) * 221 + scalarMesonMix[5] * 331 (220)
|
||||
//ss1 -> Eta Eta'
|
||||
|
||||
Meson[2][2][0] = 221; MesonWeight[2][2][0] = ( pspin_meson) * (1-scalarMesonMix[5] ); // Eta
|
||||
Meson[2][2][2] = 331; MesonWeight[2][2][2] = ( pspin_meson) * ( scalarMesonMix[5]); // Eta'
|
||||
|
||||
/*
|
||||
//ss3 -> (1-vectorMesonMix[5]) * 223 + vectorMesonMix[5] * 333 (221)
|
||||
//ss3 -> omega phi
|
||||
|
||||
Meson[2][2][1] = 223; MesonWeight[2][2][1] = (1.-pspin_meson) * (1-vectorMesonMix[5] ); // omega
|
||||
Meson[2][2][3] = 333; MesonWeight[2][2][3] = (1.-pspin_meson) * ( vectorMesonMix[5]); // phi
|
||||
*/
|
||||
Meson[2][2][0] = 221; MesonWeight[2][2][0] = ( pspin_meson[2]) * (1-scalarMesonMix[5] ); // Eta
|
||||
Meson[2][2][2] = 331; MesonWeight[2][2][2] = ( pspin_meson[2]) * ( scalarMesonMix[5]); // Eta'
|
||||
|
||||
//ss3 -> vectorMesonMix[5] * 333 (221)
|
||||
//ss3 -> phi
|
||||
|
||||
Meson[2][2][1] = 333; MesonWeight[2][2][3] = (1.-pspin_mesonSSbar) * ( vectorMesonMix[5]); // phi
|
||||
Meson[2][2][1] = 333; MesonWeight[2][2][1] = (1.-pspin_meson[2]) * ( vectorMesonMix[5]); // phi
|
||||
|
||||
//cc1 -> ProbEta_c /(1-pspin_meson) 441 (330) Probability of Eta_c
|
||||
//cc3 -> (1-ProbEta_c)/( pspin_meson) 443 (331) Probability of J/Psi
|
||||
@@ -770,12 +737,12 @@ void G4VLongitudinalStringDecay::SetMinMasses()
|
||||
//bb1 -> ProbEta_b /pspin_meson 551 (440) Probability of Eta_b
|
||||
//bb3 -> (1-ProbEta_b)/pspin_meson 553 (441) Probability of Upsilon
|
||||
|
||||
if ( pspin_meson != 0. ) {
|
||||
Meson[3][3][0] *= ( ProbEta_c)/( pspin_meson); // Eta_c
|
||||
Meson[3][3][1] *= (1.0-ProbEta_c)/(1.-pspin_meson); // J/Psi
|
||||
if ( pspin_meson[2] != 0. ) {
|
||||
Meson[3][3][0] *= ( ProbEta_c)/( pspin_meson[2]); // Eta_c
|
||||
Meson[3][3][1] *= (1.0-ProbEta_c)/(1.-pspin_meson[2]); // J/Psi
|
||||
|
||||
Meson[4][4][0] *= ( ProbEta_b)/( pspin_meson); // Eta_b
|
||||
Meson[4][4][1] *= (1.0-ProbEta_b)/(1.-pspin_meson); // Upsilon
|
||||
Meson[4][4][0] *= ( ProbEta_b)/( pspin_meson[2]); // Eta_b
|
||||
Meson[4][4][1] *= (1.0-ProbEta_b)/(1.-pspin_meson[2]); // Upsilon
|
||||
}
|
||||
|
||||
//--------------------------
|
||||
|
||||
Reference in New Issue
Block a user