Import Geant4 10.7.0 source tree
This commit is contained in:
+271
-132
@@ -72,7 +72,7 @@
|
||||
//============================================================================
|
||||
|
||||
//#define debugFTFexictation
|
||||
|
||||
//#define debug_heavyHadrons
|
||||
|
||||
//============================================================================
|
||||
|
||||
@@ -292,13 +292,13 @@ G4bool G4DiffractiveExcitation::ExciteParticipants( G4VSplitableHadron* proje
|
||||
common.TargetNonDiffStateMinMass2 = sqr( common.TargetNonDiffStateMinMass );
|
||||
// Choose between diffraction and non-diffraction process
|
||||
if ( G4UniformRand() < common.ProbOfDiffraction ) {
|
||||
|
||||
|
||||
returnResult = ExciteParticipants_doDiffraction( projectile, target, theParameters, common );
|
||||
|
||||
|
||||
} else {
|
||||
|
||||
|
||||
returnResult = ExciteParticipants_doNonDiffraction( projectile, target, theParameters, common );
|
||||
|
||||
|
||||
}
|
||||
if ( returnResult ) {
|
||||
common.Pprojectile += common.Qmomentum;
|
||||
@@ -343,6 +343,17 @@ ExciteParticipants_doChargeExchange( G4VSplitableHadron* projectile,
|
||||
#ifdef debugFTFexictation
|
||||
G4cout << "Q exchange --------------------------" << G4endl;
|
||||
#endif
|
||||
|
||||
// The target hadron is always a nucleon (i.e. either a proton or a neutron,
|
||||
// never an antinucleon), therefore only a quark (not an antiquark) can be
|
||||
// exchanged between the projectile hadron and the target hadron (otherwise
|
||||
// we could get a quark-quark-antiquark system which cannot be a bound state).
|
||||
// This implies that any projectile meson or anti-meson - given that it has
|
||||
// a constituent quark in all cases - can have charge exchange with a target
|
||||
// hadron. Instead, any projectile anti-baryon can never have charge exchange
|
||||
// with a target hadron (because it has only constituent anti-quarks);
|
||||
// projectile baryons, instead can have charge exchange with a target hadron.
|
||||
|
||||
G4int NewProjCode = 0, NewTargCode = 0, ProjQ1 = 0, ProjQ2 = 0, ProjQ3 = 0;
|
||||
// Projectile unpacking
|
||||
if ( common.absProjectilePDGcode < 1000 ) { // projectile is meson
|
||||
@@ -357,7 +368,7 @@ ExciteParticipants_doChargeExchange( G4VSplitableHadron* projectile,
|
||||
G4cout << "Proj Quarks " << ProjQ1 << " " << ProjQ2 << " " << ProjQ3 << G4endl
|
||||
<< "Targ Quarks " << TargQ1 << " " << TargQ2 << " " << TargQ3 << G4endl;
|
||||
#endif
|
||||
|
||||
|
||||
// Sampling of exchanged quarks
|
||||
G4int ProjExchangeQ = 0, TargExchangeQ = 0;
|
||||
if ( common.absProjectilePDGcode < 1000 ) { // projectile is meson
|
||||
@@ -406,20 +417,24 @@ ExciteParticipants_doChargeExchange( G4VSplitableHadron* projectile,
|
||||
// Determination of a new projectile ID which satisfies energy-momentum conservation
|
||||
G4double Ksi = G4UniformRand();
|
||||
if ( aProjQ1 == aProjQ2 ) {
|
||||
if ( aProjQ1 != 3 ) {
|
||||
if ( aProjQ1 < 3 ) {
|
||||
NewProjCode = 111; // Pi0-meson
|
||||
if ( Ksi < 0.5 ) {
|
||||
NewProjCode = 221; // Eta -meson
|
||||
NewProjCode = 221; // Eta-meson
|
||||
if ( Ksi < 0.25 ) {
|
||||
NewProjCode = 331; // Eta'-meson
|
||||
}
|
||||
}
|
||||
} else {
|
||||
NewProjCode = 221; // Eta -meson
|
||||
} else if ( aProjQ1 == 3 ) {
|
||||
NewProjCode = 221; // Eta-meson
|
||||
if ( Ksi < 0.5 ) {
|
||||
NewProjCode = 331; // Eta'-meson
|
||||
}
|
||||
}
|
||||
} else if ( aProjQ1 == 4 ) {
|
||||
NewProjCode = 441; // Eta_c
|
||||
} else if ( aProjQ1 == 5 ) {
|
||||
NewProjCode = 553; // Upsilon
|
||||
}
|
||||
} else {
|
||||
if ( aProjQ1 > aProjQ2 ) {
|
||||
NewProjCode = aProjQ1*100 + aProjQ2*10 + 1;
|
||||
@@ -430,25 +445,47 @@ ExciteParticipants_doChargeExchange( G4VSplitableHadron* projectile,
|
||||
#ifdef debugFTFexictation
|
||||
G4cout << "NewProjCode " << NewProjCode << G4endl;
|
||||
#endif
|
||||
// Decide (with 50% probability) whether the projectile hadrons is excited,
|
||||
// but not in the case of charmed and bottom hadrons (because in Geant4
|
||||
// there are no excited charmed and bottom states).
|
||||
ProjExcited = false;
|
||||
if ( G4UniformRand() < 0.5 ) {
|
||||
if ( aProjQ1 <= 3 && aProjQ2 <= 3 && G4UniformRand() < 0.5 ) {
|
||||
NewProjCode += 2; // Excited meson (J=1 -> 2*J+1=2+1=3, last digit of the PDG code)
|
||||
ProjExcited = true;
|
||||
}
|
||||
|
||||
// So far we have used the absolute values of the PDG codes of the two constituent quarks:
|
||||
// now look at their signed values to set properly the signed of the meson's PDG code.
|
||||
G4int value = ProjQ1, absValue = aProjQ1, Qquarks = 0;
|
||||
for ( G4int iQuark = 0; iQuark < 2; iQuark++ ) {
|
||||
if ( iQuark == 1 ) {
|
||||
G4int value = ProjQ1, absValue = aProjQ1, Qquarks = 0;
|
||||
for ( G4int iQ = 0; iQ < 2; ++iQ ) { // 0 : first quark; 1 : second quark
|
||||
if ( iQ == 1 ) {
|
||||
value = ProjQ2; absValue = aProjQ2;
|
||||
}
|
||||
if ( absValue == 2 ) {
|
||||
Qquarks += value; // u or ubar : u-quark is positively charged +2 (e/3 unit)
|
||||
if ( absValue == 2 || absValue == 4 ) { // u or c
|
||||
Qquarks += 2*value/absValue; // u, c : positively charged +2 (e/3 unit)
|
||||
} else {
|
||||
Qquarks -= value/absValue; // d or dbar or s or sbar : d- or s-quark is negatively charged -1 (e/3 unit)
|
||||
Qquarks -= value/absValue; // d, s, b : negatively charged -1 (e/3 unit)
|
||||
}
|
||||
}
|
||||
if ( Qquarks < 0 ) NewProjCode *= -1;
|
||||
// If Qquarks is positive, the sign of NewProjCode is fine.
|
||||
// If Qquarks is negative, then the sign of NewProjCode needs to be reversed.
|
||||
// If Qquarks is zero, then we need to distinguish between 3 cases:
|
||||
// 1. If aProjQ1 and aProjQ2 are the same, then the sign of NewProjCode is fine
|
||||
// (because the antiparticle is the same as the particle, e.g. eta, eta').
|
||||
// 2. If aProjQ1 and aProjQ2 are not the same, given that Qquarks is zero,
|
||||
// we have only two possibilities:
|
||||
// a. aProjQ1 and aProjQ2 are two different down-type quarks, i.e.
|
||||
// (s,d) or (b,d), or (b,s). In this case, the sign of NewProjCode
|
||||
// is fine (because the heaviest of the two down-type quarks has
|
||||
// to be anti-quark belonging to the initial projectile, which
|
||||
// implies a meson with positive PDG code, e.g. B0 (bbar,d), Bs (bbar,s).
|
||||
// b. aProjQ1 and aProjQ2 are two different up-type quarks, i.e. (u,c).
|
||||
// The heaviest of the two (c) has to be an anti-quark (cbar) left
|
||||
// in the projectile, therefore the sign of NewProjCode needs to be
|
||||
// reverse: 421 -> -421 anti_D0 (cbar,u)
|
||||
if ( Qquarks < 0 || ( Qquarks == 0 && aProjQ1 != aProjQ2 && aProjQ1%2 == 0 ) ) {
|
||||
NewProjCode *= -1;
|
||||
}
|
||||
#ifdef debugFTFexictation
|
||||
G4cout << "NewProjCode +2 or 0 " << NewProjCode << G4endl;
|
||||
G4cout<<"+++++++++++++++++++++++++++++++++++++++"<<G4endl;
|
||||
@@ -477,24 +514,62 @@ ExciteParticipants_doChargeExchange( G4VSplitableHadron* projectile,
|
||||
G4cout << "New TrQ " << TargQ1 << " " << TargQ2 << " " << TargQ3 << G4endl
|
||||
<< "NewTargCode " << NewTargCode << G4endl;
|
||||
#endif
|
||||
if ( TargQ1 != TargQ2 && TargQ1 != TargQ3 && TargQ2 != TargQ3 ) { // Lambda or Sigma0 ?
|
||||
if ( G4UniformRand() < 0.5 ) {
|
||||
NewTargCode += 2;
|
||||
} else if ( G4UniformRand() < 0.75 ) {
|
||||
NewTargCode = 3122;
|
||||
|
||||
// If the target has not heavy (charm or bottom) constituent quark,
|
||||
// see whether a Delta isobar can be created.
|
||||
if ( TargQ1 <= 3 && TargQ2 <= 3 && TargQ3 <= 3 ) {
|
||||
if ( TargQ1 != TargQ2 && TargQ1 != TargQ3 && TargQ2 != TargQ3 ) { // Lambda or Sigma0 ?
|
||||
if ( G4UniformRand() < 0.5 ) {
|
||||
NewTargCode += 2;
|
||||
} else if ( G4UniformRand() < 0.75 ) {
|
||||
NewTargCode = 3122; // Lambda
|
||||
}
|
||||
} else if ( TargQ1 == TargQ2 && TargQ1 == TargQ3 ) {
|
||||
NewTargCode += 2; ProjExcited = true; // Create Delta isobar
|
||||
} else if ( target->GetDefinition()->GetPDGiIsospin() == 3 ) { // Delta was the target
|
||||
if ( G4UniformRand() > DeltaProbAtQuarkExchange ) {
|
||||
NewTargCode += 2; ProjExcited = true;
|
||||
}
|
||||
} else if ( ! ProjExcited &&
|
||||
G4UniformRand() < DeltaProbAtQuarkExchange && // Nucleon was the target
|
||||
common.SqrtS > common.M0projectile + // Delta mass
|
||||
G4ParticleTable::GetParticleTable()->FindParticle( 2224 )->GetPDGMass() ) {
|
||||
NewTargCode += 2; // Create Delta isobar
|
||||
}
|
||||
} else if ( TargQ1 == TargQ2 && TargQ1 == TargQ3 ) {
|
||||
NewTargCode += 2; ProjExcited = true; // Create Delta isobar
|
||||
} else if ( target->GetDefinition()->GetPDGiIsospin() == 3 ) { // Delta was the target
|
||||
if ( G4UniformRand() > DeltaProbAtQuarkExchange ) {
|
||||
NewTargCode += 2; ProjExcited = true;
|
||||
}
|
||||
} else if ( ! ProjExcited &&
|
||||
G4UniformRand() < DeltaProbAtQuarkExchange && // Nucleon was the target
|
||||
common.SqrtS > common.M0projectile + // Delta mass
|
||||
G4ParticleTable::GetParticleTable()->FindParticle( 2224 )->GetPDGMass() ) {
|
||||
NewTargCode += 2; // Create Delta isobar
|
||||
}
|
||||
|
||||
// Protection against:
|
||||
// - Lambda* (i.e. excited Lambda state) NOT existing in PDG , -> Lambda
|
||||
// - Sigma* (i.e. excited Sigma hyperon states) NOT existing in Geant4 -> Sigma
|
||||
// - Xi* (i.e. excited Xi hyperon states) NOT existing in Geant4 -> Xi
|
||||
if ( NewTargCode == 3124 || // Lambda* NOT existing in PDG !
|
||||
NewTargCode == 3224 || // Sigma*+ NOT existing in Geant4
|
||||
NewTargCode == 3214 || // Sigma*0 NOT existing in Geant4
|
||||
NewTargCode == 3114 || // Sigma*- NOT existing in Geant4
|
||||
NewTargCode == 3324 || // Xi*0 NOT existing in Geant4
|
||||
NewTargCode == 3314 ) { // Xi*- NOT existing in Geant4
|
||||
//G4cout << "G4DiffractiveExcitation::ExciteParticipants_doChargeExchange INEXISTING TARGET PDGcode="
|
||||
// << NewTargCode << G4endl;
|
||||
NewTargCode -= 2; // Corresponding ground-state hyperon
|
||||
}
|
||||
|
||||
// Special treatment for charmed and bottom baryons : in Geant4 there are no Xi_c' and Xi_b'
|
||||
// so we need to transform them by hand to Xi_c and Xi_b, respectively.
|
||||
#ifdef debug_heavyHadrons
|
||||
G4int initialNewTargCode = NewTargCode;
|
||||
#endif
|
||||
if ( NewTargCode == 4322 ) NewTargCode = 4232; // Xi_c'+ -> Xi_c+
|
||||
else if ( NewTargCode == 4312 ) NewTargCode = 4132; // Xi_c'0 -> Xi_c0
|
||||
else if ( NewTargCode == 5312 ) NewTargCode = 5132; // Xi_b'- -> Xi_b-
|
||||
else if ( NewTargCode == 5322 ) NewTargCode = 5232; // Xi_b'0 -> Xi_b0
|
||||
#ifdef debug_heavyHadrons
|
||||
if ( NewTargCode != initialNewTargCode ) {
|
||||
G4cout << "G4DiffractiveExcitation::ExciteParticipants_doChargeExchange : forcing (inexisting in G4)" << G4endl
|
||||
<< "\t target heavy baryon with pdgCode=" << initialNewTargCode
|
||||
<< " into pdgCode=" << NewTargCode << G4endl;
|
||||
}
|
||||
#endif
|
||||
|
||||
TestParticle = G4ParticleTable::GetParticleTable()->FindParticle( NewTargCode );
|
||||
if ( ! TestParticle ) continue;
|
||||
#ifdef debugFTFexictation
|
||||
@@ -530,6 +605,11 @@ ExciteParticipants_doChargeExchange( G4VSplitableHadron* projectile,
|
||||
|
||||
} else { // of the if ( common.absProjectilePDGcode < 1000 ) ; the projectile is baryon now
|
||||
|
||||
// If it is a projectile anti-baryon, no quark exchange is possible with a target hadron,
|
||||
// therefore returns immediately 1 (which means "successfully completed, but the work
|
||||
// needs to be continued").
|
||||
if ( common.ProjectilePDGcode < 0 ) return 1;
|
||||
|
||||
// Choose randomly, with equal probability, whether to consider the quarks of the
|
||||
// projectile or target hadron for selecting the flavour of the exchanged quark.
|
||||
G4bool isProjectileExchangedQ = false;
|
||||
@@ -567,9 +647,9 @@ ExciteParticipants_doChargeExchange( G4VSplitableHadron* projectile,
|
||||
if ( exchangedQ != otherSecondQ || G4UniformRand() < probSame ) {
|
||||
otherExchangedQ = otherSecondQ; otherSecondQ = exchangedQ; exchangedQ = otherExchangedQ;
|
||||
} else {
|
||||
//ALB if ( exchangedQ != otherThirdQ || G4UniformRand() < probSame ) {
|
||||
otherExchangedQ = otherThirdQ; otherThirdQ = exchangedQ; exchangedQ = otherExchangedQ;
|
||||
//ALB }
|
||||
if ( exchangedQ != otherThirdQ || G4UniformRand() < probSame ) {
|
||||
otherExchangedQ = otherThirdQ; otherThirdQ = exchangedQ; exchangedQ = otherExchangedQ;
|
||||
}
|
||||
}
|
||||
}
|
||||
} while ( otherExchangedQ == 0 && ++count < MaxCount );
|
||||
@@ -601,6 +681,9 @@ ExciteParticipants_doChargeExchange( G4VSplitableHadron* projectile,
|
||||
// then decide whether the new target hadron is a Delta particle.
|
||||
// Notice that a Delta particle has the last PDG digit "4" (because its spin is 3/2),
|
||||
// whereas a nucleon has "2" (because its spin is 1/2).
|
||||
// If the new projectile hadron or the new target hadron has a heavy (c or b)
|
||||
// constituent quark, then skip this part (because Geant4 does not have
|
||||
// excited charm and bottom hadrons).
|
||||
for ( G4int iHadron = 0; iHadron < 2; iHadron++ ) {
|
||||
// First projectile hadron, then target hadron
|
||||
G4int codeQ1 = ProjQ1, codeQ2 = ProjQ2, codeQ3 = ProjQ3, newHadCode = NewProjCode;
|
||||
@@ -611,6 +694,7 @@ ExciteParticipants_doChargeExchange( G4VSplitableHadron* projectile,
|
||||
massConstraint = common.M0projectile;
|
||||
isHadronADelta = ( target->GetDefinition()->GetPDGiIsospin() == 3 );
|
||||
}
|
||||
if ( codeQ1 > 3 || codeQ2 > 3 || codeQ3 > 3 ) continue; // No excited charm or bottom states in Geant4
|
||||
if ( codeQ1 == codeQ2 && codeQ1 == codeQ3 ) { // The three quarks are the same
|
||||
newHadCode += 2; // Delta++ (uuu) or Delta- (ddd) : spin 3/2, last PDG digit = 4 (so +2 wrt p or n)
|
||||
} else if ( isHadronADelta ) { // Hadron (projectile or target) was Delta
|
||||
@@ -627,7 +711,7 @@ ExciteParticipants_doChargeExchange( G4VSplitableHadron* projectile,
|
||||
} else {
|
||||
newHadCode += 0; // No delta (so the last PDG digit remains 2)
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( iHadron == 0 ) { // Projectile hadron
|
||||
NewProjCode = newHadCode;
|
||||
} else { // Target hadron
|
||||
@@ -638,8 +722,58 @@ ExciteParticipants_doChargeExchange( G4VSplitableHadron* projectile,
|
||||
G4cout << "NewProjCode NewTargCode " << NewProjCode << " " << NewTargCode << G4endl;
|
||||
#endif
|
||||
|
||||
if ( common.absProjectilePDGcode == NewProjCode && common.absTargetPDGcode == NewTargCode ) {
|
||||
} // Nothing was changed! It is not right!?
|
||||
// Protection against:
|
||||
// - Lambda* (i.e. excited Lambda state) NOT existing in PDG , -> Lambda
|
||||
// - Sigma* (i.e. excited Sigma hyperon states) NOT existing in Geant4 -> Sigma
|
||||
// - Xi* (i.e. excited Xi hyperon states) NOT existing in Geant4 -> Xi
|
||||
if ( NewProjCode == 3124 || // Lambda* NOT existing in PDG !
|
||||
NewProjCode == 3224 || // Sigma*+ NOT existing in Geant4
|
||||
NewProjCode == 3214 || // Sigma*0 NOT existing in Geant4
|
||||
NewProjCode == 3114 || // Sigma*- NOT existing in Geant4
|
||||
NewProjCode == 3324 || // Xi*0 NOT existing in Geant4
|
||||
NewProjCode == 3314 ) { // Xi*- NOT existing in Geant4
|
||||
//G4cout << "G4DiffractiveExcitation::ExciteParticipants_doChargeExchange INEXISTING PROJECTILE PDGcode="
|
||||
// << NewProjCode << G4endl;
|
||||
NewProjCode -= 2; // Corresponding ground-state hyperon
|
||||
}
|
||||
if ( NewTargCode == 3124 || // Lambda* NOT existing in PDG !
|
||||
NewTargCode == 3224 || // Sigma*+ NOT existing in Geant4
|
||||
NewTargCode == 3214 || // Sigma*0 NOT existing in Geant4
|
||||
NewTargCode == 3114 || // Sigma*- NOT existing in Geant4
|
||||
NewTargCode == 3324 || // Xi*0 NOT existing in Geant4
|
||||
NewTargCode == 3314 ) { // Xi*- NOT existing in Geant4
|
||||
//G4cout << "G4DiffractiveExcitation::ExciteParticipants_doChargeExchange INEXISTING TARGET PDGcode="
|
||||
// << NewTargCode << G4endl;
|
||||
NewTargCode -= 2; // Corresponding ground-state hyperon
|
||||
}
|
||||
|
||||
// Special treatment for charmed and bottom baryons : in Geant4 there are no Xi_c' and Xi_b'
|
||||
// so we need to transform them by hand to the, respectively, Xi_c and Xi_b.
|
||||
#ifdef debug_heavyHadrons
|
||||
G4int initialNewProjCode = NewProjCode, initialNewTargCode = NewTargCode;
|
||||
#endif
|
||||
if ( NewProjCode == 4322 ) NewProjCode = 4232; // Xi_c'+ -> Xi_c+
|
||||
else if ( NewProjCode == 4312 ) NewProjCode = 4132; // Xi_c'0 -> Xi_c0
|
||||
else if ( NewProjCode == 5312 ) NewProjCode = 5132; // Xi_b'- -> Xi_b-
|
||||
else if ( NewProjCode == 5322 ) NewProjCode = 5232; // Xi_b'0 -> Xi_b0
|
||||
if ( NewTargCode == 4322 ) NewTargCode = 4232; // Xi_c'+ -> Xi_c+
|
||||
else if ( NewTargCode == 4312 ) NewTargCode = 4132; // Xi_c'0 -> Xi_c0
|
||||
else if ( NewTargCode == 5312 ) NewTargCode = 5132; // Xi_b'- -> Xi_b-
|
||||
else if ( NewTargCode == 5322 ) NewTargCode = 5232; // Xi_b'0 -> Xi_b0
|
||||
#ifdef debug_heavyHadrons
|
||||
if ( NewProjCode != initialNewProjCode || NewTargCode != initialNewTargCode ) {
|
||||
G4cout << "G4DiffractiveExcitation::ExciteParticipants_doChargeExchange : forcing (inexisting in G4)" << G4endl
|
||||
<< "\t heavy baryon into an existing one:" << G4endl;
|
||||
if ( NewProjCode != initialNewProjCode ) {
|
||||
G4cout << "\t \t projectile baryon with pdgCode=" << initialNewProjCode
|
||||
<< " into pdgCode=" << NewProjCode << G4endl;
|
||||
}
|
||||
if ( NewTargCode != initialNewTargCode ) {
|
||||
G4cout << "\t \t target baryon with pdgCode=" << initialNewTargCode
|
||||
<< " into pdgCode=" << NewTargCode << G4endl;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// Sampling of the masses of the projectile and target nucleons.
|
||||
// Because of energy conservation, the ordering of the sampling matters:
|
||||
@@ -734,7 +868,7 @@ ExciteParticipants_doChargeExchange( G4VSplitableHadron* projectile,
|
||||
<< common.SqrtS << G4endl
|
||||
<< "PZcms2 after the change " << common.PZcms2 << G4endl << G4endl;
|
||||
#endif
|
||||
if ( common.PZcms2 < 0.0 ) return returnCode; // It can be if energy is not sufficient for Delta
|
||||
if ( common.PZcms2 < 0.0 ) return returnCode; // It can be if energy is not sufficient for Delta;
|
||||
// unsuccessfully ended, nothing else can be done
|
||||
projectile->SetDefinition( G4ParticleTable::GetParticleTable()->FindParticle( NewProjCode ) );
|
||||
target->SetDefinition( G4ParticleTable::GetParticleTable()->FindParticle( NewTargCode ) );
|
||||
@@ -818,6 +952,15 @@ ExciteParticipants_doDiffraction( G4VSplitableHadron* projectile, G4VSplitableHa
|
||||
common.TargMassT = common.TargetDiffStateMinMass;
|
||||
}
|
||||
|
||||
// Check whether the interaction is possible
|
||||
if ( common.SqrtS < common.ProjMassT + common.TargMassT ) return false;
|
||||
|
||||
common.PZcms2 = ( sqr( common.S ) + sqr( common.ProjMassT2 ) + sqr( common.TargMassT2 )
|
||||
- 2.0 * ( common.S * ( common.ProjMassT2 + common.TargMassT2 )
|
||||
+ common.ProjMassT2 * common.TargMassT2 ) ) / 4.0 / common.S;
|
||||
if ( common.PZcms2 < 0.0 ) return false;
|
||||
common.maxPtSquare = common.PZcms2;
|
||||
|
||||
G4double DiffrAveragePt2 = theParameters->GetAvaragePt2ofElasticScattering()*1.2;
|
||||
G4bool loopCondition = true;
|
||||
G4int whilecount = 0;
|
||||
@@ -829,15 +972,6 @@ ExciteParticipants_doDiffraction( G4VSplitableHadron* projectile, G4VSplitableHa
|
||||
return false; // Ignore this interaction
|
||||
};
|
||||
|
||||
// Check that the interaction is possible
|
||||
if ( common.SqrtS < common.ProjMassT + common.TargMassT ) return false;
|
||||
|
||||
common.PZcms2 = ( sqr( common.S ) + sqr( common.ProjMassT2 ) + sqr( common.TargMassT2 )
|
||||
- 2.0 * ( common.S * ( common.ProjMassT2 + common.TargMassT2 )
|
||||
+ common.ProjMassT2 * common.TargMassT2 ) ) / 4.0 / common.S;
|
||||
if ( common.PZcms2 < 0.0 ) return false;
|
||||
|
||||
common.maxPtSquare = common.PZcms2;
|
||||
common.Qmomentum = G4LorentzVector( GaussianPt( DiffrAveragePt2, common.maxPtSquare ), 0 );
|
||||
common.Pt2 = G4ThreeVector( common.Qmomentum.vect() ).mag2();
|
||||
if ( isProjectileDiffraction ) { // projectile diffraction
|
||||
@@ -910,6 +1044,19 @@ ExciteParticipants_doNonDiffraction( G4VSplitableHadron* projectile,
|
||||
#ifdef debugFTFexictation
|
||||
G4cout << "Non-diffraction process" << G4endl;
|
||||
#endif
|
||||
|
||||
// Check whether the interaction is possible
|
||||
common.ProjMassT2 = common.ProjectileNonDiffStateMinMass2;
|
||||
common.ProjMassT = common.ProjectileNonDiffStateMinMass;
|
||||
common.TargMassT2 = common.TargetNonDiffStateMinMass2;
|
||||
common.TargMassT = common.TargetNonDiffStateMinMass;
|
||||
if ( common.SqrtS < common.ProjMassT + common.TargMassT ) return false;
|
||||
|
||||
common.PZcms2 = ( sqr( common.S ) + sqr( common.ProjMassT2 ) + sqr( common.TargMassT2 )
|
||||
- 2.0 * ( common.S * ( common.ProjMassT2 + common.TargMassT2 )
|
||||
+ common.ProjMassT2 * common.TargMassT2 ) ) / 4.0 / common.S;
|
||||
common.maxPtSquare = common.PZcms2;
|
||||
|
||||
G4int whilecount = 0;
|
||||
do { // Generate pt and masses
|
||||
|
||||
@@ -919,19 +1066,6 @@ ExciteParticipants_doNonDiffraction( G4VSplitableHadron* projectile,
|
||||
return false; // Ignore this interaction
|
||||
};
|
||||
|
||||
// Check that the interaction is possible
|
||||
common.ProjMassT2 = common.ProjectileNonDiffStateMinMass2;
|
||||
common.ProjMassT = common.ProjectileNonDiffStateMinMass;
|
||||
common.TargMassT2 = common.TargetNonDiffStateMinMass2;
|
||||
common.TargMassT = common.TargetNonDiffStateMinMass;
|
||||
if ( common.SqrtS < common.ProjMassT + common.TargMassT ) return false;
|
||||
|
||||
common.PZcms2 = ( sqr( common.S ) + sqr( common.ProjMassT2 ) + sqr( common.TargMassT2 )
|
||||
- 2.0 * ( common.S * ( common.ProjMassT2 + common.TargMassT2 )
|
||||
+ common.ProjMassT2 * common.TargMassT2 ) ) / 4.0 / common.S;
|
||||
if ( common.PZcms2 < 0.0 ) return false;
|
||||
|
||||
common.maxPtSquare = common.PZcms2;
|
||||
common.Qmomentum = G4LorentzVector( GaussianPt( theParameters->GetAveragePt2(),
|
||||
common.maxPtSquare ), 0 );
|
||||
common.Pt2 = G4ThreeVector( common.Qmomentum.vect() ).mag2();
|
||||
@@ -951,16 +1085,31 @@ ExciteParticipants_doNonDiffraction( G4VSplitableHadron* projectile,
|
||||
common.PMinusMax = common.SqrtS - common.TargMassT;
|
||||
common.TPlusMin = std::sqrt( common.TargMassT2 + common.PZcms2 ) - common.PZcms;
|
||||
common.TPlusMax = common.SqrtS - common.ProjMassT;
|
||||
if ( G4UniformRand() < theParameters->GetProbLogDistrPrD() ) {
|
||||
common.PMinusNew = ChooseP( common.PMinusMin, common.PMinusMax );
|
||||
|
||||
if ( G4UniformRand() <= 0.5 ) { // Random choice projectile or target sampling
|
||||
if ( G4UniformRand() < theParameters->GetProbLogDistrPrD() ) {
|
||||
common.PMinusNew = ChooseP( common.PMinusMin, common.PMinusMax );
|
||||
} else {
|
||||
common.PMinusNew = ( common.PMinusMax - common.PMinusMin )*G4UniformRand() + common.PMinusMin;
|
||||
}
|
||||
if ( G4UniformRand() < theParameters->GetProbLogDistr() ) {
|
||||
common.TPlusNew = ChooseP( common.TPlusMin, common.TPlusMax );
|
||||
} else {
|
||||
common.TPlusNew = ( common.TPlusMax - common.TPlusMin )*G4UniformRand() + common.TPlusMin;
|
||||
}
|
||||
} else {
|
||||
common.PMinusNew = ( common.PMinusMax - common.PMinusMin )*G4UniformRand() + common.PMinusMin;
|
||||
if ( G4UniformRand() < theParameters->GetProbLogDistr() ) {
|
||||
common.TPlusNew = ChooseP( common.TPlusMin, common.TPlusMax );
|
||||
} else {
|
||||
common.TPlusNew = ( common.TPlusMax - common.TPlusMin )*G4UniformRand() + common.TPlusMin;
|
||||
}
|
||||
if ( G4UniformRand() < theParameters->GetProbLogDistrPrD() ) {
|
||||
common.PMinusNew = ChooseP( common.PMinusMin, common.PMinusMax );
|
||||
} else {
|
||||
common.PMinusNew = ( common.PMinusMax - common.PMinusMin )*G4UniformRand() + common.PMinusMin;
|
||||
}
|
||||
}
|
||||
if ( G4UniformRand() < theParameters->GetProbLogDistr() ) {
|
||||
common.TPlusNew = ChooseP( common.TPlusMin, common.TPlusMax );
|
||||
} else {
|
||||
common.TPlusNew = ( common.TPlusMax - common.TPlusMin )*G4UniformRand() + common.TPlusMin;
|
||||
}
|
||||
|
||||
common.Qminus = common.PMinusNew - common.Pprojectile.minus();
|
||||
common.Qplus = -( common.TPlusNew - common.Ptarget.plus() );
|
||||
common.Qmomentum.setPz( (common.Qplus - common.Qminus)/2.0 );
|
||||
@@ -1068,13 +1217,15 @@ void G4DiffractiveExcitation::CreateStrings( G4VSplitableHadron* hadron,
|
||||
//x2 = 2.0 - x1 - x3;
|
||||
|
||||
G4double Mass_startQ = 650.0*MeV;
|
||||
if ( PDGcode_startQ < 3 ) Mass_startQ = 325.0*MeV;
|
||||
if ( PDGcode_startQ == 3 ) Mass_startQ = 500.0*MeV;
|
||||
if ( PDGcode_startQ == 4 ) Mass_startQ = 1600.0*MeV;
|
||||
if ( PDGcode_startQ < 3 ) Mass_startQ = 325.0*MeV; // For constituent up or down quark
|
||||
if ( PDGcode_startQ == 3 ) Mass_startQ = 500.0*MeV; // For constituent strange quark
|
||||
if ( PDGcode_startQ == 4 ) Mass_startQ = 1600.0*MeV; // For constituent charm quark
|
||||
if ( PDGcode_startQ == 5 ) Mass_startQ = 4500.0*MeV; // For constituent bottom quark
|
||||
G4double Mass_endQ = 650.0*MeV;
|
||||
if ( PDGcode_endQ < 3 ) Mass_endQ = 325.0*MeV;
|
||||
if ( PDGcode_endQ == 3 ) Mass_endQ = 500.0*MeV;
|
||||
if ( PDGcode_endQ == 4 ) Mass_endQ = 1600.0*MeV;
|
||||
if ( PDGcode_endQ < 3 ) Mass_endQ = 325.0*MeV; // For constituent up or down quark
|
||||
if ( PDGcode_endQ == 3 ) Mass_endQ = 500.0*MeV; // For constituent strange quark
|
||||
if ( PDGcode_endQ == 4 ) Mass_endQ = 1600.0*MeV; // For constituent charm quark
|
||||
if ( PDGcode_endQ == 5 ) Mass_endQ = 4500.0*MeV; // For constituent bottom quark
|
||||
|
||||
G4double P2_1 = W2*x1*x1/4.0 - Mass_endQ*Mass_endQ;
|
||||
G4double P2_3 = W2*x3*x3/4.0 - Mass_startQ*Mass_startQ;
|
||||
@@ -1173,7 +1324,7 @@ void G4DiffractiveExcitation::CreateStrings( G4VSplitableHadron* hadron,
|
||||
//G4cout << "Defin " << hadron->GetDefinition()->GetPDGEncoding()<< G4endl;
|
||||
|
||||
//G4int absPDGcode = std::abs( hadron->GetDefinition()->GetPDGEncoding() );
|
||||
G4int absPDGcode = 1500; // 23 Dec
|
||||
G4int absPDGcode = 1500;
|
||||
if ( start->GetDefinition()->GetParticleSubType() == "quark" &&
|
||||
end->GetDefinition()->GetParticleSubType() == "quark" ) {
|
||||
absPDGcode = 110;
|
||||
@@ -1183,13 +1334,11 @@ void G4DiffractiveExcitation::CreateStrings( G4VSplitableHadron* hadron,
|
||||
if ( absPDGcode < 1000 ) { // meson
|
||||
if ( isProjectile ) { // Projectile
|
||||
if ( end->GetDefinition()->GetPDGEncoding() > 0 ) { // A quark on the end
|
||||
|
||||
FirstString = new G4ExcitedString( end , Ganti_quark, +1 );
|
||||
SecondString = new G4ExcitedString( Gquark, start , +1 );
|
||||
Ganti_quark->Set4Momentum( PkinkQ1 );
|
||||
Gquark->Set4Momentum( PkinkQ2 );
|
||||
} else { // Anti_Quark on the end
|
||||
|
||||
FirstString = new G4ExcitedString( end , Gquark, +1 );
|
||||
SecondString = new G4ExcitedString( Ganti_quark, start , +1 );
|
||||
Gquark->Set4Momentum( PkinkQ1 );
|
||||
@@ -1209,7 +1358,6 @@ void G4DiffractiveExcitation::CreateStrings( G4VSplitableHadron* hadron,
|
||||
}
|
||||
}
|
||||
} else { // Baryon/AntiBaryon
|
||||
|
||||
if ( isProjectile ) { // Projectile
|
||||
if ( end->GetDefinition()->GetParticleType() == "diquarks" &&
|
||||
end->GetDefinition()->GetPDGEncoding() > 0 ) { // DiQuark on the end
|
||||
@@ -1217,7 +1365,6 @@ void G4DiffractiveExcitation::CreateStrings( G4VSplitableHadron* hadron,
|
||||
SecondString = new G4ExcitedString( Ganti_quark, start , +1 );
|
||||
Gquark->Set4Momentum( PkinkQ1 );
|
||||
Ganti_quark->Set4Momentum( PkinkQ2 );
|
||||
|
||||
} else { // Anti_DiQuark on the end or quark
|
||||
FirstString = new G4ExcitedString( end , Ganti_quark, +1 );
|
||||
SecondString = new G4ExcitedString( Gquark, start , +1 );
|
||||
@@ -1227,13 +1374,10 @@ void G4DiffractiveExcitation::CreateStrings( G4VSplitableHadron* hadron,
|
||||
} else { // Target
|
||||
if ( end->GetDefinition()->GetParticleType() == "diquarks" &&
|
||||
end->GetDefinition()->GetPDGEncoding() > 0 ) { // DiQuark on the end
|
||||
|
||||
Gquark->Set4Momentum( PkinkQ1 );
|
||||
Ganti_quark->Set4Momentum( PkinkQ2 );
|
||||
|
||||
FirstString = new G4ExcitedString( end, Gquark, -1 );
|
||||
SecondString = new G4ExcitedString( Ganti_quark, start, -1 );
|
||||
|
||||
} else { // Anti_DiQuark on the end or Q
|
||||
FirstString = new G4ExcitedString( Ganti_quark, end , -1 );
|
||||
SecondString = new G4ExcitedString( start , Gquark, -1 );
|
||||
@@ -1248,50 +1392,34 @@ void G4DiffractiveExcitation::CreateStrings( G4VSplitableHadron* hadron,
|
||||
SecondString->SetTimeOfCreation( hadron->GetTimeOfCreation() );
|
||||
SecondString->SetPosition( hadron->GetPosition() );
|
||||
|
||||
} else { // End of kink is possible: Kink is impossible
|
||||
|
||||
FirstString = new G4ExcitedString( end, start, +1 );
|
||||
} else { // Kink is impossible
|
||||
|
||||
if ( isProjectile ) {
|
||||
FirstString = new G4ExcitedString( end, start, +1 );
|
||||
} else {
|
||||
FirstString = new G4ExcitedString( end, start, -1 );
|
||||
}
|
||||
FirstString->SetTimeOfCreation( hadron->GetTimeOfCreation() );
|
||||
FirstString->SetPosition( hadron->GetPosition() );
|
||||
SecondString = 0;
|
||||
// momenta of string ends
|
||||
G4LorentzVector HadronMom = hadron->Get4Momentum();
|
||||
G4LorentzVector Pstart1 = G4LorentzVector( HadronMom.px()/2.0, HadronMom.py()/2.0, 0.0, 0.0 ); // Quark momentum
|
||||
G4LorentzVector Pend1 = G4LorentzVector( HadronMom.px()/2.0, HadronMom.py()/2.0, 0.0, 0.0 ); // Di-quark momentum
|
||||
G4double Pz = HadronMom.pz();
|
||||
G4double Eh = HadronMom.e();
|
||||
G4double Pt2 = sqr( HadronMom.px() ) + sqr( HadronMom.py() );
|
||||
G4double Mt2 = HadronMom.mt2();
|
||||
G4double Exp = std::sqrt( sqr(Pz) + ( sqr(Mt2) - 4.0*sqr(Eh)*Pt2/4.0 )/Mt2 )/2.0;
|
||||
G4double Pzq = Pz/2.0 - Exp; Pstart1.setZ( Pzq );
|
||||
G4double Eq = std::sqrt( sqr(Pzq) + Pt2/4.0 ); Pstart1.setE( Eq );
|
||||
G4double Pzqq = Pz/2.0 + Exp; Pend1.setZ(Pzqq);
|
||||
G4double Eqq = std::sqrt( sqr(Pzqq) + Pt2/4.0 ); Pend1.setE(Eqq);
|
||||
start->Set4Momentum( Pstart1 );
|
||||
end->Set4Momentum( Pend1 );
|
||||
Pstart = Pstart1; Pend = Pend1;
|
||||
|
||||
if ( ! (end->Get4Momentum().e() != 0.) ) {
|
||||
// momenta of string ends
|
||||
G4double Momentum = hadron->Get4Momentum().vect().mag();
|
||||
G4double Plus = hadron->Get4Momentum().e() + Momentum;
|
||||
G4double Minus = hadron->Get4Momentum().e() - Momentum;
|
||||
G4ThreeVector tmp;
|
||||
if ( Momentum > 0.0 ) {
|
||||
tmp.set( hadron->Get4Momentum().px(),
|
||||
hadron->Get4Momentum().py(),
|
||||
hadron->Get4Momentum().pz() );
|
||||
tmp /= Momentum;
|
||||
} else {
|
||||
tmp.set( 0.0, 0.0, 1.0 );
|
||||
}
|
||||
G4LorentzVector Pstart1( tmp, 0.0 );
|
||||
G4LorentzVector Pend1( tmp, 0.0 );
|
||||
if ( isProjectile ) {
|
||||
Pstart1 *= (-1.0)*Minus/2.0;
|
||||
Pend1 *= (+1.0)*Plus /2.0;
|
||||
} else {
|
||||
Pstart1 *= (+1.0)*Plus/ 2.0;
|
||||
Pend1 *= (-1.0)*Minus/2.0;
|
||||
}
|
||||
|
||||
Momentum = Pstart1.vect().mag();
|
||||
|
||||
Pstart1.setT( Momentum ); // It is assumed that quark has m=0.
|
||||
|
||||
Momentum = Pend1.vect().mag();
|
||||
|
||||
Pend1.setT( Momentum ); // It is assumed that di-quark has m=0.
|
||||
start->Set4Momentum( Pstart1 );
|
||||
end->Set4Momentum( Pend1 );
|
||||
SecondString = 0;
|
||||
}
|
||||
} // End of kink is impossible
|
||||
} // End of "if (Kink)"
|
||||
|
||||
//G4cout << "Quarks in the string at creation" << FirstString->GetRightParton()->GetPDGcode()
|
||||
// << " " << FirstString->GetLeftParton()->GetPDGcode() << G4endl
|
||||
@@ -1367,18 +1495,27 @@ G4double G4DiffractiveExcitation::GetQuarkFractionOfKink( G4double zmin, G4doubl
|
||||
|
||||
void G4DiffractiveExcitation::UnpackMeson( const G4int IdPDG, G4int& Q1, G4int& Q2 ) const {
|
||||
G4int absIdPDG = std::abs( IdPDG );
|
||||
if ( ! ( absIdPDG == 111 || absIdPDG == 221 || absIdPDG == 331 ) ) {
|
||||
// Ordinary mesons
|
||||
if ( ! ( absIdPDG == 111 || absIdPDG == 221 || absIdPDG == 331 || // Pi0 , Eta , Eta'
|
||||
absIdPDG == 441 || absIdPDG == 443 || absIdPDG == 553 ) ) { // Etac , J/psi , Upsilon
|
||||
// All other projectile mesons (including charmed and bottom ones)
|
||||
Q1 = absIdPDG / 100;
|
||||
Q2 = (absIdPDG % 100) / 10;
|
||||
G4int anti = 1 - 2 * ( std::max( Q1, Q2 ) % 2 );
|
||||
if ( IdPDG < 0 ) anti *= -1;
|
||||
Q1 *= anti;
|
||||
Q2 *= -1 * anti;
|
||||
} else {
|
||||
// Pi0, Eta, Eta'
|
||||
if ( G4UniformRand() < 0.5 ) { Q1 = 1; Q2 = -1; }
|
||||
else { Q1 = 2; Q2 = -2; }
|
||||
} else {
|
||||
if ( absIdPDG == 441 || absIdPDG == 443 ) { // Etac , J/psi
|
||||
Q1 = 4; Q2 = -4;
|
||||
} else if ( absIdPDG == 553 ) { // Upsilon
|
||||
Q1 = 5; Q2 = -5;
|
||||
} else { // Pi0 , Eta , Eta'
|
||||
if ( G4UniformRand() < 0.5 ) {
|
||||
Q1 = 1; Q2 = -1;
|
||||
} else {
|
||||
Q1 = 2; Q2 = -2;
|
||||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -1398,6 +1535,7 @@ void G4DiffractiveExcitation::UnpackBaryon( G4int IdPDG,
|
||||
//============================================================================
|
||||
|
||||
G4int G4DiffractiveExcitation::NewNucleonId( G4int Q1, G4int Q2, G4int Q3 ) const {
|
||||
// Order the three integers in such a way that Q1 >= Q2 >= Q3
|
||||
G4int TmpQ( 0 );
|
||||
if ( Q3 > Q2 ) {
|
||||
TmpQ = Q2;
|
||||
@@ -1413,7 +1551,8 @@ G4int G4DiffractiveExcitation::NewNucleonId( G4int Q1, G4int Q2, G4int Q3 ) cons
|
||||
Q1 = Q2;
|
||||
Q2 = TmpQ;
|
||||
}
|
||||
G4int NewCode = Q1*1000 + Q2*100 + Q3*10 + 2;
|
||||
// By now Q1 >= Q2 >= Q3
|
||||
G4int NewCode = Q1*1000 + Q2*100 + Q3*10 + 2;
|
||||
return NewCode;
|
||||
}
|
||||
|
||||
|
||||
+52
-52
@@ -182,45 +182,45 @@ G4bool G4FTFAnnihilation::Annihilate( G4VSplitableHadron* projectile,
|
||||
|
||||
G4bool isUnknown = false;
|
||||
if ( TargetPDGcode == 2212 || TargetPDGcode == 2214 ) { // Target proton or Delta+
|
||||
if ( ProjectilePDGcode == -2212 || ProjectilePDGcode == -2214 ) {
|
||||
if ( ProjectilePDGcode == -2212 || ProjectilePDGcode == -2214 ) { // anti_proton or anti_Delta+
|
||||
X_b *= 5.0; X_c *= 5.0; X_d *= 6.0; // Pbar P
|
||||
} else if ( ProjectilePDGcode == -2112 || ProjectilePDGcode == -2114 ) {
|
||||
} else if ( ProjectilePDGcode == -2112 || ProjectilePDGcode == -2114 ) { // anti_neutron or anti_Delta0
|
||||
X_b *= 4.0; X_c *= 4.0; X_d *= 4.0; // NeutrBar P
|
||||
} else if ( ProjectilePDGcode == -3122 || ProjectilePDGcode == -3124 ) {
|
||||
} else if ( ProjectilePDGcode == -3122 ) { // anti_Lambda (no anti_Lambda* in PDG)
|
||||
X_b *= 3.0; X_c *= 3.0; X_d *= 2.0; // LambdaBar P
|
||||
} else if ( ProjectilePDGcode == -3112 || ProjectilePDGcode == -3114 ) {
|
||||
} else if ( ProjectilePDGcode == -3112 ) { // anti_Sigma- (no anti_Sigma*- in G4)
|
||||
X_b *= 2.0; X_c *= 2.0; X_d *= 0.0; // Sigma-Bar P
|
||||
} else if ( ProjectilePDGcode == -3212 || ProjectilePDGcode == -3214 ) {
|
||||
} else if ( ProjectilePDGcode == -3212 ) { // anti_Sigma0 (no anti_Sigma*0 in G4)
|
||||
X_b *= 3.0; X_c *= 3.0; X_d *= 2.0; // Sigma0Bar P
|
||||
} else if ( ProjectilePDGcode == -3222 || ProjectilePDGcode == -3224 ) {
|
||||
} else if ( ProjectilePDGcode == -3222 ) { // anti_Sigma+ (no anti_Sigma*+ in G4)
|
||||
X_b *= 4.0; X_c *= 4.0; X_d *= 2.0; // Sigma+Bar P
|
||||
} else if ( ProjectilePDGcode == -3312 || ProjectilePDGcode == -3314 ) {
|
||||
} else if ( ProjectilePDGcode == -3312 ) { // anti_Xi- (no anti_Xi*- in G4)
|
||||
X_b *= 1.0; X_c *= 1.0; X_d *= 0.0; // Xi-Bar P
|
||||
} else if ( ProjectilePDGcode == -3322 || ProjectilePDGcode == -3324 ) {
|
||||
} else if ( ProjectilePDGcode == -3322 ) { // anti_Xi0 (no anti_Xi*0 in G4)
|
||||
X_b *= 2.0; X_c *= 2.0; X_d *= 0.0; // Xi0Bar P
|
||||
} else if ( ProjectilePDGcode == -3334 ) {
|
||||
} else if ( ProjectilePDGcode == -3334 ) { // anti_Omega- (no anti_Omega*- in PDG)
|
||||
X_b *= 0.0; X_c *= 0.0; X_d *= 0.0; // Omega-Bar P
|
||||
} else {
|
||||
isUnknown = true;
|
||||
}
|
||||
} else if ( TargetPDGcode == 2112 || TargetPDGcode == 2114 ) { // Target neutron or Delta0
|
||||
if ( ProjectilePDGcode == -2212 || ProjectilePDGcode == -2214 ) {
|
||||
if ( ProjectilePDGcode == -2212 || ProjectilePDGcode == -2214 ) { // anti_proton or anti_Delta+
|
||||
X_b *= 4.0; X_c *= 4.0; X_d *= 4.0; // Pbar N
|
||||
} else if ( ProjectilePDGcode == -2112 || ProjectilePDGcode == -2114 ) {
|
||||
} else if ( ProjectilePDGcode == -2112 || ProjectilePDGcode == -2114 ) { // anti_neutron or anti_Delta0
|
||||
X_b *= 5.0; X_c *= 5.0; X_d *= 6.0; // NeutrBar N
|
||||
} else if ( ProjectilePDGcode == -3122 || ProjectilePDGcode == -3124 ) {
|
||||
} else if ( ProjectilePDGcode == -3122 ) { // anti_Lambda (no anti_Lambda* in PDG)
|
||||
X_b *= 3.0; X_c *= 3.0; X_d *= 2.0; // LambdaBar N
|
||||
} else if ( ProjectilePDGcode == -3112 || ProjectilePDGcode == -3114 ) {
|
||||
X_b *= 4.0; X_c *= 4.0; X_d *= 2.0; // Sigma-Bar N
|
||||
} else if ( ProjectilePDGcode == -3212 || ProjectilePDGcode == -3214 ) {
|
||||
} else if ( ProjectilePDGcode == -3112 ) { // anti_Sigma- (no anti_Sigma*- in G4)
|
||||
X_b *= 4.0; X_c *= 4.0; X_d *= 2.0; // Sigma-Bar N
|
||||
} else if ( ProjectilePDGcode == -3212 ) { // anti_Sigma0 (no anti_Sigma*0 in G4)
|
||||
X_b *= 3.0; X_c *= 3.0; X_d *= 2.0; // Sigma0Bar N
|
||||
} else if ( ProjectilePDGcode == -3222 || ProjectilePDGcode == -3224 ) {
|
||||
} else if ( ProjectilePDGcode == -3222 ) { // anti_Sigma+ (no anti_Sigma*+ in G4)
|
||||
X_b *= 2.0; X_c *= 2.0; X_d *= 0.0; // Sigma+Bar N
|
||||
} else if ( ProjectilePDGcode == -3312 || ProjectilePDGcode == -3314 ) {
|
||||
} else if ( ProjectilePDGcode == -3312 ) { // anti_Xi- (no anti_Xi*- in G4)
|
||||
X_b *= 2.0; X_c *= 2.0; X_d *= 0.0; // Xi-Bar N
|
||||
} else if ( ProjectilePDGcode == -3322 || ProjectilePDGcode == -3324 ) {
|
||||
} else if ( ProjectilePDGcode == -3322 ) { // anti_Xi0 (no anti_Xi*0 in G4)
|
||||
X_b *= 1.0; X_c *= 1.0; X_d *= 0.0; // Xi0Bar N
|
||||
} else if ( ProjectilePDGcode == -3334 ) {
|
||||
} else if ( ProjectilePDGcode == -3334 ) { // anti_Omega- (no anti_Omega*- in PDG)
|
||||
X_b *= 0.0; X_c *= 0.0; X_d *= 0.0; // Omega-Bar N
|
||||
} else {
|
||||
isUnknown = true;
|
||||
@@ -310,7 +310,7 @@ Create3QuarkAntiQuarkStrings( G4VSplitableHadron* projectile,
|
||||
// For simplicity only scalar is considered here.
|
||||
G4int NewCode = 0, antiQuark = 0, quark = 0;
|
||||
G4ParticleDefinition* TestParticle = nullptr;
|
||||
for ( G4int iString = 0; iString < 3; iString++ ) { // Loop over the 3 string cases
|
||||
for ( G4int iString = 0; iString < 3; ++iString ) { // Loop over the 3 string cases
|
||||
if ( iString == 0 ) {
|
||||
antiQuark = common.AQ[0]; quark = common.Q[0];
|
||||
projectile->SplitUp();
|
||||
@@ -380,20 +380,20 @@ Create3QuarkAntiQuarkStrings( G4VSplitableHadron* projectile,
|
||||
G4int NumberOfTries = 0, loopCounter = 0;
|
||||
const G4int maxNumberOfLoops = 1000;
|
||||
do {
|
||||
NumberOfTries++;
|
||||
++NumberOfTries;
|
||||
if ( NumberOfTries == 100*(NumberOfTries/100) ) {
|
||||
// At large number of tries it would be better to reduce the values of <Pt^2>
|
||||
ScaleFactor /= 2.0;
|
||||
AveragePt2 *= ScaleFactor;
|
||||
}
|
||||
G4ThreeVector PtSum( 0.0, 0.0, 0.0 );
|
||||
for ( G4int i = 0; i < 6; i++ ) {
|
||||
for ( G4int i = 0; i < 6; ++i ) {
|
||||
Quark_Mom [i] = GaussianPt( AveragePt2, maxPtSquare );
|
||||
PtSum += Quark_Mom[i];
|
||||
}
|
||||
PtSum /= 6.0;
|
||||
SumMt = 0.0;
|
||||
for ( G4int i = 0; i < 6; i++ ) {
|
||||
for ( G4int i = 0; i < 6; ++i ) {
|
||||
Quark_Mom[i] -= PtSum;
|
||||
ModMom2[i] = Quark_Mom[i].mag2();
|
||||
SumMt += std::sqrt( ModMom2[i] + MassQ2 );
|
||||
@@ -411,13 +411,13 @@ Create3QuarkAntiQuarkStrings( G4VSplitableHadron* projectile,
|
||||
NumberOfTries = 0; loopCounter = 0;
|
||||
do {
|
||||
Success = true;
|
||||
NumberOfTries++;
|
||||
++NumberOfTries;
|
||||
if ( NumberOfTries == 100*(NumberOfTries/100) ) {
|
||||
// At large number of tries it would be better to reduce the values of Pt's
|
||||
ScaleFactor /= 2.0;
|
||||
}
|
||||
G4double Alfa = 0.0, Beta = 0.0;
|
||||
for ( G4int iCase = 0; iCase < 2; iCase++ ) { // anti-baryon (1st case), baryon (2nd case)
|
||||
for ( G4int iCase = 0; iCase < 2; ++iCase ) { // anti-baryon (1st case), baryon (2nd case)
|
||||
G4double x1 = 0.0, x2 = 0.0;
|
||||
G4double r1 = G4UniformRand(), r2 = G4UniformRand();
|
||||
if ( Alfa_R == 1.0 ) {
|
||||
@@ -430,7 +430,7 @@ Create3QuarkAntiQuarkStrings( G4VSplitableHadron* projectile,
|
||||
G4double x3 = 1.0 - x1 - x2;
|
||||
G4int index = iCase*3; // 0 for anti-baryon, 3 for baryon
|
||||
Quark_Mom[index].setZ( x1 ); Quark_Mom[index+1].setZ( x2 ); Quark_Mom[index+2].setZ( x3 );
|
||||
for ( G4int i = 0; i < 3; i++ ) { // Loop over the 3 (anti-)quarks
|
||||
for ( G4int i = 0; i < 3; ++i ) { // Loop over the 3 (anti-)quarks
|
||||
if ( Quark_Mom[index+i].getZ() != 0.0 ) {
|
||||
G4double val = ( ScaleFactor * ModMom2[index+i] + MassQ2 ) / Quark_Mom[index+i].getZ();
|
||||
if ( iCase == 0 ) { // anti-baryon
|
||||
@@ -459,11 +459,11 @@ Create3QuarkAntiQuarkStrings( G4VSplitableHadron* projectile,
|
||||
}
|
||||
|
||||
G4double SqrtScaleF = std::sqrt( ScaleFactor );
|
||||
for ( G4int iCase = 0; iCase < 2; iCase++ ) { // anti-baryon (1st case), baryon (2nd case)
|
||||
for ( G4int iCase = 0; iCase < 2; ++iCase ) { // anti-baryon (1st case), baryon (2nd case)
|
||||
G4int index = iCase*3; // 0 for anti-baryon, 3 for baryon
|
||||
G4double w = WplusProjectile; // for anti-baryon
|
||||
if ( iCase == 1 ) w = - WminusTarget; // for baryon
|
||||
for ( G4int i = 0; i < 3; i++ ) {
|
||||
for ( G4int i = 0; i < 3; ++i ) {
|
||||
G4double Pz = w * Quark_Mom[index+i].getZ() / 2.0 -
|
||||
( ScaleFactor * ModMom2[index+i] + MassQ2 ) /
|
||||
( 2.0 * w * Quark_Mom[index+i].getZ() );
|
||||
@@ -476,7 +476,7 @@ Create3QuarkAntiQuarkStrings( G4VSplitableHadron* projectile,
|
||||
}
|
||||
G4LorentzVector Pstring1, Pstring2, Pstring3;
|
||||
G4double YstringMax = 0.0, YstringMin = 0.0;
|
||||
for ( G4int i = 0; i < 3; i++ ) {
|
||||
for ( G4int i = 0; i < 3; ++i ) {
|
||||
G4ThreeVector tmp = Quark_Mom[i] + Quark_Mom[i+3];
|
||||
G4LorentzVector Pstring( tmp, std::sqrt( Quark_Mom[i].mag2() + MassQ2 ) +
|
||||
std::sqrt( Quark_Mom[i+3].mag2() + MassQ2 ) );
|
||||
@@ -563,9 +563,9 @@ Create1DiquarkAntiDiquarkString( G4VSplitableHadron* projectile,
|
||||
G4cout << "Process b, quark - anti-quark annihilation, di-q - anti-di-q string" << G4endl;
|
||||
#endif
|
||||
|
||||
G4int CandidatsN = 0, CandAQ[9][2], CandQ[9][2];
|
||||
for ( G4int iAQ = 0; iAQ < 3; iAQ++ ) { // index of the 3 constituent anti-quarks of the antibaryon projectile
|
||||
for ( G4int iQ = 0; iQ < 3; iQ++ ) { // index of the 3 constituent quarks of the nucleon target
|
||||
G4int CandidatsN = 0, CandAQ[9][2] = {}, CandQ[9][2] = {};
|
||||
for ( G4int iAQ = 0; iAQ < 3; ++iAQ ) { // index of the 3 constituent anti-quarks of the antibaryon projectile
|
||||
for ( G4int iQ = 0; iQ < 3; ++iQ ) { // index of the 3 constituent quarks of the nucleon target
|
||||
if ( -common.AQ[iAQ] == common.Q[iQ] ) { // antiquark - quark that can annihilate
|
||||
// Here "0", "1", "2" means, respectively, "first", "second" and "third" constituent
|
||||
// of the (anti-baryon) projectile or (nucleon) target.
|
||||
@@ -575,7 +575,7 @@ Create1DiquarkAntiDiquarkString( G4VSplitableHadron* projectile,
|
||||
if ( iQ == 0 ) { CandQ[CandidatsN][0] = 1; CandQ[CandidatsN][1] = 2; }
|
||||
if ( iQ == 1 ) { CandQ[CandidatsN][0] = 0; CandQ[CandidatsN][1] = 2; }
|
||||
if ( iQ == 2 ) { CandQ[CandidatsN][0] = 0; CandQ[CandidatsN][1] = 1; }
|
||||
CandidatsN++;
|
||||
++CandidatsN;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -658,10 +658,10 @@ Create2QuarkAntiQuarkStrings( G4VSplitableHadron* projectile,
|
||||
<< G4endl;
|
||||
#endif
|
||||
|
||||
G4int CandidatsN = 0, CandAQ[9][2], CandQ[9][2];
|
||||
G4int CandidatsN = 0, CandAQ[9][2] = {}, CandQ[9][2] = {};
|
||||
G4int LeftAQ1 = 0, LeftAQ2 = 0, LeftQ1 = 0, LeftQ2 = 0;
|
||||
for ( G4int iAQ = 0; iAQ < 3; iAQ++ ) { // index of the 3 constituent anti-quarks of the antibaryon projectile
|
||||
for ( G4int iQ = 0; iQ < 3; iQ++ ) { // index of the 3 constituent quarks of the nucleon target
|
||||
for ( G4int iAQ = 0; iAQ < 3; ++iAQ ) { // index of the 3 constituent anti-quarks of the antibaryon projectile
|
||||
for ( G4int iQ = 0; iQ < 3; ++iQ ) { // index of the 3 constituent quarks of the nucleon target
|
||||
if ( -common.AQ[iAQ] == common.Q[iQ] ) { // antiquark - quark that can annihilate
|
||||
// Here "0", "1", "2" means, respectively, "first", "second" and "third" constituent
|
||||
// of the (anti-baryon) projectile or (nucleon) target.
|
||||
@@ -671,7 +671,7 @@ Create2QuarkAntiQuarkStrings( G4VSplitableHadron* projectile,
|
||||
if ( iQ == 0 ) { CandQ[CandidatsN][0] = 1; CandQ[CandidatsN][1] = 2; }
|
||||
if ( iQ == 1 ) { CandQ[CandidatsN][0] = 0; CandQ[CandidatsN][1] = 2; }
|
||||
if ( iQ == 2 ) { CandQ[CandidatsN][0] = 0; CandQ[CandidatsN][1] = 1; }
|
||||
CandidatsN++;
|
||||
++CandidatsN;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -694,7 +694,7 @@ Create2QuarkAntiQuarkStrings( G4VSplitableHadron* projectile,
|
||||
// For simplicity only scalar is considered here.
|
||||
G4int NewCode = 0, antiQuark = 0, quark = 0;
|
||||
G4ParticleDefinition* TestParticle = nullptr;
|
||||
for ( G4int iString = 0; iString < 2; iString++ ) { // Loop over the 2 string cases
|
||||
for ( G4int iString = 0; iString < 2; ++iString ) { // Loop over the 2 string cases
|
||||
if ( iString == 0 ) {
|
||||
antiQuark = LeftAQ1; quark = LeftQ1;
|
||||
projectile->SplitUp();
|
||||
@@ -753,20 +753,20 @@ Create2QuarkAntiQuarkStrings( G4VSplitableHadron* projectile,
|
||||
G4int NumberOfTries = 0, loopCounter = 0;
|
||||
const G4int maxNumberOfLoops = 1000;
|
||||
do {
|
||||
NumberOfTries++;
|
||||
++NumberOfTries;
|
||||
if ( NumberOfTries == 100*(NumberOfTries/100) ) {
|
||||
// At large number of tries it would be better to reduce the values of <Pt^2>
|
||||
ScaleFactor /= 2.0;
|
||||
AveragePt2 *= ScaleFactor;
|
||||
}
|
||||
G4ThreeVector PtSum( 0.0, 0.0, 0.0 );
|
||||
for( G4int i = 0; i < 4; i++ ) {
|
||||
for( G4int i = 0; i < 4; ++i ) {
|
||||
Quark_Mom[i] = GaussianPt( AveragePt2, maxPtSquare );
|
||||
PtSum += Quark_Mom[i];
|
||||
}
|
||||
PtSum /= 4.0;
|
||||
SumMt = 0.0;
|
||||
for ( G4int i = 0; i < 4; i++ ) {
|
||||
for ( G4int i = 0; i < 4; ++i ) {
|
||||
Quark_Mom[i] -= PtSum;
|
||||
ModMom2[i] = Quark_Mom[i].mag2();
|
||||
SumMt += std::sqrt( ModMom2[i] + MassQ2 );
|
||||
@@ -783,13 +783,13 @@ Create2QuarkAntiQuarkStrings( G4VSplitableHadron* projectile,
|
||||
NumberOfTries = 0, loopCounter = 0;
|
||||
do {
|
||||
Success = true;
|
||||
NumberOfTries++;
|
||||
++NumberOfTries;
|
||||
if ( NumberOfTries == 100*(NumberOfTries/100) ) {
|
||||
// At large number of tries it would be better to reduce the values of Pt's
|
||||
ScaleFactor /= 2.0;
|
||||
}
|
||||
G4double Alfa = 0.0, Beta = 0.0;
|
||||
for ( G4int iCase = 0; iCase < 2; iCase++ ) { // Loop over the two strings
|
||||
for ( G4int iCase = 0; iCase < 2; ++iCase ) { // Loop over the two strings
|
||||
G4double x = 0.0, r = G4UniformRand();
|
||||
if ( Alfa_R == 1.0 ) {
|
||||
if ( iCase == 0 ) { // first string
|
||||
@@ -802,7 +802,7 @@ Create2QuarkAntiQuarkStrings( G4VSplitableHadron* projectile,
|
||||
}
|
||||
G4int index = iCase*2; // 0 for the first string, 2 for the second string
|
||||
Quark_Mom[index].setZ( x ); Quark_Mom[index+1].setZ( 1.0 - x );
|
||||
for ( G4int i = 0; i < 2; i++ ) {
|
||||
for ( G4int i = 0; i < 2; ++i ) {
|
||||
if ( Quark_Mom[i].getZ() != 0.0 ) {
|
||||
G4double val = ( ScaleFactor * ModMom2[index+i] + MassQ2 ) / Quark_Mom[index+i].getZ();
|
||||
if ( iCase == 0 ) { // first string
|
||||
@@ -833,9 +833,9 @@ Create2QuarkAntiQuarkStrings( G4VSplitableHadron* projectile,
|
||||
G4double SqrtScaleF = std::sqrt( ScaleFactor );
|
||||
G4LorentzVector Pstring1, Pstring2;
|
||||
G4double Ystring1 = 0.0, Ystring2 = 0.0;
|
||||
for ( G4int iCase = 0; iCase < 2; iCase++ ) { // Loop over the two strings
|
||||
for ( G4int iCase = 0; iCase < 2; ++iCase ) { // Loop over the two strings
|
||||
G4int index = iCase*2; // 0 for the first string, 2 for the second string
|
||||
for ( G4int i = 0; i < 2; i++ ) {
|
||||
for ( G4int i = 0; i < 2; ++i ) {
|
||||
G4double w = WplusProjectile; // For the first string
|
||||
if ( iCase == 1 ) w = - WminusTarget; // For the second string
|
||||
G4double Pz = w * Quark_Mom[index+i].getZ() / 2.0
|
||||
@@ -848,7 +848,7 @@ Create2QuarkAntiQuarkStrings( G4VSplitableHadron* projectile,
|
||||
}
|
||||
}
|
||||
}
|
||||
for ( G4int iCase = 0; iCase < 2; iCase++ ) { // Loop over the two strings
|
||||
for ( G4int iCase = 0; iCase < 2; ++iCase ) { // Loop over the two strings
|
||||
G4ThreeVector tmp = Quark_Mom[iCase] + Quark_Mom[iCase+2];
|
||||
G4LorentzVector Pstring( tmp, std::sqrt( Quark_Mom[iCase].mag2() + MassQ2 ) +
|
||||
std::sqrt( Quark_Mom[iCase+2].mag2() + MassQ2 ) );
|
||||
@@ -918,11 +918,11 @@ Create1QuarkAntiQuarkString( G4VSplitableHadron* projectile,
|
||||
// of the (anti-baryon) projectile or (nucleon) target.
|
||||
G4int CandidatsN = 0, CandAQ[36], CandQ[36];
|
||||
G4int LeftAQ = 0, LeftQ = 0;
|
||||
for ( G4int iAQ1 = 0; iAQ1 < 3; iAQ1++ ) {
|
||||
for ( G4int iAQ2 = 0; iAQ2 < 3; iAQ2++ ) {
|
||||
for ( G4int iAQ1 = 0; iAQ1 < 3; ++iAQ1 ) {
|
||||
for ( G4int iAQ2 = 0; iAQ2 < 3; ++iAQ2 ) {
|
||||
if ( iAQ1 != iAQ2 ) {
|
||||
for ( G4int iQ1 = 0; iQ1 < 3; iQ1++ ) {
|
||||
for ( G4int iQ2 = 0; iQ2 < 3; iQ2++ ) {
|
||||
for ( G4int iQ1 = 0; iQ1 < 3; ++iQ1 ) {
|
||||
for ( G4int iQ2 = 0; iQ2 < 3; ++iQ2 ) {
|
||||
if ( iQ1 != iQ2 ) {
|
||||
if ( -common.AQ[iAQ1] == common.Q[iQ1] && -common.AQ[iAQ2] == common.Q[iQ2] ) {
|
||||
if ( ( iAQ1 == 0 && iAQ2 == 1 ) || ( iAQ1 == 1 && iAQ2 == 0 ) ) {
|
||||
@@ -939,7 +939,7 @@ Create1QuarkAntiQuarkString( G4VSplitableHadron* projectile,
|
||||
} else if ( ( iQ1 == 1 && iQ2 == 2 ) || ( iQ1 == 2 && iQ2 == 1 ) ) {
|
||||
CandQ[CandidatsN] = 0;
|
||||
}
|
||||
CandidatsN++;
|
||||
++CandidatsN;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -78,7 +78,7 @@ G4FTFModel::G4FTFModel( const G4String& modelName ) :
|
||||
//
|
||||
NumberOfInvolvedNucleonsOfTarget = 0;
|
||||
NumberOfInvolvedNucleonsOfProjectile= 0;
|
||||
for ( G4int i = 0; i < 250; i++ ) {
|
||||
for ( G4int i = 0; i < 250; ++i ) {
|
||||
TheInvolvedNucleonsOfTarget[i] = 0;
|
||||
TheInvolvedNucleonsOfProjectile[i] = 0;
|
||||
}
|
||||
@@ -132,7 +132,7 @@ G4FTFModel::~G4FTFModel() {
|
||||
|
||||
// Erasing of target involved nucleons.
|
||||
if ( NumberOfInvolvedNucleonsOfTarget != 0 ) {
|
||||
for ( G4int i = 0; i < NumberOfInvolvedNucleonsOfTarget; i++ ) {
|
||||
for ( G4int i = 0; i < NumberOfInvolvedNucleonsOfTarget; ++i ) {
|
||||
G4VSplitableHadron* aNucleon = TheInvolvedNucleonsOfTarget[i]->GetSplitableHadron();
|
||||
if ( aNucleon ) delete aNucleon;
|
||||
}
|
||||
@@ -140,7 +140,7 @@ G4FTFModel::~G4FTFModel() {
|
||||
|
||||
// Erasing of projectile involved nucleons.
|
||||
if ( NumberOfInvolvedNucleonsOfProjectile != 0 ) {
|
||||
for ( G4int i = 0; i < NumberOfInvolvedNucleonsOfProjectile; i++ ) {
|
||||
for ( G4int i = 0; i < NumberOfInvolvedNucleonsOfProjectile; ++i ) {
|
||||
G4VSplitableHadron* aNucleon = TheInvolvedNucleonsOfProjectile[i]->GetSplitableHadron();
|
||||
if ( aNucleon ) delete aNucleon;
|
||||
}
|
||||
@@ -273,8 +273,15 @@ void G4FTFModel::Init( const G4Nucleus& aNucleus, const G4DynamicParticle& aProj
|
||||
G4cout << "FTF end of Init" << G4endl << G4endl;
|
||||
#endif
|
||||
|
||||
//if ( std::abs( theProjectile.GetDefinition()->GetBaryonNumber() ) <= 1 &&
|
||||
// aNucleus.GetA_asInt() < 2 ) theParameters->SetProbabilityOfElasticScatt( 0.0 );
|
||||
// In the case of Hydrogen target, for non-ion hadron projectiles,
|
||||
// do NOT simulate quasi-elastic (by forcing to 0 the probability of
|
||||
// elastic scatering in theParameters - which is used only by FTF).
|
||||
// This is necessary because in this case quasi-elastic on a target nucleus
|
||||
// with only one nucleon would be identical to the hadron elastic scattering,
|
||||
// and the latter is already included in the elastic process
|
||||
// (i.e. G4HadronElasticProcess).
|
||||
if ( std::abs( theProjectile.GetDefinition()->GetBaryonNumber() ) <= 1 &&
|
||||
aNucleus.GetA_asInt() < 2 ) theParameters->SetProbabilityOfElasticScatt( 0.0 );
|
||||
}
|
||||
|
||||
|
||||
@@ -358,14 +365,14 @@ G4ExcitedStringVector* G4FTFModel::GetStrings() {
|
||||
G4VSplitableHadron* aNucleon = 0;
|
||||
|
||||
// Erase the projectile nucleons
|
||||
for ( G4int i = 0; i < NumberOfInvolvedNucleonsOfProjectile; i++ ) {
|
||||
for ( G4int i = 0; i < NumberOfInvolvedNucleonsOfProjectile; ++i ) {
|
||||
aNucleon = TheInvolvedNucleonsOfProjectile[i]->GetSplitableHadron();
|
||||
if ( aNucleon ) delete aNucleon;
|
||||
}
|
||||
NumberOfInvolvedNucleonsOfProjectile = 0;
|
||||
|
||||
// Erase the target nucleons
|
||||
for ( G4int i = 0; i < NumberOfInvolvedNucleonsOfTarget; i++ ) {
|
||||
for ( G4int i = 0; i < NumberOfInvolvedNucleonsOfTarget; ++i ) {
|
||||
aNucleon = TheInvolvedNucleonsOfTarget[i]->GetSplitableHadron();
|
||||
if ( aNucleon ) delete aNucleon;
|
||||
}
|
||||
@@ -407,6 +414,7 @@ void G4FTFModel::StoreInvolvedNucleon() {
|
||||
<< G4endl << G4endl;
|
||||
#endif
|
||||
|
||||
|
||||
if ( ! GetProjectileNucleus() ) return; // The projectile is a hadron
|
||||
|
||||
// The projectile is a nucleus or an anti-nucleus.
|
||||
@@ -970,7 +978,7 @@ G4bool G4FTFModel::ExciteParticipants() {
|
||||
|
||||
// Return to the annihilation
|
||||
theParticipants.StartLoop();
|
||||
for ( G4int I = 0; I < CurrentInteraction; I++ ) theParticipants.Next();
|
||||
for ( G4int I = 0; I < CurrentInteraction; ++I ) theParticipants.Next();
|
||||
|
||||
// At last, annihilation
|
||||
if ( ! HighEnergyInter ) {
|
||||
@@ -1002,7 +1010,7 @@ G4bool G4FTFModel::ExciteParticipants() {
|
||||
}
|
||||
}
|
||||
theParticipants.StartLoop();
|
||||
for ( G4int I = 0; I < CurrentInteraction; I++ ) theParticipants.Next();
|
||||
for ( G4int I = 0; I < CurrentInteraction; ++I ) theParticipants.Next();
|
||||
*/
|
||||
|
||||
}
|
||||
@@ -2287,7 +2295,7 @@ void G4FTFModel::GetResiduals() {
|
||||
G4LorentzVector DeltaPResidualNucleus = TargetResidual4Momentum /
|
||||
G4double( NumberOfInvolvedNucleonsOfTarget );
|
||||
|
||||
for ( G4int i = 0; i < NumberOfInvolvedNucleonsOfTarget; i++ ) {
|
||||
for ( G4int i = 0; i < NumberOfInvolvedNucleonsOfTarget; ++i ) {
|
||||
G4Nucleon* aNucleon = TheInvolvedNucleonsOfTarget[i];
|
||||
|
||||
#ifdef debugFTFmodel
|
||||
@@ -2389,7 +2397,7 @@ void G4FTFModel::GetResiduals() {
|
||||
DeltaPResidualNucleus = ProjectileResidual4Momentum /
|
||||
G4double( NumberOfInvolvedNucleonsOfProjectile );
|
||||
|
||||
for ( G4int i = 0; i < NumberOfInvolvedNucleonsOfProjectile; i++ ) {
|
||||
for ( G4int i = 0; i < NumberOfInvolvedNucleonsOfProjectile; ++i ) {
|
||||
G4Nucleon* aNucleon = TheInvolvedNucleonsOfProjectile[i];
|
||||
|
||||
#ifdef debugFTFmodel
|
||||
@@ -2493,7 +2501,7 @@ void G4FTFModel::GetResiduals() {
|
||||
#endif
|
||||
|
||||
G4int NumberOfTargetParticipant( 0 );
|
||||
for ( G4int i = 0; i < NumberOfInvolvedNucleonsOfTarget; i++ ) {
|
||||
for ( G4int i = 0; i < NumberOfInvolvedNucleonsOfTarget; ++i ) {
|
||||
G4Nucleon* aNucleon = TheInvolvedNucleonsOfTarget[i];
|
||||
G4VSplitableHadron* targetSplitable = aNucleon->GetSplitableHadron();
|
||||
if ( targetSplitable->GetSoftCollisionCount() != 0 ) NumberOfTargetParticipant++;
|
||||
@@ -2507,7 +2515,7 @@ void G4FTFModel::GetResiduals() {
|
||||
DeltaPResidualNucleus = TargetResidual4Momentum / G4double( NumberOfTargetParticipant );
|
||||
}
|
||||
|
||||
for ( G4int i = 0; i < NumberOfInvolvedNucleonsOfTarget; i++ ) {
|
||||
for ( G4int i = 0; i < NumberOfInvolvedNucleonsOfTarget; ++i ) {
|
||||
G4Nucleon* aNucleon = TheInvolvedNucleonsOfTarget[i];
|
||||
G4VSplitableHadron* targetSplitable = aNucleon->GetSplitableHadron();
|
||||
if ( targetSplitable->GetSoftCollisionCount() != 0 ) {
|
||||
@@ -2537,7 +2545,7 @@ void G4FTFModel::GetResiduals() {
|
||||
#endif
|
||||
|
||||
G4int NumberOfProjectileParticipant( 0 );
|
||||
for ( G4int i = 0; i < NumberOfInvolvedNucleonsOfProjectile; i++ ) {
|
||||
for ( G4int i = 0; i < NumberOfInvolvedNucleonsOfProjectile; ++i ) {
|
||||
G4Nucleon* aNucleon = TheInvolvedNucleonsOfProjectile[i];
|
||||
G4VSplitableHadron* projectileSplitable = aNucleon->GetSplitableHadron();
|
||||
if ( projectileSplitable->GetSoftCollisionCount() != 0 ) NumberOfProjectileParticipant++;
|
||||
@@ -2556,7 +2564,7 @@ void G4FTFModel::GetResiduals() {
|
||||
}
|
||||
//G4cout << "DeltaExcitationE DeltaPResidualNucleus " << DeltaExcitationE
|
||||
// << " " << DeltaPResidualNucleus << G4endl;
|
||||
for ( G4int i = 0; i < NumberOfInvolvedNucleonsOfProjectile; i++ ) {
|
||||
for ( G4int i = 0; i < NumberOfInvolvedNucleonsOfProjectile; ++i ) {
|
||||
G4Nucleon* aNucleon = TheInvolvedNucleonsOfProjectile[i];
|
||||
G4VSplitableHadron* projectileSplitable = aNucleon->GetSplitableHadron();
|
||||
if ( projectileSplitable->GetSoftCollisionCount() != 0 ) {
|
||||
@@ -2589,18 +2597,18 @@ void G4FTFModel::GetResiduals() {
|
||||
|
||||
G4ThreeVector G4FTFModel::GaussianPt( G4double AveragePt2, G4double maxPtSquare ) const {
|
||||
|
||||
G4double Pt2( 0.0 );
|
||||
G4double Pt2( 0.0 ), Pt( 0.0 );
|
||||
|
||||
if (AveragePt2 > 0.0) {
|
||||
if (maxPtSquare/AveragePt2 < 1.0e+9) {
|
||||
Pt2 = -AveragePt2 * G4Log( 1.0 + G4UniformRand() *
|
||||
( G4Exp( -maxPtSquare/AveragePt2 ) -1.0 ) );
|
||||
const G4double ymax = maxPtSquare/AveragePt2;
|
||||
if ( ymax < 200. ) {
|
||||
Pt2 = -AveragePt2 * G4Log( 1.0 + G4UniformRand() * ( G4Exp( -ymax ) -1.0 ) );
|
||||
} else {
|
||||
Pt2 = -AveragePt2 * G4Log( 1.0 - G4UniformRand() );
|
||||
}
|
||||
Pt = std::sqrt( Pt2 );
|
||||
}
|
||||
|
||||
G4double Pt = std::sqrt( Pt2 );
|
||||
G4double phi = G4UniformRand() * twopi;
|
||||
|
||||
return G4ThreeVector( Pt*std::cos(phi), Pt*std::sin(phi), 0.0 );
|
||||
@@ -2718,7 +2726,7 @@ GenerateDeltaIsobar( const G4double sqrtS, // input parameter
|
||||
G4int maxNumberOfDeltas = G4int( (sqrtS - sumMasses)/(400.0*MeV) );
|
||||
G4int numberOfDeltas = 0;
|
||||
|
||||
for ( G4int i = 0; i < numberOfInvolvedNucleons; i++ ) {
|
||||
for ( G4int i = 0; i < numberOfInvolvedNucleons; ++i ) {
|
||||
|
||||
if ( G4UniformRand() < probDeltaIsobar && numberOfDeltas < maxNumberOfDeltas ) {
|
||||
numberOfDeltas++;
|
||||
@@ -2774,8 +2782,16 @@ SamplingNucleonKinematics( G4double averagePt2, // input param
|
||||
// the action of this method consists in changing the properties of the nucleons
|
||||
// whose pointers are in the vector involvedNucleons, as well as changing the
|
||||
// variable mass2.
|
||||
#ifdef debugPutOnMassShell
|
||||
G4cout << "G4FTFModel::SamplingNucleonKinematics:" << G4endl;
|
||||
G4cout << " averagePt2= " << averagePt2 << " maxPt2= " << maxPt2
|
||||
<< " dCor= " << dCor << " resMass(GeV)= " << residualMass/GeV
|
||||
<< " resMassN= " << residualMassNumber
|
||||
<< " nNuc= " << numberOfInvolvedNucleons
|
||||
<< " lv= " << pResidual << G4endl;
|
||||
#endif
|
||||
|
||||
if ( ! nucleus ) return false;
|
||||
if ( ! nucleus || numberOfInvolvedNucleons < 1) return false;
|
||||
|
||||
if ( residualMassNumber == 0 && numberOfInvolvedNucleons == 1 ) {
|
||||
dCor = 0.0;
|
||||
@@ -2785,14 +2801,10 @@ SamplingNucleonKinematics( G4double averagePt2, // input param
|
||||
G4bool success = true;
|
||||
|
||||
G4double SumMasses = residualMass;
|
||||
G4double invN = 1.0/(G4double)numberOfInvolvedNucleons;
|
||||
|
||||
for ( G4int i = 0; i < numberOfInvolvedNucleons; i++ ) {
|
||||
G4Nucleon* aNucleon = involvedNucleons[i];
|
||||
if ( ! aNucleon ) continue;
|
||||
SumMasses += aNucleon->GetSplitableHadron()->GetDefinition()->GetPDGMass();
|
||||
}
|
||||
//
|
||||
|
||||
// to avoid problems due to precision lost a tolerance is added
|
||||
const G4double eps = 1.e-10;
|
||||
const G4int maxNumberOfLoops = 1000;
|
||||
G4int loopCounter = 0;
|
||||
do {
|
||||
@@ -2801,21 +2813,22 @@ SamplingNucleonKinematics( G4double averagePt2, // input param
|
||||
|
||||
// Sampling of nucleon Pt
|
||||
G4ThreeVector ptSum( 0.0, 0.0, 0.0 );
|
||||
|
||||
for ( G4int i = 0; i < numberOfInvolvedNucleons; i++ ) {
|
||||
G4Nucleon* aNucleon = involvedNucleons[i];
|
||||
if ( ! aNucleon ) continue;
|
||||
G4ThreeVector tmpPt = GaussianPt( averagePt2, maxPt2 );
|
||||
ptSum += tmpPt;
|
||||
G4LorentzVector tmp( tmpPt.x(), tmpPt.y(), 0.0, 0.0 );
|
||||
aNucleon->SetMomentum( tmp );
|
||||
if( averagePt2 > 0.0 ) {
|
||||
for ( G4int i = 0; i < numberOfInvolvedNucleons; ++i ) {
|
||||
G4Nucleon* aNucleon = involvedNucleons[i];
|
||||
if ( ! aNucleon ) continue;
|
||||
G4ThreeVector tmpPt = GaussianPt( averagePt2, maxPt2 );
|
||||
ptSum += tmpPt;
|
||||
G4LorentzVector tmp( tmpPt.x(), tmpPt.y(), 0.0, 0.0 );
|
||||
aNucleon->SetMomentum( tmp );
|
||||
}
|
||||
}
|
||||
|
||||
G4double deltaPx = ( ptSum.x() - pResidual.x() ) / numberOfInvolvedNucleons;
|
||||
G4double deltaPy = ( ptSum.y() - pResidual.y() ) / numberOfInvolvedNucleons;
|
||||
G4double deltaPx = ( ptSum.x() - pResidual.x() )*invN;
|
||||
G4double deltaPy = ( ptSum.y() - pResidual.y() )*invN;
|
||||
|
||||
SumMasses = residualMass;
|
||||
for ( G4int i = 0; i < numberOfInvolvedNucleons; i++ ) {
|
||||
for ( G4int i = 0; i < numberOfInvolvedNucleons; ++i ) {
|
||||
G4Nucleon* aNucleon = involvedNucleons[i];
|
||||
if ( ! aNucleon ) continue;
|
||||
G4double px = aNucleon->Get4Momentum().px() - deltaPx;
|
||||
@@ -2830,88 +2843,77 @@ SamplingNucleonKinematics( G4double averagePt2, // input param
|
||||
// Sampling X of nucleon
|
||||
G4double xSum = 0.0;
|
||||
|
||||
for ( G4int i = 0; i < numberOfInvolvedNucleons; i++ ) {
|
||||
for ( G4int i = 0; i < numberOfInvolvedNucleons; ++i ) {
|
||||
G4Nucleon* aNucleon = involvedNucleons[i];
|
||||
if ( ! aNucleon ) continue;
|
||||
|
||||
G4ThreeVector tmpX = GaussianPt( dCor*dCor, 1.0 );
|
||||
//G4double x = tmpX.x() + aNucleon->GetSplitableHadron()->GetDefinition()->GetPDGMass()/SumMasses;
|
||||
G4double x = tmpX.x() + aNucleon->Get4Momentum().e()/SumMasses;
|
||||
if ( x < 0.0 || x > 1.0 ) {
|
||||
|
||||
G4double x = 0.0;
|
||||
if( 0.0 != dCor ) {
|
||||
G4ThreeVector tmpX = GaussianPt( dCor*dCor, 1.0 );
|
||||
x = tmpX.x();
|
||||
}
|
||||
x += aNucleon->Get4Momentum().e()/SumMasses;
|
||||
if ( x < -eps || x > 1.0 + eps ) {
|
||||
success = false;
|
||||
break;
|
||||
}
|
||||
x = std::min(1.0, std::max(x, 0.0));
|
||||
xSum += x;
|
||||
// The energy is in the lab (instead of cms) frame but it will not be used.
|
||||
// The energy is in the lab (instead of cms) frame but it will not be used
|
||||
|
||||
G4LorentzVector tmp( aNucleon->Get4Momentum().x(), aNucleon->Get4Momentum().y(),
|
||||
G4LorentzVector tmp( aNucleon->Get4Momentum().x(),
|
||||
aNucleon->Get4Momentum().y(),
|
||||
x, aNucleon->Get4Momentum().e() );
|
||||
aNucleon->SetMomentum( tmp );
|
||||
}
|
||||
|
||||
if ( xSum < 0.0 || xSum > 1.0 ) success = false;
|
||||
|
||||
if ( xSum < -eps || xSum > 1.0 + eps ) success = false;
|
||||
if ( ! success ) continue;
|
||||
|
||||
//G4double deltaPx = ( ptSum.x() - pResidual.x() ) / numberOfInvolvedNucleons;
|
||||
//G4double deltaPy = ( ptSum.y() - pResidual.y() ) / numberOfInvolvedNucleons;
|
||||
G4double delta = 0.0;
|
||||
if ( residualMassNumber == 0 ) {
|
||||
delta = ( xSum - 1.0 ) / numberOfInvolvedNucleons;
|
||||
} else {
|
||||
delta = 0.0;
|
||||
}
|
||||
G4double delta = ( residualMassNumber == 0 ) ? std::min(xSum - 1.0, 0.0)*invN : 0.0;
|
||||
|
||||
xSum = 1.0;
|
||||
mass2 = 0.0;
|
||||
for ( G4int i = 0; i < numberOfInvolvedNucleons; i++ ) {
|
||||
for ( G4int i = 0; i < numberOfInvolvedNucleons; ++i ) {
|
||||
G4Nucleon* aNucleon = involvedNucleons[i];
|
||||
if ( ! aNucleon ) continue;
|
||||
G4double x = aNucleon->Get4Momentum().pz() - delta;
|
||||
xSum -= x;
|
||||
xSum -= x;
|
||||
|
||||
if ( residualMassNumber == 0 ) {
|
||||
if ( x <= 0.0 || x > 1.0 ) {
|
||||
if ( x <= -eps || x > 1.0 + eps ) {
|
||||
success = false;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
if ( x <= 0.0 || x > 1.0 || xSum <= 0.0 || xSum > 1.0 ) {
|
||||
if ( x <= -eps || x > 1.0 + eps || xSum <= -eps || xSum > 1.0 + eps ) {
|
||||
success = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
G4double px = aNucleon->Get4Momentum().px() - deltaPx;
|
||||
G4double py = aNucleon->Get4Momentum().py() - deltaPy;
|
||||
mass2 += ( sqr( aNucleon->GetSplitableHadron()->GetDefinition()->GetPDGMass() )
|
||||
+ sqr( px ) + sqr( py ) ) / x;
|
||||
G4LorentzVector tmp( px, py, x, aNucleon->Get4Momentum().e() );
|
||||
*/
|
||||
}
|
||||
x = std::min(1.0, std::max(x, eps));
|
||||
|
||||
mass2 += sqr( aNucleon->Get4Momentum().e() ) / x;
|
||||
G4LorentzVector tmp( aNucleon->Get4Momentum().px(), aNucleon->Get4Momentum().py(),
|
||||
|
||||
G4LorentzVector tmp( aNucleon->Get4Momentum().px(),
|
||||
aNucleon->Get4Momentum().py(),
|
||||
x, aNucleon->Get4Momentum().e() );
|
||||
aNucleon->SetMomentum( tmp );
|
||||
}
|
||||
if ( ! success ) continue;
|
||||
xSum = std::min(1.0, std::max(xSum, eps));
|
||||
|
||||
if ( success && residualMassNumber != 0 ) {
|
||||
if ( residualMassNumber > 0 ) {
|
||||
mass2 += ( sqr( residualMass ) + pResidual.perp2() ) / xSum;
|
||||
//mass2 += sqr( residualMass ) / xSum;
|
||||
}
|
||||
|
||||
#ifdef debugPutOnMassShell
|
||||
G4cout << "success " << success << G4endl << " Mt " << std::sqrt( mass2 )/GeV << G4endl;
|
||||
G4cout << "success: " << success << " Mt(GeV)= "
|
||||
<< std::sqrt( mass2 )/GeV << G4endl;
|
||||
#endif
|
||||
|
||||
} while ( ( ! success ) &&
|
||||
++loopCounter < maxNumberOfLoops ); /* Loop checking, 10.08.2015, A.Ribon */
|
||||
if ( loopCounter >= maxNumberOfLoops ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
return ( loopCounter < maxNumberOfLoops );
|
||||
}
|
||||
|
||||
|
||||
@@ -2959,7 +2961,7 @@ CheckKinematics( const G4double sValue, // input parameter
|
||||
<< "\t projectileY targetY " << projectileY << " " << targetY << G4endl;
|
||||
#endif
|
||||
|
||||
for ( G4int i = 0; i < numberOfInvolvedNucleons; i++ ) {
|
||||
for ( G4int i = 0; i < numberOfInvolvedNucleons; ++i ) {
|
||||
G4Nucleon* aNucleon = involvedNucleons[i];
|
||||
if ( ! aNucleon ) continue;
|
||||
G4LorentzVector tmp = aNucleon->Get4Momentum();
|
||||
@@ -3015,7 +3017,7 @@ FinalizeKinematics( const G4double w, // input parame
|
||||
|
||||
G4ThreeVector residual3Momentum( 0.0, 0.0, 1.0 );
|
||||
|
||||
for ( G4int i = 0; i < numberOfInvolvedNucleons; i++ ) {
|
||||
for ( G4int i = 0; i < numberOfInvolvedNucleons; ++i ) {
|
||||
G4Nucleon* aNucleon = involvedNucleons[i];
|
||||
if ( ! aNucleon ) continue;
|
||||
G4LorentzVector tmp = aNucleon->Get4Momentum();
|
||||
|
||||
@@ -883,7 +883,8 @@ class G4FTFSettingDefaultHDP
|
||||
//
|
||||
// baryons
|
||||
//
|
||||
/* JVY, Oct. 31, 2017: Per Alberto R. & Vladimir U., keep this group of parameters FIXED
|
||||
/* JVY, Oct. 31, 2017: Per Alberto R. & Vladimir U., keep this group of parameters FIXED */
|
||||
/* JVY, June 11, 2020: try to open up... */
|
||||
// Process=0 --> Qexchg w/o excitation
|
||||
//
|
||||
HDP.SetDefault( "FTF_BARYON_PROC0_A1", 13.71 );
|
||||
@@ -893,6 +894,7 @@ class G4FTFSettingDefaultHDP
|
||||
HDP.SetDefault( "FTF_BARYON_PROC0_A3", 0.0 );
|
||||
HDP.SetDefault( "FTF_BARYON_PROC0_ATOP", 1.0 );
|
||||
HDP.SetDefault( "FTF_BARYON_PROC0_YMIN", 0.93 );
|
||||
/* */
|
||||
//
|
||||
// Process=1 --> Qexchg w/excitation
|
||||
//
|
||||
@@ -903,7 +905,7 @@ class G4FTFSettingDefaultHDP
|
||||
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
|
||||
@@ -917,7 +919,8 @@ class G4FTFSettingDefaultHDP
|
||||
HDP.SetDefault( "FTF_BARYON_DIFF_DISSO_PROJ", false );
|
||||
HDP.SetDefault( "FTF_BARYON_DIFF_DISSO_TGT", false ); // as in hadr-string-diff-V10-03-07
|
||||
//
|
||||
/* JVY, Oct. 31, 2017: Per Alberto R. & Vladimir U., keep this group of parameters FIXED
|
||||
/* JVY, Oct. 31, 2017: Per Alberto R. & Vladimir U., keep this group of parameters FIXED */
|
||||
/* JVY, June 11, 2020: try to open up... */
|
||||
// Process=4 --> Qexchg w/additional multiplier in excitation
|
||||
//
|
||||
HDP.SetDefault( "FTF_BARYON_PROC4_A1", 0.6 );
|
||||
@@ -927,7 +930,7 @@ class G4FTFSettingDefaultHDP
|
||||
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
|
||||
//
|
||||
@@ -951,7 +954,7 @@ class G4FTFSettingDefaultHDP
|
||||
// JVY, Aug.8, 2018 --> Feb.14, 2019 --> June 25, 2019:
|
||||
// Parameters of participating hadron (pions) excitation
|
||||
//
|
||||
/* JVY, June 25, 2019: For now, keep this group of parameters FIXED
|
||||
/* JVY, June 25, 2019: For now, keep this group of parameters FIXED */
|
||||
// Process=0 --> Qexchg w/o excitation
|
||||
//
|
||||
HDP.SetDefault( "FTF_PION_PROC0_A1", 150.0 );
|
||||
@@ -971,11 +974,18 @@ class G4FTFSettingDefaultHDP
|
||||
HDP.SetDefault( "FTF_PION_PROC1_A3", 0. );
|
||||
HDP.SetDefault( "FTF_PION_PROC1_ATOP", 0. );
|
||||
HDP.SetDefault( "FTF_PION_PROC1_YMIN", 0.0 );
|
||||
/*
|
||||
//
|
||||
// NOTE: Process #2 & 3 are projectile & target diffraction
|
||||
//
|
||||
// Process=2 --> Projectile diffraction
|
||||
//
|
||||
// Q: Would it even make sense to make these configurable ?
|
||||
// The following is hadrcoded:
|
||||
// Projectile Baryon Number > 10 (AbsProjectileBaryonNumber > 10)
|
||||
// ... which is "strange" because projectile is a pion !!!... so it's always OFF
|
||||
// (see also lines 1007-1016)
|
||||
//
|
||||
HDP.SetDefault( "FTF_PION_PROC2_A1", 2.27 );
|
||||
HDP.SetDefault( "FTF_PION_PROC2_B1", 0.5 );
|
||||
HDP.SetDefault( "FTF_PION_PROC2_A2", -98052.0);
|
||||
@@ -983,6 +993,7 @@ class G4FTFSettingDefaultHDP
|
||||
HDP.SetDefault( "FTF_PION_PROC2_A3", 0. );
|
||||
HDP.SetDefault( "FTF_PION_PROC2_ATOP", 0. );
|
||||
HDP.SetDefault( "FTF_PION_PROC2_YMIN", 3.0 );
|
||||
*/
|
||||
//
|
||||
// Process=3 --> Target diffraction
|
||||
//
|
||||
@@ -993,7 +1004,6 @@ class G4FTFSettingDefaultHDP
|
||||
HDP.SetDefault( "FTF_PION_PROC3_A3", 0.08);
|
||||
HDP.SetDefault( "FTF_PION_PROC3_ATOP", 0. );
|
||||
HDP.SetDefault( "FTF_PION_PROC3_YMIN", 2.2 );
|
||||
*/
|
||||
//
|
||||
// projectile and/or target diffraction (dissociation) may be switched ON/OFF
|
||||
//
|
||||
@@ -1006,7 +1016,8 @@ class G4FTFSettingDefaultHDP
|
||||
HDP.SetDefault( "FTF_PION_DIFF_DISSO_PROJ", false );
|
||||
HDP.SetDefault( "FTF_PION_DIFF_DISSO_TGT", false );
|
||||
//
|
||||
/* JVY, June 25, 2019: For now keep this group of parameters FIXED
|
||||
/* JVY, June 25, 2019: For now keep this group of parameters FIXED */
|
||||
/* JVY, June 11, 2020: try to open up... */
|
||||
// Process=4 --> Qexchg w/additional multiplier in excitation
|
||||
//
|
||||
HDP.SetDefault( "FTF_PION_PROC4_A1", 1.0 );
|
||||
@@ -1016,7 +1027,7 @@ class G4FTFSettingDefaultHDP
|
||||
HDP.SetDefault( "FTF_PION_PROC4_A3", 0. );
|
||||
HDP.SetDefault( "FTF_PION_PROC4_ATOP",0. );
|
||||
HDP.SetDefault( "FTF_PION_PROC4_YMIN",2.4 );
|
||||
*/
|
||||
/* */
|
||||
//
|
||||
// NOTE; As of geant4-10-05, all these settings beloe are correct
|
||||
// (and are the same as they were in 10.4.ref06)
|
||||
@@ -1198,7 +1209,7 @@ G4FTFParamCollBaryonProj::G4FTFParamCollBaryonProj()
|
||||
//
|
||||
// Proc=0 --> Qexchg w/o excitation
|
||||
//
|
||||
/* As of Oct. 31, 2017 keep these fixed
|
||||
/* 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 );
|
||||
@@ -1206,8 +1217,9 @@ G4FTFParamCollBaryonProj::G4FTFParamCollBaryonProj()
|
||||
HDP.DeveloperGet( "FTF_BARYON_PROC0_A3", fProc0A3 );
|
||||
HDP.DeveloperGet( "FTF_BARYON_PROC0_ATOP", fProc0Atop );
|
||||
HDP.DeveloperGet( "FTF_BARYON_PROC0_YMIN", fProc0Ymin );
|
||||
*/
|
||||
/* */
|
||||
//
|
||||
/* JVY, June 11, 2020: make configurable
|
||||
fProc0A1 = 13.71;
|
||||
fProc0B1 = 1.75;
|
||||
fProc0A2 = -30.69; // (or -214.5 as in Doc ?)
|
||||
@@ -1215,10 +1227,11 @@ G4FTFParamCollBaryonProj::G4FTFParamCollBaryonProj()
|
||||
fProc0A3 = 0.;
|
||||
fProc0Atop = 1.; // ( or 0.5 as in Doc ?)
|
||||
fProc0Ymin = 0.93; // (or 1.1 as in Doc ?)
|
||||
*/
|
||||
//
|
||||
// Proc=1 --> Qexchg w/excitation
|
||||
//
|
||||
/* As of Oct. 31, 2017 keep these fixed
|
||||
/* 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 );
|
||||
@@ -1226,8 +1239,9 @@ G4FTFParamCollBaryonProj::G4FTFParamCollBaryonProj()
|
||||
HDP.DeveloperGet( "FTF_BARYON_PROC1_A3", fProc1A3 );
|
||||
HDP.DeveloperGet( "FTF_BARYON_PROC1_ATOP", fProc1Atop );
|
||||
HDP.DeveloperGet( "FTF_BARYON_PROC1_YMIN", fProc1Ymin );
|
||||
*/
|
||||
/* */
|
||||
//
|
||||
/* JVY, June 11, 2020: make configurable
|
||||
fProc1A1 = 25.;
|
||||
fProc1B1 = 1.;
|
||||
fProc1A2 = -50.34;
|
||||
@@ -1235,6 +1249,7 @@ G4FTFParamCollBaryonProj::G4FTFParamCollBaryonProj()
|
||||
fProc1A3 = 0.;
|
||||
fProc1Atop = 0.;
|
||||
fProc1Ymin = 1.4;
|
||||
*/
|
||||
//
|
||||
// Proc=2 & Proc=3 for the case ( AbsProjectileBaryonNumber > 10 || NumberOfTargetNucleons > 10 )
|
||||
// (diffraction dissociation)
|
||||
@@ -1247,7 +1262,8 @@ G4FTFParamCollBaryonProj::G4FTFParamCollBaryonProj()
|
||||
//
|
||||
// Proc=4 --> Qexchg "w/additional multiplier" in excitation
|
||||
//
|
||||
/* As of Oct. 31, 2017 keep these fixed
|
||||
/* 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 );
|
||||
@@ -1255,8 +1271,9 @@ G4FTFParamCollBaryonProj::G4FTFParamCollBaryonProj()
|
||||
HDP.DeveloperGet( "FTF_BARYON_PROC4_A3", fProc4A3 );
|
||||
HDP.DeveloperGet( "FTF_BARYON_PROC4_ATOP", fProc4Atop );
|
||||
HDP.DeveloperGet( "FTF_BARYON_PROC4_YMIN", fProc4Ymin );
|
||||
*/
|
||||
//
|
||||
/* */
|
||||
//
|
||||
/* JVY, June 11, 2020: make configurable
|
||||
fProc4A1 = 0.6; // (or 1. as in Doc ?)
|
||||
fProc4B1 = 0.;
|
||||
fProc4A2 = -1.2; // (or -2.01 as in Doc ?)
|
||||
@@ -1264,6 +1281,7 @@ G4FTFParamCollBaryonProj::G4FTFParamCollBaryonProj()
|
||||
fProc4A3 = 0.;
|
||||
fProc4Atop = 0.;
|
||||
fProc4Ymin = 1.4;
|
||||
*/
|
||||
//
|
||||
//
|
||||
HDP.DeveloperGet( "FTF_BARYON_DELTA_PROB_QEXCHG", fDeltaProbAtQuarkExchange );
|
||||
@@ -1356,7 +1374,7 @@ G4FTFParamCollPionProj::G4FTFParamCollPionProj()
|
||||
//
|
||||
// Proc=0 --> Qexchg w/o excitation
|
||||
//
|
||||
/* As of June 25, 2019 keep these fixed
|
||||
/* As of June 25, 2019 keep these fixed */
|
||||
HDP.DeveloperGet( "FTF_PION_PROC0_A1", fProc0A1 );
|
||||
HDP.DeveloperGet( "FTF_PION_PROC0_B1", fProc0B1 );
|
||||
HDP.DeveloperGet( "FTF_PION_PROC0_A2", fProc0A2 );
|
||||
@@ -1364,8 +1382,9 @@ G4FTFParamCollPionProj::G4FTFParamCollPionProj()
|
||||
HDP.DeveloperGet( "FTF_PION_PROC0_A3", fProc0A3 );
|
||||
HDP.DeveloperGet( "FTF_PION_PROC0_ATOP", fProc0Atop );
|
||||
HDP.DeveloperGet( "FTF_PION_PROC0_YMIN", fProc0Ymin );
|
||||
*/
|
||||
/* */
|
||||
//
|
||||
/* JVY, June 11, 2020: make configurable
|
||||
fProc0A1 = 150.0;
|
||||
fProc0B1 = 1.8;
|
||||
fProc0A2 =-247.3;
|
||||
@@ -1373,10 +1392,11 @@ G4FTFParamCollPionProj::G4FTFParamCollPionProj()
|
||||
fProc0A3 = 0.;
|
||||
fProc0Atop = 1.; // ( or 0.5 as in Doc ?)
|
||||
fProc0Ymin = 2.3; // (or 1.1 as in Doc ?)
|
||||
*/
|
||||
//
|
||||
// Proc=1 --> Qexchg w/excitation
|
||||
//
|
||||
/* As of Oct. 31, 2017 keep these fixed
|
||||
/* As of Oct. 31, 2017 keep these fixed */
|
||||
HDP.DeveloperGet( "FTF_PION_PROC1_A1", fProc1A1 );
|
||||
HDP.DeveloperGet( "FTF_PION_PROC1_B1", fProc1B1 );
|
||||
HDP.DeveloperGet( "FTF_PION_PROC1_A2", fProc1A2 );
|
||||
@@ -1384,8 +1404,9 @@ G4FTFParamCollPionProj::G4FTFParamCollPionProj()
|
||||
HDP.DeveloperGet( "FTF_PION_PROC1_A3", fProc1A3 );
|
||||
HDP.DeveloperGet( "FTF_PION_PROC1_ATOP", fProc1Atop );
|
||||
HDP.DeveloperGet( "FTF_PION_PROC1_YMIN", fProc1Ymin );
|
||||
*/
|
||||
//
|
||||
/* */
|
||||
//
|
||||
/* JVY, June 11, 2020: make configurable
|
||||
fProc1A1 = 5.77;
|
||||
fProc1B1 = 0.6;
|
||||
fProc1A2 = -5.77;
|
||||
@@ -1393,10 +1414,17 @@ G4FTFParamCollPionProj::G4FTFParamCollPionProj()
|
||||
fProc1A3 = 0.;
|
||||
fProc1Atop = 0.;
|
||||
fProc1Ymin = 0.0;
|
||||
*/
|
||||
//
|
||||
// Proc=2 --> Projectile diffraction
|
||||
//
|
||||
/* As of Oct. 31, 2017 keep these fixed
|
||||
// Q: Would it even make sense to make these configurable ?
|
||||
// The following is hadrcoded:
|
||||
// Projectile Baryon Number > 10 (AbsProjectileBaryonNumber > 10)
|
||||
// ... which is "strange" because projectile is a pion !!!... so it's always OFF
|
||||
// (see also lines 1007-1016)
|
||||
//
|
||||
/* As of Oct. 31, 2017 keep these fixed
|
||||
HDP.DeveloperGet( "FTF_PION_PROC2_A1", fProc2A1 );
|
||||
HDP.DeveloperGet( "FTF_PION_PROC2_B1", fProc2B1 );
|
||||
HDP.DeveloperGet( "FTF_PION_PROC2_A2", fProc2A2 );
|
||||
@@ -1405,7 +1433,7 @@ G4FTFParamCollPionProj::G4FTFParamCollPionProj()
|
||||
HDP.DeveloperGet( "FTF_PION_PROC2_ATOP", fProc2Atop );
|
||||
HDP.DeveloperGet( "FTF_PION_PROC2_YMIN", fProc2Ymin );
|
||||
*/
|
||||
//
|
||||
// keep fixed so far; see note above
|
||||
fProc2A1 = 2.27;
|
||||
fProc2B1 = 0.5;
|
||||
fProc2A2 =-98052.0;
|
||||
@@ -1416,7 +1444,7 @@ G4FTFParamCollPionProj::G4FTFParamCollPionProj()
|
||||
//
|
||||
// Proc=3 --> Target diffraction
|
||||
//
|
||||
/* As of Oct. 31, 2017 keep these fixed
|
||||
/* As of Oct. 31, 2017 keep these fixed */
|
||||
HDP.DeveloperGet( "FTF_PION_PROC3_A1", fProc3A1 );
|
||||
HDP.DeveloperGet( "FTF_PION_PROC3_B1", fProc3B1 );
|
||||
HDP.DeveloperGet( "FTF_PION_PROC3_A2", fProc3A2 );
|
||||
@@ -1424,8 +1452,9 @@ G4FTFParamCollPionProj::G4FTFParamCollPionProj()
|
||||
HDP.DeveloperGet( "FTF_PION_PROC3_A3", fProc3A3 );
|
||||
HDP.DeveloperGet( "FTF_PION_PROC3_ATOP", fProc3Atop );
|
||||
HDP.DeveloperGet( "FTF_PION_PROC3_YMIN", fProc3Ymin );
|
||||
*/
|
||||
/* */
|
||||
//
|
||||
/* JVY, June 11, 2020: make configurable
|
||||
fProc3A1 = 7.0;
|
||||
fProc3B1 = 0.9;
|
||||
fProc3A2 = -85.28;
|
||||
@@ -1433,6 +1462,7 @@ G4FTFParamCollPionProj::G4FTFParamCollPionProj()
|
||||
fProc3A3 = 0.08;
|
||||
fProc3Atop = 0.;
|
||||
fProc3Ymin = 2.2;
|
||||
*/
|
||||
//
|
||||
// for Proc2 & Proc3, pprojectile or target diffraction can be turned ON/OFF
|
||||
// if num.baryons >10 (which is strange for projectile which is pion !!!)
|
||||
@@ -1442,7 +1472,7 @@ G4FTFParamCollPionProj::G4FTFParamCollPionProj()
|
||||
//
|
||||
// Proc=4 --> Qexchg "w/additional multiplier" in excitation
|
||||
//
|
||||
/* As of Oct. 31, 2017 keep these fixed
|
||||
/* As of Oct. 31, 2017 keep these fixed */
|
||||
HDP.DeveloperGet( "FTF_PION_PROC4_A1", fProc4A1 );
|
||||
HDP.DeveloperGet( "FTF_PION_PROC4_B1", fProc4B1 );
|
||||
HDP.DeveloperGet( "FTF_PION_PROC4_A2", fProc4A2 );
|
||||
@@ -1450,8 +1480,9 @@ G4FTFParamCollPionProj::G4FTFParamCollPionProj()
|
||||
HDP.DeveloperGet( "FTF_PION_PROC4_A3", fProc4A3 );
|
||||
HDP.DeveloperGet( "FTF_PION_PROC4_ATOP", fProc4Atop );
|
||||
HDP.DeveloperGet( "FTF_PION_PROC4_YMIN", fProc4Ymin );
|
||||
*/
|
||||
/* */
|
||||
//
|
||||
/* JVY, June 11, 2020: make configurable
|
||||
fProc4A1 = 1.0;
|
||||
fProc4B1 = 0.;
|
||||
fProc4A2 = -11.02;
|
||||
@@ -1459,6 +1490,7 @@ G4FTFParamCollPionProj::G4FTFParamCollPionProj()
|
||||
fProc4A3 = 0.;
|
||||
fProc4Atop = 0.;
|
||||
fProc4Ymin = 2.4;
|
||||
*/
|
||||
//
|
||||
//
|
||||
HDP.DeveloperGet( "FTF_PION_DELTA_PROB_QEXCHG", fDeltaProbAtQuarkExchange );
|
||||
|
||||
Reference in New Issue
Block a user