Import Geant4 10.3.0.beta source tree

This commit is contained in:
Gabriele Cosmo
2016-06-30 14:12:05 +02:00
parent a654a7ab1f
commit 4ec577e5c4
2021 changed files with 100995 additions and 78277 deletions
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4DiffractiveExcitation.cc 92048 2015-08-14 07:24:57Z gcosmo $
// $Id: G4DiffractiveExcitation.cc 97394 2016-06-02 10:13:06Z gcosmo $
//
// ------------------------------------------------------------
@@ -114,73 +114,76 @@ G4bool G4DiffractiveExcitation::ExciteParticipants( G4VSplitableHadron* proje
G4int TargetPDGcode = target->GetDefinition()->GetPDGEncoding();
G4int absTargetPDGcode = std::abs( TargetPDGcode );
G4double M0target = Ptarget.mag();
//G4double TargetRapidity = Ptarget.rapidity();
G4double TargetRapidity = Ptarget.rapidity();
// Kinematical properties of the interactions
G4LorentzVector Psum = Pprojectile + Ptarget; // 4-momentum in CMS
G4LorentzVector Psum = Pprojectile + Ptarget; // Total 4-momentum in Lab.
G4double S = Psum.mag2();
G4double SqrtS = std::sqrt( S );
//Uzhi_SqrtS = std::sqrt( S );
// Check off-shellness of the participants
G4SampleResonance BrW; // Uzhi Oct. 2014
G4SampleResonance BrW;
G4bool PutOnMassShell( false );
G4double MminProjectile(0.); // Uzhi Oct. 2014
MminProjectile = BrW.GetMinimumMass(projectile->GetDefinition()); // Uzhi Oct. 2014
//G4double M0projectile = MminProjectile; // With de-excitation Uzhi Oct. 2014
//G4double M0projectile = Pprojectile.mag(); // Without de-excitation, see above
G4double MminProjectile = BrW.GetMinimumMass(projectile->GetDefinition());
//G4double M0projectile = MminProjectile; // With de-excitation
//G4double M0projectile = Pprojectile.mag(); // Without de-excitation
if ( M0projectile < MminProjectile )
{
PutOnMassShell = true;
M0projectile = BrW.SampleMass(projectile->GetDefinition(),projectile->GetDefinition()->GetPDGMass() + 5.0*projectile->GetDefinition()->GetPDGWidth());
M0projectile = BrW.SampleMass(projectile->GetDefinition(),
projectile->GetDefinition()->GetPDGMass() +
5.0*projectile->GetDefinition()->GetPDGWidth() );
}
G4double M0projectile2 = M0projectile * M0projectile;
G4double ProjectileDiffStateMinMass = theParameters->GetProjMinDiffMass(); // Uzhi Oct 2014
G4double ProjectileNonDiffStateMinMass = theParameters->GetProjMinNonDiffMass(); // Uzhi Oct 2014
if ( M0projectile > ProjectileDiffStateMinMass ) { // Uzhi Oct 2014
G4double ProjectileDiffStateMinMass = theParameters->GetProjMinDiffMass();
G4double ProjectileNonDiffStateMinMass = theParameters->GetProjMinNonDiffMass();
if ( M0projectile > ProjectileDiffStateMinMass ) {
ProjectileDiffStateMinMass = M0projectile + 220.0*MeV;
ProjectileNonDiffStateMinMass = M0projectile + 220.0*MeV;
if(absProjectilePDGcode > 3000) { // Strange baryon // Uzhi Nov. 2014
ProjectileDiffStateMinMass += 140.0*MeV; // Uzhi Nov. 2014
ProjectileNonDiffStateMinMass += 140.0*MeV; // Uzhi Nov. 2014
} // Uzhi Nov. 2014
if(absProjectilePDGcode > 3000) { // Strange baryon
ProjectileDiffStateMinMass += 140.0*MeV;
ProjectileNonDiffStateMinMass += 140.0*MeV;
}
}
G4double MminTarget(0.); // Uzhi Oct. 2014
MminTarget = BrW.GetMinimumMass(target->GetDefinition()); // Uzhi Oct. 2014
G4double MminTarget = BrW.GetMinimumMass(target->GetDefinition());
if ( M0target < MminTarget )
{
PutOnMassShell = true;
M0target = BrW.SampleMass(target->GetDefinition(),target->GetDefinition()->GetPDGMass() + 5.0*target->GetDefinition()->GetPDGWidth());
M0target = BrW.SampleMass(target->GetDefinition(),
target->GetDefinition()->GetPDGMass() +
5.0*target->GetDefinition()->GetPDGWidth() );
}
G4double M0target2 = M0target * M0target;
G4double TargetDiffStateMinMass = theParameters->GetTarMinDiffMass(); // Uzhi Oct 2014
G4double TargetNonDiffStateMinMass = theParameters->GetTarMinNonDiffMass(); // Uzhi Oct 2014
if ( M0target > TargetDiffStateMinMass ) { // Uzhi Oct 2014
G4double TargetDiffStateMinMass = theParameters->GetTarMinDiffMass();
G4double TargetNonDiffStateMinMass = theParameters->GetTarMinNonDiffMass();
if ( M0target > TargetDiffStateMinMass ) {
TargetDiffStateMinMass = M0target + 220.0*MeV;
TargetNonDiffStateMinMass = M0target + 220.0*MeV;
if(absTargetPDGcode > 3000) { // Strange baryon // Uzhi Nov. 2014
TargetDiffStateMinMass += 140.0*MeV; // Uzhi Nov. 2014
TargetNonDiffStateMinMass += 140.0*MeV; // Uzhi Nov. 2014
} // Uzhi Nov. 2014
if(absTargetPDGcode > 3000) { // Strange baryon
TargetDiffStateMinMass += 140.0*MeV;
TargetNonDiffStateMinMass += 140.0*MeV;
}
};
#ifdef debugFTFexictation
G4cout << "Proj Targ PDGcodes " << ProjectilePDGcode << " " << TargetPDGcode << G4endl
<< "M0projectile Y " << M0projectile << " " << ProjectileRapidity << G4endl;
//G4cout << "M0target Y " << M0target << " " << TargetRapidity << G4endl;
G4cout << "M0target Y " << M0target << " " << TargetRapidity << G4endl;
G4cout << "Pproj " << Pprojectile << G4endl << "Ptarget " << Ptarget << G4endl;
#endif
G4double AveragePt2 = theParameters->GetAveragePt2();
// G4double ProbLogDistrPrD = theParameters->GetProbLogDistrPrD(); // Uzhi Oct 2014 ***
G4double DiffrAveragePt2 =theParameters->GetAvaragePt2ofElasticScattering()*1.5;
// G4double ProbLogDistrPrD = theParameters->GetProbLogDistrPrD(); // It is not clear, is it need?
G4double ProbLogDistr = theParameters->GetProbLogDistr();
G4double SumMasses = M0projectile + M0target; // + 220.0*MeV; // Uzhi Nov. 2014
G4double SumMasses = M0projectile + M0target; // + 220.0*MeV; // Maybe, it can be opened.
// Transform momenta to cms and then rotate parallel to z axis;
G4LorentzRotation toCms( -1 * Psum.boostVector() );
@@ -197,11 +200,10 @@ G4bool G4DiffractiveExcitation::ExciteParticipants( G4VSplitableHadron* proje
G4double PZcms2, PZcms;
#ifdef debugFTFexictation
G4cout << "SqrtS " << SqrtS << G4endl << "M0pr M0tr SumM+220 " << M0projectile << " "
G4cout << "SqrtS " << SqrtS << G4endl << "M0pr M0tr SumM " << M0projectile << " "
<< M0target << " " << SumMasses << G4endl;
#endif
if ( SqrtS < M0projectile + M0target ) return false;
if ( SqrtS < SumMasses ) return false;
// The model cannot work at low energy
@@ -235,14 +237,14 @@ G4bool G4DiffractiveExcitation::ExciteParticipants( G4VSplitableHadron* proje
}
G4double maxPtSquare(0.); // = PZcms2;
//Uzhi_QEnex = 0;
//Uzhi_QEexc = 0;
//Uzhi_targetdiffraction = 0;
//Uzhi_projectilediffraction = 0;
//Uzhi_nondiffraction = 0;
//G4int UzhiPrD( 0 ), UzhiTrD( 0 ), UzhiND( 0 );
/*
Uzhi_QEnex = 0;
Uzhi_QEexc = 0;
Uzhi_targetdiffraction = 0;
Uzhi_projectilediffraction = 0;
Uzhi_nondiffraction = 0;
G4int UzhiPrD( 0 ), UzhiTrD( 0 ), UzhiND( 0 );
*/
#ifdef debugFTFexictation
G4cout << "Start --------------------" << G4endl << "Proj M0 Mdif Mndif " << M0projectile
<< " " << ProjectileDiffStateMinMass << " " << ProjectileNonDiffStateMinMass << G4endl
@@ -254,30 +256,51 @@ G4bool G4DiffractiveExcitation::ExciteParticipants( G4VSplitableHadron* proje
// Charge exchange can be possible
// Getting the values needed for exchange
// Check for possible quark exchange
G4double QeNoExc = theParameters->GetProcProb( 0, ProjectileRapidity );
G4double QeExc = theParameters->GetProcProb( 1, ProjectileRapidity )*theParameters->GetProcProb( 4, ProjectileRapidity );
G4double ProbProjectileDiffraction = theParameters->GetProcProb( 2, ProjectileRapidity );
G4double ProbTargetDiffraction = theParameters->GetProcProb( 3, ProjectileRapidity );
ProjectileRapidity=Pprojectile.rapidity(); // Uzhi March 2016
TargetRapidity=Ptarget.rapidity(); // Uzhi March 2016
// Uzhi March 2016 TargetRapidity was introduced
G4double QeNoExc = theParameters->GetProcProb( 0, ProjectileRapidity - TargetRapidity );
G4double QeExc = theParameters->GetProcProb( 1, ProjectileRapidity - TargetRapidity)*
theParameters->GetProcProb( 4, ProjectileRapidity - TargetRapidity);
G4double ProbProjectileDiffraction = theParameters->GetProcProb( 2, ProjectileRapidity - TargetRapidity);
G4double ProbTargetDiffraction = theParameters->GetProcProb( 3, ProjectileRapidity - TargetRapidity);
if(QeNoExc+QeExc+ProbProjectileDiffraction+ProbTargetDiffraction > 1.) // Uzhi Nov. 2014
#ifdef debugFTFexictation
G4cout << "Proc Probs " << QeNoExc << " " << QeExc << " " << ProbProjectileDiffraction
<< " " << ProbTargetDiffraction << G4endl
<< "ProjectileRapidity " << ProjectileRapidity << G4endl;
//G4int Uzhi; G4cin >> Uzhi;
#endif
if(QeNoExc+QeExc+ProbProjectileDiffraction+ProbTargetDiffraction > 1.)
{QeNoExc=1.0-QeExc-ProbProjectileDiffraction-ProbTargetDiffraction;}
/* =================================== Apr. ========================================= Uzhi 2016
QeNoExc = 0.;
QeExc = 0.;
ProbProjectileDiffraction = 0.0;
ProbTargetDiffraction = 0.0;
//AveragePt2 = 0.;
*/ //=================================== Apr. ========================================= Uzhi 2016
//QeExc*=0.8;
G4double ProbExc( 0.0 );
if ( QeExc + QeNoExc != 0.0 ) ProbExc = QeExc/(QeExc + QeNoExc);
G4double DeltaProbAtQuarkExchange = theParameters->GetDeltaProbAtQuarkExchange();
G4double DeltaMass = G4ParticleTable::GetParticleTable()->FindParticle( 2224 )->GetPDGMass();
//ProbProjectileDiffraction = 0.5; // Uzhi 2016
//ProbTargetDiffraction = 0.5; // Uzhi 2016
G4double ProbOfDiffraction = ProbProjectileDiffraction + ProbTargetDiffraction;
#ifdef debugFTFexictation
G4cout << "Proc Probs " << QeNoExc << " " << QeExc << " " << ProbProjectileDiffraction
<< " " << ProbTargetDiffraction << G4endl
<< "ProjectileRapidity " << ProjectileRapidity << G4endl;
// G4int Uzhi; G4cin >> Uzhi;
//G4int Uzhi; G4cin >> Uzhi;
#endif
G4ParticleDefinition* TestParticle(0); // Uzhi Oct. 2014
G4double MtestPr(0.), MtestTr(0.); // Uzhi Oct. 2014
G4ParticleDefinition* TestParticle(0);
G4double MtestPr(0.), MtestTr(0.);
if ( 1.0 - QeExc - QeNoExc > 0.0 ) {
ProbProjectileDiffraction /= ( 1.0 - QeExc - QeNoExc );
@@ -320,72 +343,59 @@ G4bool G4DiffractiveExcitation::ExciteParticipants( G4VSplitableHadron* proje
{ // ProjQ1 is quark
ProjExchangeQ = ProjQ1;
//------------------------------- Exchange of non-identical quarks is allowed
G4int NpossibleStates=3; // =====================================================
//
NpossibleStates=0; // =====================================================
G4int NpossibleStates=0; // =====================================================
if(ProjQ1 != TargQ1) NpossibleStates++;
if(ProjQ1 != TargQ2) NpossibleStates++;
if(ProjQ1 != TargQ3) NpossibleStates++;
//
G4int Nsampled = G4RandFlat::shootInt( G4long( NpossibleStates ) ) + 1;
//G4cout<<"NpossibleStates Nsampled "<<NpossibleStates<<" "<<Nsampled<<G4endl;
//
NpossibleStates=0;
if(ProjQ1 != TargQ1)
{
NpossibleStates++;
if(NpossibleStates == Nsampled) {TargExchangeQ = TargQ1; TargQ1 = ProjExchangeQ; ProjQ1 = TargExchangeQ;}
}
if(NpossibleStates == Nsampled)
{TargExchangeQ = TargQ1; TargQ1 = ProjExchangeQ; ProjQ1 = TargExchangeQ;}}
if(ProjQ1 != TargQ2)
{
NpossibleStates++;
if(NpossibleStates == Nsampled) {TargExchangeQ = TargQ2; TargQ2 = ProjExchangeQ; ProjQ1 = TargExchangeQ;}
}
if(NpossibleStates == Nsampled)
{TargExchangeQ = TargQ2; TargQ2 = ProjExchangeQ; ProjQ1 = TargExchangeQ;}}
if(ProjQ1 != TargQ3)
{
NpossibleStates++;
if(NpossibleStates == Nsampled) {TargExchangeQ = TargQ3; TargQ3 = ProjExchangeQ; ProjQ1 = TargExchangeQ;}
}
//
//if(Nsampled == 1) {TargExchangeQ = TargQ1; TargQ1 = ProjExchangeQ; ProjQ1 = TargExchangeQ;}
//else if(Nsampled == 2) {TargExchangeQ = TargQ2; TargQ2 = ProjExchangeQ; ProjQ1 = TargExchangeQ;}
//else {TargExchangeQ = TargQ3; TargQ3 = ProjExchangeQ; ProjQ1 = TargExchangeQ;}
if(NpossibleStates == Nsampled)
{TargExchangeQ = TargQ3; TargQ3 = ProjExchangeQ; ProjQ1 = TargExchangeQ;}}
}
else
{ // ProjQ2 is quark
ProjExchangeQ = ProjQ2;
//------------------------------- Exchange of non-identical quarks is allowed
G4int NpossibleStates=3;
//
NpossibleStates=0;
G4int NpossibleStates=0;
if(ProjQ2 != TargQ1) NpossibleStates++;
if(ProjQ2 != TargQ2) NpossibleStates++;
if(ProjQ2 != TargQ3) NpossibleStates++;
//
G4int Nsampled = G4RandFlat::shootInt( G4long( NpossibleStates ) ) + 1;
//
NpossibleStates=0;
if(ProjQ2 != TargQ1)
{
NpossibleStates++;
if(NpossibleStates == Nsampled) {TargExchangeQ = TargQ1; TargQ1 = ProjExchangeQ; ProjQ2 = TargExchangeQ;}
}
if(NpossibleStates == Nsampled)
{TargExchangeQ = TargQ1; TargQ1 = ProjExchangeQ; ProjQ2 = TargExchangeQ;}}
if(ProjQ2 != TargQ2)
{
NpossibleStates++;
if(NpossibleStates == Nsampled) {TargExchangeQ = TargQ2; TargQ2 = ProjExchangeQ; ProjQ2 = TargExchangeQ;}
}
if(NpossibleStates == Nsampled)
{TargExchangeQ = TargQ2; TargQ2 = ProjExchangeQ; ProjQ2 = TargExchangeQ;}}
if(ProjQ2 != TargQ3)
{
NpossibleStates++;
if(NpossibleStates == Nsampled) {TargExchangeQ = TargQ3; TargQ3 = ProjExchangeQ; ProjQ2 = TargExchangeQ;}
}
//
//if(Nsampled == 1) {TargExchangeQ = TargQ1; TargQ1 = ProjExchangeQ; ProjQ2 = TargExchangeQ;}
//else if(Nsampled == 2) {TargExchangeQ = TargQ2; TargQ2 = ProjExchangeQ; ProjQ2 = TargExchangeQ;}
//else {TargExchangeQ = TargQ3; TargQ3 = ProjExchangeQ; ProjQ2 = TargExchangeQ;}
if(NpossibleStates == Nsampled)
{TargExchangeQ = TargQ3; TargQ3 = ProjExchangeQ; ProjQ2 = TargExchangeQ;}}
} // End of if ( ProjQ1 > 0 )
#ifdef debugFTFexictation
@@ -395,9 +405,9 @@ G4bool G4DiffractiveExcitation::ExciteParticipants( G4VSplitableHadron* proje
G4int aProjQ1 = std::abs( ProjQ1 );
G4int aProjQ2 = std::abs( ProjQ2 );
G4bool ProjExcited = false; // Uzhi Oct 2014
G4bool ProjExcited = false;
G4int attempts=0; // Uzhi Oct 2014 start
G4int attempts=0;
while(attempts < 50) /* Loop checking, 10.08.2015, A.Ribon */
{// Determination of a new projectile ID which garanty energy-momentum conservation
attempts++;
@@ -440,8 +450,7 @@ G4bool G4DiffractiveExcitation::ExciteParticipants( G4VSplitableHadron* proje
NewProjCode += 2; // Excited meson
ProjExcited = true;
}
// if ( aProjQ1 != aProjQ2 ) NewProjCode *= ( ProjectilePDGcode / absProjectilePDGcode ); // Uzhi 27 Nov. 2014
// Uzhi 27 Nov. 2014
G4int Qquarks=0;
if ( aProjQ1 == 1 ) {Qquarks -= ProjQ1;}
else if( aProjQ1 == 2 ) {Qquarks += ProjQ1;}
@@ -452,7 +461,6 @@ G4bool G4DiffractiveExcitation::ExciteParticipants( G4VSplitableHadron* proje
else {Qquarks -= ProjQ2/aProjQ2;}
if( Qquarks < 0 ) NewProjCode *=(-1);
// Uzhi 27 Nov. 2014
#ifdef debugFTFexictation
G4cout << "NewProjCode +2 or 0 " << NewProjCode << G4endl;
@@ -465,13 +473,13 @@ G4bool G4DiffractiveExcitation::ExciteParticipants( G4VSplitableHadron* proje
TestParticle = G4ParticleTable::GetParticleTable()->FindParticle( NewProjCode );
if(!TestParticle) continue;
//MminProjectile=TestParticle->GetPDGMass(); // ??????????????????????
MminProjectile=BrW.GetMinimumMass(TestParticle);
if(SqrtS-M0target < MminProjectile) continue;
MtestPr = BrW.SampleMass(TestParticle, TestParticle->GetPDGMass() + 5.0*TestParticle->GetPDGWidth());
// G4ParticleTable::GetParticleTable()->FindParticle( NewProjCode )->GetPDGMass(); // Uzhi 2014
MtestPr = BrW.SampleMass(TestParticle,
TestParticle->GetPDGMass() +
5.0*TestParticle->GetPDGWidth() );
#ifdef debugFTFexictation
G4cout << "TestParticle Name " << NewProjCode << " " << TestParticle->GetParticleName()<< G4endl;
@@ -518,24 +526,17 @@ G4bool G4DiffractiveExcitation::ExciteParticipants( G4VSplitableHadron* proje
if(SqrtS-MtestPr < MminTarget) continue;
MtestTr = BrW.SampleMass(TestParticle,TestParticle->GetPDGMass() + 5.0*TestParticle->GetPDGWidth());
MtestTr = BrW.SampleMass(TestParticle,
TestParticle->GetPDGMass() +
5.0*TestParticle->GetPDGWidth() );
if(SqrtS > MtestPr+MtestTr) break;
} // End of while(attempts < 50)//===============================
if(attempts >= 50) return false; // ==============================
/*
if ( MtestPr > Pprojectile.mag() ) {M0projectile = MtestPr;}
else
{
if ( std::abs( MtestPr - M0projectile ) //projectile->GetDefinition()->GetPDGMass() ) // Uzhi Oct. 2014
< 140.0*MeV ) {
M0projectile = MtestPr;
}
}
*/
if ( MtestPr >= Pprojectile.mag() ) {M0projectile = MtestPr;} // Uzhi 18 Nov. 2014
else if (projectile->GetStatus() != 0 ) {M0projectile = MtestPr;} // Uzhi 18 Nov. 2014
if ( MtestPr >= Pprojectile.mag() ) {M0projectile = MtestPr;}
else if (projectile->GetStatus() != 0 ) {M0projectile = MtestPr;}
#ifdef debugFTFexictation
@@ -546,19 +547,9 @@ G4bool G4DiffractiveExcitation::ExciteParticipants( G4VSplitableHadron* proje
ProjectileDiffStateMinMass = M0projectile + 220.0*MeV; //220 MeV=m_pi+80 MeV
ProjectileNonDiffStateMinMass = M0projectile + 220.0*MeV; //220 MeV=m_pi+80 MeV
if ( MtestTr >= Ptarget.mag() ) {M0target = MtestTr;} // Uzhi 18 Nov. 2014
else if (target->GetStatus() != 0 ) {M0target = MtestTr;} // Uzhi 18 Nov. 2014
/*
M0target = MtestTr; // Uzhi 18 Nov. 2014
if ( MtestTr > Ptarget.mag() ) {M0target = MtestTr;}
else
{
if ( std::abs( MtestTr - M0target ) // target->GetDefinition()->GetPDGMass() ) Uzhi Oct. 2014
< 140.0*MeV ) {
M0target = MtestTr;
}
}
*/
if ( MtestTr >= Ptarget.mag() ) {M0target = MtestTr;}
else if (target->GetStatus() != 0 ) {M0target = MtestTr;}
M0target2 = M0target * M0target;
#ifdef debugFTFexictation
@@ -569,11 +560,11 @@ M0target = MtestTr;
TargetNonDiffStateMinMass = M0target + 220.0*MeV; // 220 MeV=m_pi+80 MeV;
} else { // of the if ( absProjectilePDGcode < 1000 ) ;
// The projectile is baryon now
// The projectile is baryon now ===========================================
G4double Same = theParameters->GetProbOfSameQuarkExchange(); //0.3; //0.5; 0.
// G4bool ProjDeltaHasCreated( false ); // Uzhi Oct. 2014
// G4bool TargDeltaHasCreated( false ); // Uzhi Oct. 2014
// G4bool ProjDeltaHasCreated( false ); // Uzhi 2016
// G4bool TargDeltaHasCreated( false ); // Uzhi 2016
G4double Ksi = G4UniformRand();
if ( G4UniformRand() < 0.5 ) { // Sampling exchange quark from proj. or targ.
@@ -587,18 +578,28 @@ M0target = MtestTr;
ProjExchangeQ = ProjQ3;
}
if ( ProjExchangeQ != TargQ1 || G4UniformRand() < Same ) {
TargExchangeQ = TargQ1; TargQ1 = ProjExchangeQ; ProjExchangeQ = TargExchangeQ;
} else {
if ( ProjExchangeQ != TargQ2 || G4UniformRand() < Same ) {
TargExchangeQ = TargQ2; TargQ2 = ProjExchangeQ; ProjExchangeQ = TargExchangeQ;
#ifdef debugFTFexictation
G4cout << "Exchange Qs Pr Tr " << ProjExchangeQ << " ";
#endif
G4int count(0), MaxCount(100); // Uzhi Oct. 2015 -------------
do {
if ( ProjExchangeQ != TargQ1 || G4UniformRand() < Same ) {
TargExchangeQ = TargQ1; TargQ1 = ProjExchangeQ; ProjExchangeQ = TargExchangeQ;
} else {
TargExchangeQ = TargQ3; TargQ3 = ProjExchangeQ; ProjExchangeQ = TargExchangeQ;
if ( ProjExchangeQ != TargQ2 || G4UniformRand() < Same ) {
TargExchangeQ = TargQ2; TargQ2 = ProjExchangeQ; ProjExchangeQ = TargExchangeQ;
} else {
TargExchangeQ = TargQ3; TargQ3 = ProjExchangeQ; ProjExchangeQ = TargExchangeQ;
}
}
}
count++;
} while((TargExchangeQ == 0) && (count < MaxCount));
if(count >= MaxCount) return false; // Uzhi March 2016 -------------
#ifdef debugFTFexictation
G4cout << "Exchange Qs Pr Tr " << ProjExchangeQ << " " << TargExchangeQ << G4endl;
G4cout << TargExchangeQ << G4endl; // Uzhi March 2016
#endif
if ( Ksi < 0.333333 ) {
@@ -618,15 +619,21 @@ M0target = MtestTr;
} else {
TargExchangeQ = TargQ3;
}
if ( TargExchangeQ != ProjQ1 || G4UniformRand() < Same ) {
ProjExchangeQ = ProjQ1; ProjQ1 = TargExchangeQ; TargExchangeQ = ProjExchangeQ;
} else {
if ( TargExchangeQ != ProjQ2 || G4UniformRand() < Same ) {
ProjExchangeQ = ProjQ2; ProjQ2 = TargExchangeQ; TargExchangeQ = ProjExchangeQ;
G4int count(0), MaxCount(100); // Uzhi March 2016 -------------
do {
if ( TargExchangeQ != ProjQ1 || G4UniformRand() < Same ) {
ProjExchangeQ = ProjQ1; ProjQ1 = TargExchangeQ; TargExchangeQ = ProjExchangeQ;
} else {
ProjExchangeQ = ProjQ3; ProjQ3 = TargExchangeQ; TargExchangeQ = ProjExchangeQ;
if ( TargExchangeQ != ProjQ2 || G4UniformRand() < Same ) {
ProjExchangeQ = ProjQ2; ProjQ2 = TargExchangeQ; TargExchangeQ = ProjExchangeQ;
} else {
ProjExchangeQ = ProjQ3; ProjQ3 = TargExchangeQ; TargExchangeQ = ProjExchangeQ;
}
}
}
count++;
} while((ProjExchangeQ == 0) && (count < MaxCount));
if(count >= MaxCount) return false; // Uzhi March 2016 -------------
if ( Ksi < 0.333333 ) {
TargQ1 = TargExchangeQ;
@@ -641,113 +648,191 @@ M0target = MtestTr;
NewProjCode = NewNucleonId( ProjQ1, ProjQ2, ProjQ3 );
NewTargCode = NewNucleonId( TargQ1, TargQ2, TargQ3 );
G4int attempts=0; // Uzhi Oct 2014 start
while(attempts < 50) /* Loop checking, 10.08.2015, A.Ribon */
{// Determination of a new projectile ID which garanty energy-momentum conservation
attempts++;
if ( ProjQ1 == ProjQ2 && ProjQ1 == ProjQ3 ) {
NewProjCode += 2; // ProjDeltaHasCreated = true; // Uzhi Oct. 2014
NewProjCode += 2; // ProjDeltaHasCreated = true;
} else if ( projectile->GetDefinition()->GetPDGiIsospin() == 3 ) { // Projectile was Delta
if ( G4UniformRand() > DeltaProbAtQuarkExchange ) {
NewProjCode += 2; //ProjDeltaHasCreated = true; // Uzhi Oct. 2014
NewProjCode += 2; //ProjDeltaHasCreated = true;
} else {
NewProjCode += 0; //ProjDeltaHasCreated = false; // Uzhi Oct. 2014
NewProjCode += 0; //ProjDeltaHasCreated = false;
}
} else { // Projectile was Nucleon
if ( G4UniformRand() < DeltaProbAtQuarkExchange && SqrtS > DeltaMass + M0target ) {
NewProjCode += 2; //ProjDeltaHasCreated = true; // Uzhi Oct. 2014
NewProjCode += 2; //ProjDeltaHasCreated = true;
} else {
NewProjCode += 0; //ProjDeltaHasCreated = false; // Uzhi Oct. 2014
NewProjCode += 0; //ProjDeltaHasCreated = false;
}
}
if ( TargQ1 == TargQ2 && TargQ1 == TargQ3 ) {
NewTargCode += 2; //TargDeltaHasCreated = true; // Uzhi Oct. 2014
NewTargCode += 2; //TargDeltaHasCreated = true;
} else if ( target->GetDefinition()->GetPDGiIsospin() == 3 ) { // Target was Delta
if ( G4UniformRand() > DeltaProbAtQuarkExchange ) {
NewTargCode += 2; //TargDeltaHasCreated = true; // Uzhi Oct. 2014
NewTargCode += 2; //TargDeltaHasCreated = true;
} else {
NewTargCode += 0; //TargDeltaHasCreated = false; // Uzhi Oct. 2014
NewTargCode += 0; //TargDeltaHasCreated = false;
}
} else { // Target was Nucleon
if ( G4UniformRand() < DeltaProbAtQuarkExchange && SqrtS > M0projectile + DeltaMass ) {
NewTargCode += 2; //TargDeltaHasCreated = true; // Uzhi Oct. 2014
NewTargCode += 2; //TargDeltaHasCreated = true;
} else {
NewTargCode += 0; //TargDeltaHasCreated = false; // Uzhi Oct. 2014
NewTargCode += 0; //TargDeltaHasCreated = false;
}
}
#ifdef debugFTFexictation
G4cout << "NewProjCode NewTargCode " << NewProjCode << " " << NewTargCode << G4endl;
// G4int Uzhi; G4cin >> Uzhi;
//G4int Uzhi; G4cin >> Uzhi;
#endif
if ( absProjectilePDGcode == NewProjCode && absTargetPDGcode == NewTargCode ) {
} // Nothing was changed! It is not right!?
// Forming baryons
/*
if ( G4UniformRand() > 0.5 ) { // Uzhi Oct. 2014
ProbProjectileDiffraction = 0.0; ProbTargetDiffraction = 1.0;
} else {
ProbProjectileDiffraction = 1.0; ProbTargetDiffraction = 0.0;
}
*/
/*
if ( ProjDeltaHasCreated ) {
if ( G4UniformRand() > 0.5 ) {
ProbProjectileDiffraction = 0.0; ProbTargetDiffraction = 1.0;
} else {
ProbProjectileDiffraction = 1.0; ProbTargetDiffraction = 0.0;
// Uzhi March 2016 - Oct. 2015
if ( G4UniformRand() < 0.5 ) { // Determination mass of Proj + Targ, or Tart+Proj?
// --------------------------------------------------------------------------------- Proj
//G4cout<<"Pr status NoC "<<projectile->GetStatus()<<" "<<projectile->GetSoftCollisionCount()<<G4endl;
//2016 if(((projectile->GetStatus() == 1) && (projectile->GetSoftCollisionCount() == 0)) ||
//2016 ((projectile->GetStatus() == 2) && (projectile->GetDefinition()->GetPDGiIsospin() == 1)) )
if((projectile->GetStatus() == 1) || (projectile->GetStatus() == 2)) // Uzhi 2016
{ // Mass is determined only at the first quark exchange
TestParticle = G4ParticleTable::GetParticleTable()->FindParticle( NewProjCode );
if(!TestParticle) return false;
//G4cout<<"Pr "<<TestParticle->GetParticleName()<<G4endl;
MminProjectile=BrW.GetMinimumMass(TestParticle);
if(SqrtS-M0target < MminProjectile) return false;
if( TestParticle->GetPDGWidth() == 0. )
{ MtestPr = BrW.SampleMass(TestParticle,TestParticle->GetPDGMass());}
else
{
G4int attempts=0;
while(attempts < 50)
{// Determination of a new projectile mass which garanty energy-momentum conservation
attempts++;
MtestPr = BrW.SampleMass(TestParticle,
TestParticle->GetPDGMass() +
5.0*TestParticle->GetPDGWidth() );
if(SqrtS < MtestPr + M0target) {continue;}
else {break; } // Uzhi March 2016
// if(SqrtS > MtestPr + M0target + 140.0*MeV) break;
}
}
if(attempts >= 50) return false;
}
} // End of the projectile mass determination
// --------------------------------------------------------------------------------- Targ
//G4cout<<"Tr statusNoC "<<target->GetStatus()<<" "<<target->GetSoftCollisionCount()<<G4endl;
//2016 if(((target->GetStatus() == 1) && (target->GetSoftCollisionCount() == 0)) ||
//2016 ((target->GetStatus() == 2) && (target->GetDefinition()->GetPDGiIsospin() == 1)) )
if((target->GetStatus() == 1) || (target->GetStatus() == 2)) // 2016
{ // Mass is determined only at the first quark exchange
TestParticle = G4ParticleTable::GetParticleTable()->FindParticle( NewTargCode );
if(!TestParticle) return false;
//G4cout<<"Tr "<<TestParticle->GetParticleName()<<G4endl;
if ( TargDeltaHasCreated ) {
if ( G4UniformRand() > 0.5 ) {
ProbProjectileDiffraction = 1.0; ProbTargetDiffraction = 0.0;
} else {
ProbProjectileDiffraction = 0.0; ProbTargetDiffraction = 1.0;
MminTarget=BrW.GetMinimumMass(TestParticle);
if(SqrtS-MtestPr < MminTarget) return false;
if( TestParticle->GetPDGWidth() == 0. )
{ MtestTr = BrW.SampleMass(TestParticle,TestParticle->GetPDGMass());}
else
{
G4int attempts=0;
while(attempts < 50)
{// Determination of a new target mass which garanty energy-momentum conservation
attempts++;
MtestTr = BrW.SampleMass(TestParticle,
TestParticle->GetPDGMass() +
5.0*TestParticle->GetPDGWidth() );
if(SqrtS < MtestPr + MtestTr) {continue;}
else {break; } // Uzhi March 2016
// if(SqrtS > MtestPr+MtestTr+140.*MeV) break;
}
}
*/
// --------------------------------------------------------------------------------- Proj
TestParticle = G4ParticleTable::GetParticleTable()->FindParticle( NewProjCode );
if(!TestParticle) continue;
if(attempts >= 50) return false;
}
} // End of the mass determination
MminProjectile=BrW.GetMinimumMass(TestParticle);
} else {
// --------------------------------------------------------------------------------- Targ
//G4cout<<"Tr statusNoC "<<target->GetStatus()<<" "<<target->GetSoftCollisionCount()<<G4endl;
//2016 if(((target->GetStatus() == 1) && (target->GetSoftCollisionCount() == 0)) ||
//2016 ((target->GetStatus() == 2) && (target->GetDefinition()->GetPDGiIsospin() == 1)) )
if((target->GetStatus() == 1) || (target->GetStatus() == 2)) // 2016
{ // Mass is determined only at the first quark exchange
TestParticle = G4ParticleTable::GetParticleTable()->FindParticle( NewTargCode );
if(!TestParticle) return false;
//G4cout<<"Tr "<<TestParticle->GetParticleName()<<G4endl;
if(SqrtS-M0target < MminProjectile) continue;
MminTarget=BrW.GetMinimumMass(TestParticle);
if(SqrtS-M0projectile < MminTarget) return false;
MtestPr = BrW.SampleMass(TestParticle,TestParticle->GetPDGMass() + 5.0*TestParticle->GetPDGWidth());
if( TestParticle->GetPDGWidth() == 0. )
{ MtestTr = BrW.SampleMass(TestParticle,TestParticle->GetPDGMass());}
else
{
G4int attempts=0;
while(attempts < 50)
{// Determination of a new target mass which garanty energy-momentum conservation
attempts++;
MtestTr = BrW.SampleMass(TestParticle,
TestParticle->GetPDGMass() +
5.0*TestParticle->GetPDGWidth() );
if(SqrtS < M0projectile + MtestTr) {continue;}
else {break; } // Uzhi March 2016
// if(SqrtS > M0projectile + MtestTr+140.*MeV) break;
}
if(attempts >= 50) return false;
}
} // End of the mass determination
// --------------------------------------------------------------------------------- Proj
//G4cout<<"Pr status NoC "<<projectile->GetStatus()<<" "<<projectile->GetSoftCollisionCount()<<G4endl;
//2016 if(((projectile->GetStatus() == 1) && (projectile->GetSoftCollisionCount() == 0)) ||
//2016 ((projectile->GetStatus() == 2) && (projectile->GetDefinition()->GetPDGiIsospin() == 1)) )
if((projectile->GetStatus() == 1) || (projectile->GetStatus() == 2)) // 2016
{ // Mass is determined only at the first quark exchange
TestParticle = G4ParticleTable::GetParticleTable()->FindParticle( NewProjCode );
if(!TestParticle) return false;
//G4cout<<"Pr "<<TestParticle->GetParticleName()<<G4endl;
// --------------------------------------------------------------------------------- Targ
TestParticle = G4ParticleTable::GetParticleTable()->FindParticle( NewTargCode );
if(!TestParticle) continue;
MminProjectile=BrW.GetMinimumMass(TestParticle);
if(SqrtS-MtestTr < MminProjectile) return false;
MminTarget=BrW.GetMinimumMass(TestParticle);
if(SqrtS-MtestPr < MminTarget) continue;
MtestTr = BrW.SampleMass(TestParticle,TestParticle->GetPDGMass() + 5.0*TestParticle->GetPDGWidth());
if(SqrtS > MtestPr+MtestTr) break;
} // End of while(attempts < 50)//===============================
if(attempts >= 50) return false; // ==============================
if ( MtestPr >= Pprojectile.mag() ) {M0projectile = MtestPr;}
else if (projectile->GetStatus() != 0 ) {M0projectile = MtestPr;} // Uzhi 18 Nov. 2014
M0projectile2 = M0projectile * M0projectile;
ProjectileDiffStateMinMass = M0projectile + 220.0*MeV; //220 MeV=m_pi+80 MeV
ProjectileNonDiffStateMinMass = M0projectile + 220.0*MeV; //220 MeV=m_pi+80 MeV
if ( MtestTr >= Ptarget.mag() ) {M0target = MtestTr;}
else if (target->GetStatus() != 0 ) {M0target = MtestTr;} // Uzhi 18 Nov. 2014
M0target2 = M0target * M0target;
TargetDiffStateMinMass = M0target + 220.0*MeV; //220 MeV=m_pi+80 MeV;
TargetNonDiffStateMinMass = M0target + 220.0*MeV; //220 MeV=m_pi+80 MeV;
if( TestParticle->GetPDGWidth() == 0. )
{ MtestPr = BrW.SampleMass(TestParticle,TestParticle->GetPDGMass());}
else
{
G4int attempts=0;
while(attempts < 50)
{// Determination of a new projectile mass which garanty energy-momentum conservation
attempts++;
MtestPr = BrW.SampleMass(TestParticle,
TestParticle->GetPDGMass() +
5.0*TestParticle->GetPDGWidth() );
if(SqrtS < MtestPr + MtestTr) {continue;} // Uzhi March 2016
else {break; }
// Uzhi if(SqrtS > MtestPr + MtestTr + 140.0*MeV) break;
}
if(attempts >= 50) return false;
}
} // End of the projectile mass determination
}
// End of Uzhi March 2016 - Oct. 2015
if ( MtestPr != 0.) { // Uzhi March 2016
M0projectile = MtestPr;
M0projectile2 = M0projectile * M0projectile;
ProjectileDiffStateMinMass = M0projectile + 220.0*MeV; //220 MeV=m_pi+80 MeV
ProjectileNonDiffStateMinMass = M0projectile + 220.0*MeV; //220 MeV=m_pi+80 MeV
}
if ( MtestTr != 0.) { // Uzhi March 2016
M0target = MtestTr;
M0target2 = M0target * M0target;
TargetDiffStateMinMass = M0target + 220.0*MeV; //220 MeV=m_pi+80 MeV;
TargetNonDiffStateMinMass = M0target + 220.0*MeV; //220 MeV=m_pi+80 MeV;
}
} // End of if ( absProjectilePDGcode < 1000 )
//--------------------------------------------------------------------------------------
@@ -777,18 +862,25 @@ M0target = MtestTr;
Ptarget.setPz( -PZcms );
Ptarget.setE( std::sqrt( M0target2 + PZcms2 ) );
if(projectile->GetStatus() != 0 ) projectile->SetStatus(2); // Uzhi 18 Nov. 2014
if(target->GetStatus() != 0 ) target->SetStatus(2); // Uzhi 18 Nov. 2014
if(projectile->GetStatus() != 0 ) projectile->SetStatus(2);
if(target->GetStatus() != 0 ) target->SetStatus(2);
#ifdef debugFTFexictation
G4cout << "Proj Targ and Proj+Targ in CMS" << G4endl << Pprojectile << G4endl << Ptarget
<< G4endl << Pprojectile + Ptarget << G4endl;
G4cout<<"Mpr "<<Pprojectile.mag()<<" Mtr "<<Ptarget.mag()<<G4endl;
#endif
//--------------------- Check for possible excitation of the participants -------------------
if((SqrtS < M0projectile + TargetDiffStateMinMass) || // Uzhi Oct 2014
if((SqrtS < M0projectile + TargetDiffStateMinMass) || // Uzhi 2016
(SqrtS < ProjectileDiffStateMinMass + M0target) ||
(ProbOfDiffraction == 0.) ) ProbExc=0.;// Uzhi Oct 2014
(ProbOfDiffraction == 0.) ) ProbExc=0.;// Uzhi 2016
// if((SqrtS < ProjectileDiffStateMinMass + TargetDiffStateMinMass) && (ProbExc != 0.)) // Uzhi March 2016
// {
// ProbProjectileDiffraction /= ProbOfDiffraction;
// ProbTargetDiffraction /= ProbOfDiffraction;
// }
if ( G4UniformRand() > ProbExc ) { // Make elastic scattering
@@ -819,9 +911,9 @@ M0target = MtestTr;
G4cout << "Make excitation of new hadrons" << G4endl;
#endif
// Redefinition of ProbOfDiffraction because the probabilities are changed due to quark exchange
// Redefinition of ProbOfDiffraction because the probabilities may be changed due to quark exchange
ProbOfDiffraction = ProbProjectileDiffraction + ProbTargetDiffraction; // Uzhi Oct. 2014
ProbOfDiffraction = ProbProjectileDiffraction + ProbTargetDiffraction;
if ( ProbOfDiffraction != 0.0 ) {
ProbProjectileDiffraction /= ProbOfDiffraction;
ProbTargetDiffraction /= ProbOfDiffraction;
@@ -877,12 +969,12 @@ M0target = MtestTr;
G4cout << "projectile diffraction" << G4endl;
#endif
//UzhiPrD++;
// UzhiPrD++;
do { // while ( ( Pprojectile + Qmomentum ).mag2() < ProjectileDiffStateMinMass2 )
//Uzhi_projectilediffraction = 1;
//Uzhi_targetdiffraction = 0;
// Uzhi_projectilediffraction = 1;
// Uzhi_targetdiffraction = 0;
//Uzhi_Mx2 = 1.0;
// Generate pt and mass of projectile
@@ -907,7 +999,8 @@ M0target = MtestTr;
maxPtSquare = PZcms2;
Qmomentum = G4LorentzVector( GaussianPt( AveragePt2, maxPtSquare ), 0 );
// Qmomentum = G4LorentzVector( GaussianPt( AveragePt2/2.*0.01, maxPtSquare ), 0 ); // Uzhi 28 May 2016
Qmomentum = G4LorentzVector( GaussianPt( DiffrAveragePt2, maxPtSquare ), 0 ); // Uzhi 28 May 2016
Pt2 = G4ThreeVector( Qmomentum.vect() ).mag2();
ProjMassT2 = ProjectileDiffStateMinMass2 + Pt2;
@@ -923,8 +1016,10 @@ M0target = MtestTr;
PZcms = std::sqrt( PZcms2 );
PMinusMin = std::sqrt( ProjMassT2 + PZcms2 ) - PZcms;
PMinusMax = SqrtS - TargMassT;
// PMinusMax = PMinusMin + 2.*PZcms; // Uzhi March 2016
PMinusMax = SqrtS - TargMassT; // Uzhi March 2016
// PMinusNew = PMinusMax; //ChooseP( PMinusMin, PMinusMax ); ==== Apr. 19 ===== Uzhi 2016
PMinusNew = ChooseP( PMinusMin, PMinusMax );
TMinusNew = SqrtS - PMinusNew;
@@ -933,15 +1028,12 @@ M0target = MtestTr;
Qplus = Ptarget.plus() - TPlusNew;
Qmomentum.setPz( (Qplus - Qminus)/2 );
Qmomentum.setE( (Qplus + Qminus)/2 );
} while ( ( Pprojectile + Qmomentum ).mag2() < ProjectileDiffStateMinMass2 ); /* Loop checking, 10.08.2015, A.Ribon */
/* Loop checking, 10.08.2015, A.Ribon */
} while ( ( Pprojectile + Qmomentum ).mag2() < ProjectileDiffStateMinMass2 );
// || ( ( Pprojectile + Qmomentum ).pz() < 0.)); // Uzhi March 2016
// Repeat the sampling because there was not any excitation
// projectile->SetStatus( 1*projectile->GetStatus() ); // Uzhi Oct 2014
if(projectile->GetStatus() == 2) projectile->SetStatus(1); // Uzhi Oct 2014
if((target->GetStatus() == 1) && (target->GetSoftCollisionCount() == 0)) // Uzhi Oct 2014
target->SetStatus(2); // Uzhi Oct 2014
projectile->SetStatus(0);
} else { // Target diffraction
@@ -949,12 +1041,12 @@ M0target = MtestTr;
G4cout << "Target diffraction" << G4endl;
#endif
//UzhiTrD++;
// UzhiTrD++;
do { // while ( ( Ptarget - Qmomentum ).mag2() < TargetDiffStateMinMass2 )
//Uzhi_projectilediffraction = 0;
//Uzhi_targetdiffraction = 1;
// Uzhi_projectilediffraction = 0;
// Uzhi_targetdiffraction = 1;
//Uzhi_Mx2 = 1.0;
// Generate pt and target mass
@@ -981,7 +1073,8 @@ M0target = MtestTr;
maxPtSquare = PZcms2;
Qmomentum = G4LorentzVector( GaussianPt( AveragePt2, maxPtSquare ), 0 );
// Qmomentum = G4LorentzVector( GaussianPt( AveragePt2/2.*0.01, maxPtSquare ), 0 ); // Uzhi 28 May 2016
Qmomentum = G4LorentzVector( GaussianPt( DiffrAveragePt2, maxPtSquare ), 0 ); // Uzhi 28 May 2016
Pt2 = G4ThreeVector( Qmomentum.vect() ).mag2();
ProjMassT2 = M0projectile2 + Pt2;
@@ -997,8 +1090,8 @@ M0target = MtestTr;
PZcms = std::sqrt( PZcms2 );
TPlusMin = std::sqrt( TargMassT2 + PZcms2 ) - PZcms;
//TPlusMax = std::sqrt( TargMassT2 + PZcms2 ) + PZcms;
TPlusMax = SqrtS - ProjMassT;
// TPlusMax = TPlusMin + 2.*PZcms; // Uzhi March 2016
TPlusMax = SqrtS - ProjMassT; // Uzhi March 2016
TPlusNew = ChooseP( TPlusMin, TPlusMax );
//TPlusNew = TPlusMin;
@@ -1009,15 +1102,12 @@ M0target = MtestTr;
Qminus = PMinusNew - Pprojectile.minus();
Qmomentum.setPz( (Qplus - Qminus)/2 );
Qmomentum.setE( (Qplus + Qminus)/2 );
} while ( ( Ptarget - Qmomentum ).mag2() < TargetDiffStateMinMass2 ); /* Loop checking, 10.08.2015, A.Ribon */
/* Loop checking, 10.08.2015, A.Ribon */
} while ( ( Ptarget - Qmomentum ).mag2() < TargetDiffStateMinMass2 );
// || ( ( Pprojectile + Qmomentum ).pz() < 0.)); //Uzhi March 2016
// Repeat the sampling because there was not any excitation
// target->SetStatus( 1*target->GetStatus() ); // Uzhi Oct 2014
if((projectile->GetStatus() == 1) && (projectile->GetSoftCollisionCount() == 0)) // Uzhi Oct 2014
projectile->SetStatus(2); // Uzhi Oct 2014
if(target->GetStatus() == 2) target->SetStatus(1); // Uzhi Oct 2014
target->SetStatus(0); // Uzhi March 2016
} // End of if ( G4UniformRand() < ProbProjectileDiffraction )
@@ -1029,10 +1119,11 @@ M0target = MtestTr;
//UzhiND++;
//Uzhi_QEnex++;
//Uzhi_nondiffraction++;
do { // while ( ( Pprojectile + Qmomentum ).mag2() < ProjectileNonDiffStateMinMass2 || ...
//Uzhi_projectilediffraction = 0;
//Uzhi_targetdiffraction = 0;
// Uzhi_projectilediffraction = 0;
// Uzhi_targetdiffraction = 0;
//Uzhi_Mx2 = 1.0;
// Generate pt and masses
@@ -1057,7 +1148,7 @@ M0target = MtestTr;
maxPtSquare = PZcms2;
Qmomentum = G4LorentzVector( GaussianPt( AveragePt2, maxPtSquare ), 0 );
Qmomentum = G4LorentzVector( GaussianPt( AveragePt2, maxPtSquare ), 0 ); // 0.6
Pt2 = G4ThreeVector( Qmomentum.vect() ).mag2();
ProjMassT2 = ProjectileNonDiffStateMinMass2 + Pt2;
@@ -1073,30 +1164,19 @@ M0target = MtestTr;
PZcms = std::sqrt( PZcms2 );
PMinusMin = std::sqrt( ProjMassT2 + PZcms2 ) - PZcms;
//PMinusMax = std::sqrt( ProjMassT2 + PZcms2 ) + PZcms;
//PMinusMax = std::sqrt( ProjMassT2 + PZcms2 ) + PZcms; // Uzhi 2016
PMinusMax = SqrtS - TargMassT;
TPlusMin = std::sqrt( TargMassT2 + PZcms2 ) - PZcms;
//TPlusMax = std::sqrt( TargMassT2 + PZcms2 ) + PZcms;
TPlusMax = SqrtS - ProjMassT; // Uzhi 18 Sept. 2014
/*
if ( G4UniformRand() < ProbLogDistrPrD ) { // Uzhi Oct 2014
PMinusNew = ChooseP( PMinusMin, PMinusMax );
} else {
PMinusNew = ( PMinusMax - PMinusMin )*G4UniformRand() + PMinusMin;
}
// Qminus = PMinusNew - Pprojectile.minus();
*/
// TPlusMax = SqrtS - PMinusNew;
TPlusMax = SqrtS - ProjMassT; // Uzhi 2016
if ( G4UniformRand() < ProbLogDistr ) {
PMinusNew = ChooseP( PMinusMin, PMinusMax );
TPlusNew = ChooseP( TPlusMin, TPlusMax );
TPlusNew = ChooseP( TPlusMin, TPlusMax );
} else {
PMinusNew = ( PMinusMax - PMinusMin )*G4UniformRand() + PMinusMin;
TPlusNew = ( TPlusMax - TPlusMin )*G4UniformRand() + TPlusMin;
TPlusNew = ( TPlusMax - TPlusMin )*G4UniformRand() + TPlusMin;
}
Qminus = PMinusNew - Pprojectile.minus();
@@ -1106,10 +1186,10 @@ M0target = MtestTr;
Qmomentum.setE( (Qplus + Qminus)/2 );
#ifdef debugFTFexictation
G4cout << ( Pprojectile + Qmomentum ).mag2() << " " << ProjectileNonDiffStateMinMass2
<< G4endl << ( Ptarget - Qmomentum ).mag2() << " "
<< TargetNonDiffStateMinMass2 << G4endl;
G4cout<<"To continue - enter any integer"<<G4endl;
G4cout <<"Sampled: Mpr, MdifPr, Mtr, MdifTr "<<G4endl
<< ( Pprojectile + Qmomentum ).mag() << " " << ProjectileNonDiffStateMinMass
<< G4endl << ( Ptarget - Qmomentum ).mag() << " "<< TargetNonDiffStateMinMass << G4endl;
// G4cout<<"To continue - enter any integer"<<G4endl;
// G4int Uzhi; G4cin >> Uzhi;
#endif
@@ -1117,8 +1197,8 @@ M0target = MtestTr;
( Ptarget - Qmomentum ).mag2() < TargetNonDiffStateMinMass2 || // ); //
( Pprojectile + Qmomentum ).pz() < 0.); /* Loop checking, 10.08.2015, A.Ribon */
projectile->SetStatus( 0*projectile->GetStatus() );
target->SetStatus( 0*target->GetStatus() );
projectile->SetStatus( 0 ); // Uzhi March 2016
target->SetStatus( 0 ); // Uzhi March 2016
} // End of if ( G4UniformRand() < ProbOfDiffraction )
@@ -1129,26 +1209,9 @@ M0target = MtestTr;
Pprojectile.transform( toLab );
Ptarget.transform( toLab );
// Calculation of the creation time
//Uzhi 9.11 projectile->SetTimeOfCreation( target->GetTimeOfCreation() );
//Uzhi 9.11 projectile->SetPosition( target->GetPosition() );
// Creation time and position of target nucleon were determined in
// ReggeonCascade() of G4FTFModel
//
//if ( Uzhi_projectilediffraction != 0 ) {
// Uzhi_Mx2 = Pprojectile.mag2(); Uzhi_modT = ( target->Get4Momentum() - Ptarget ).mag2();
//}
//if ( Uzhi_targetdiffraction != 0 ) {
// Uzhi_Mx2 = Ptarget.mag2(); Uzhi_modT = ( projectile->Get4Momentum() - Pprojectile ).mag2();
//}
//if ( Uzhi_QE != 0 ) {
// Uzhi_projectilediffraction = 0;
// Uzhi_targetdiffraction = 0;
// Uzhi_Mx2 = 1.0;
//}
#ifdef debugFTFexictation
G4cout << "Mproj " << Pprojectile.mag() << G4endl << "Mtarg " << Ptarget.mag() << G4endl;
G4cout << "Final Mproj " << Pprojectile.mag() <<" "<<Pprojectile<< G4endl
<< "Final Mtarg " << Ptarget.mag() <<" "<<Ptarget <<G4endl;
#endif
projectile->Set4Momentum( Pprojectile );
@@ -1156,9 +1219,9 @@ M0target = MtestTr;
projectile->IncrementCollisionCount( 1 );
target->IncrementCollisionCount( 1 );
//Uzhi_projectilediffraction = UzhiPrD;
//Uzhi_targetdiffraction = UzhiTrD;
//Uzhi_nondiffraction = UzhiND;
// Uzhi_projectilediffraction = UzhiPrD;
// Uzhi_targetdiffraction = UzhiTrD;
// Uzhi_nondiffraction = UzhiND;
//G4cout << Uzhi_projectilediffraction << " " << Uzhi_targetdiffraction << " "
// << Uzhi_nondiffraction << G4endl;
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4ElasticHNScattering.cc 91914 2015-08-11 07:00:39Z gcosmo $
// $Id: G4ElasticHNScattering.cc 96935 2016-05-18 09:12:22Z gcosmo $
//
// ------------------------------------------------------------
@@ -49,7 +49,7 @@
#include "G4ExcitedString.hh"
#include "G4FTFParameters.hh"
#include "G4SampleResonance.hh" // Uzhi Oct 2014
#include "G4SampleResonance.hh"
#include "G4Exp.hh"
#include "G4Log.hh"
@@ -67,18 +67,17 @@ G4bool G4ElasticHNScattering::ElasticScattering( G4VSplitableHadron* projectile,
projectile->IncrementCollisionCount( 1 );
target->IncrementCollisionCount( 1 );
G4SampleResonance BrW; // Uzhi Oct 2014
G4SampleResonance BrW;
// Projectile parameters
G4LorentzVector Pprojectile = projectile->Get4Momentum();
if ( Pprojectile.z() < 0.0 ) return false;
G4bool PutOnMassShell( false );
G4double M0projectile = Pprojectile.mag();
// if ( M0projectile < projectile->GetDefinition()->GetPDGMass() ) { // Uzhi Oct 2014
G4double MminProjectile=BrW.GetMinimumMass(projectile->GetDefinition()); // Uzhi Oct 2014
G4double MminProjectile=BrW.GetMinimumMass(projectile->GetDefinition());
if ( M0projectile < MminProjectile ) { // Uzhi Oct 2014
if ( M0projectile < MminProjectile ) {
PutOnMassShell = true;
M0projectile = projectile->GetDefinition()->GetPDGMass();
}
@@ -88,11 +87,10 @@ G4bool G4ElasticHNScattering::ElasticScattering( G4VSplitableHadron* projectile,
// Target parameters
G4LorentzVector Ptarget = target->Get4Momentum();
G4double M0target = Ptarget.mag();
// if ( M0target < target->GetDefinition()->GetPDGMass() ) { // Uzhi Oct 2014
G4double MminTarget=BrW.GetMinimumMass(target->GetDefinition()); // Uzhi Oct 2014
G4double MminTarget=BrW.GetMinimumMass(target->GetDefinition());
if ( M0target < MminTarget ) { // Uzhi Oct 2014
if ( M0target < MminTarget ) {
PutOnMassShell = true;
M0target = target->GetDefinition()->GetPDGMass();
}
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4FTFAnnihilation.cc 91914 2015-08-11 07:00:39Z gcosmo $
// $Id: G4FTFAnnihilation.cc 96766 2016-05-04 13:31:27Z gcosmo $
//
// ------------------------------------------------------------
@@ -66,10 +66,10 @@
//#include "G4ios.hh"
//#include "UZHI_diffraction.hh"
#include "G4ParticleTable.hh" // Uzhi March 2016
//============================================================================
//define debugFTFannih
//#define debugFTFannih
//============================================================================
@@ -89,6 +89,8 @@ G4bool G4FTFAnnihilation::Annihilate( G4VSplitableHadron* projectile,
G4VSplitableHadron*& AdditionalString,
G4FTFParameters* theParameters ) const {
//theParameters->SetProbabilityOfAnnihilation( 0.0 ); // Uzhi March 2016 ??? for other Anti_bar annih.
#ifdef debugFTFannih
G4cout << "---------------------------- Annihilation----------------" << G4endl;
#endif
@@ -142,6 +144,7 @@ G4bool G4FTFAnnihilation::Annihilate( G4VSplitableHadron* projectile,
G4double SqrtS = std::sqrt( S );
G4double maxPtSquare;
G4double X_a( 0.0 ), X_b( 0.0 ), X_c( 0.0 ), X_d( 0.0 );
G4double MesonProdThreshold = projectile->GetDefinition()->GetPDGMass() +
target->GetDefinition()->GetPDGMass() +
( 2.0*140.0 + 16.0 )*MeV; // 2 Mpi + DeltaE
@@ -235,6 +238,11 @@ G4bool G4FTFAnnihilation::Annihilate( G4VSplitableHadron* projectile,
#endif
G4double Xannihilation = X_a + X_b + X_c + X_d;
//X_a=0.; // Uzhi
//X_b=0.;
//X_c=0.;
//X_d=0.;
//Xannihilation = X_a + X_b + X_c + X_d;
// Projectile unpacking
G4int AQ[3];
@@ -279,14 +287,110 @@ G4bool G4FTFAnnihilation::Annihilate( G4VSplitableHadron* projectile,
projectile->SetSecondParton( Q[0] );
projectile->SetStatus( 0 );
// Uzhi March 2016 start
G4int aAQ, aQ;
aAQ=std::abs( AQ[0] ); aQ=std::abs( Q[0] );
G4int NewCode;
G4double aKsi = G4UniformRand();
if ( aAQ == aQ )
{
if ( aAQ != 3 )
{
NewCode = 111; // Pi0-meson
if ( aKsi < 0.5 )
{
NewCode = 221; // Eta -meson
if ( aKsi < 0.25 ) {NewCode = 331;} // Eta'-meson
}
} else
{
NewCode = 221; // Eta -meson
if( aKsi < 0.5 ) {NewCode = 331;} // Eta'-meson
}
} else
{
if ( aAQ > aQ ){ NewCode = aAQ*100 + aQ*10 + 1; NewCode *= aAQ/AQ[0]; }
else { NewCode = aQ*100 + aAQ*10 + 1; NewCode *= aQ/Q[0]; }
}
G4ParticleDefinition* TestParticle = G4ParticleTable::GetParticleTable()->FindParticle( NewCode );
if(!TestParticle) return false;
projectile->SetDefinition( TestParticle );
theParameters->SetProjMinDiffMass( 0.5 ); // Uzhi 2016 M+140 ??
theParameters->SetProjMinNonDiffMass( 0.5 ); // Uzhi 2016 M+140 ??
// Uzhi March 2016 end
//G4cout << "String 2 " << Q[1] << " " << AQ[1] << G4endl;
target->SplitUp();
target->SetFirstParton( Q[1] );
target->SetSecondParton( AQ[1] );
target->SetStatus( 0 );
// Uzhi March 2016 Start
aAQ=std::abs( AQ[1] ); aQ=std::abs( Q[1] ); aKsi = G4UniformRand();
if ( aAQ == aQ )
{
if ( aAQ != 3 )
{
NewCode = 111; // Pi0-meson
if ( aKsi < 0.5 )
{
NewCode = 221; // Eta -meson
if ( aKsi < 0.25 ) {NewCode = 331;} // Eta'-meson
}
} else
{
NewCode = 221; // Eta -meson
if( aKsi < 0.5 ) {NewCode = 331;} // Eta'-meson
}
} else
{
if ( aAQ > aQ ){ NewCode = aAQ*100 + aQ*10 + 1; NewCode *= aAQ/AQ[1]; }
else { NewCode = aQ*100 + aAQ*10 + 1; NewCode *= aQ/Q[1]; }
}
TestParticle = G4ParticleTable::GetParticleTable()->FindParticle( NewCode );
if(!TestParticle) return false;
target->SetDefinition( TestParticle );
theParameters->SetTarMinDiffMass( 0.5 ); // Uzhi 2016 M+140 ??
theParameters->SetTarMinNonDiffMass( 0.5 ); // Uzhi 2016 M+140 ??
// Uzhi March 2016 end
//G4cout << "String 3 " << AQ[2] << " " << Q[2] << G4endl;
AdditionalString = new G4DiffractiveSplitableHadron();
// Uzhi March 2016 start
aAQ=std::abs( AQ[2] ); aQ=std::abs( Q[2] ); aKsi = G4UniformRand();
if ( aAQ == aQ )
{
if ( aAQ != 3 )
{
NewCode = 111; // Pi0-meson
if ( aKsi < 0.5 )
{
NewCode = 221; // Eta -meson
if ( aKsi < 0.25 ) {NewCode = 331;} // Eta'-meson
}
} else
{
NewCode = 221; // Eta -meson
if( aKsi < 0.5 ) {NewCode = 331;} // Eta'-meson
}
} else
{
if ( aAQ > aQ ){ NewCode = aAQ*100 + aQ*10 + 1; NewCode *= aAQ/AQ[2]; }
else { NewCode = aQ*100 + aAQ*10 + 1; NewCode *= aQ/Q[2]; }
}
TestParticle = G4ParticleTable::GetParticleTable()->FindParticle( NewCode );
if(!TestParticle) return false;
AdditionalString->SetDefinition( TestParticle );
// Uzhi March 2016 end
AdditionalString->SplitUp();
AdditionalString->SetFirstParton( AQ[2] );
AdditionalString->SetSecondParton( Q[2] );
@@ -539,6 +643,8 @@ G4bool G4FTFAnnihilation::Annihilate( G4VSplitableHadron* projectile,
AdditionalString->IncrementCollisionCount( 1 );
target->IncrementCollisionCount( 1 );
theParameters->SetProbabilityOfAnnihilation( 0.0 ); // Uzhi March 2016
return true;
} // End of if ( Ksi < X_a / Xannihilation )
@@ -605,6 +711,7 @@ G4bool G4FTFAnnihilation::Annihilate( G4VSplitableHadron* projectile,
Pprojectile.setPz( 0.0 );
Pprojectile.setE( SqrtS );
Pprojectile.transform( toLab );
// Uzhi March 2016 if QQ_QQbar will interact Set Mmin, MdifMin
// Calculation of the creation time
projectile->SetTimeOfCreation( target->GetTimeOfCreation() );
@@ -619,6 +726,9 @@ G4bool G4FTFAnnihilation::Annihilate( G4VSplitableHadron* projectile,
projectile->IncrementCollisionCount( 1 );
target->IncrementCollisionCount( 1 );
//theParameters->SetProbabilityOfAnnihilation( 0.0 ); // Uzhi March 2016
// In the case baryon and anti-baryon are created. Thus the antibaryon can annihilate latter.
return true;
}
@@ -669,12 +779,79 @@ G4bool G4FTFAnnihilation::Annihilate( G4VSplitableHadron* projectile,
projectile->SetFirstParton( LeftAQ1 );
projectile->SetSecondParton( LeftQ1 );
projectile->SetStatus( 0 );
// Uzhi March 2016 start
G4int aAQ, aQ;
aAQ=std::abs( LeftAQ1 ); aQ=std::abs( LeftQ1 );
G4int NewCode;
G4double aKsi = G4UniformRand();
if ( aAQ == aQ )
{
if ( aAQ != 3 )
{
NewCode = 111; // Pi0-meson
if ( aKsi < 0.5 )
{
NewCode = 221; // Eta -meson
if ( aKsi < 0.25 ) {NewCode = 331;} // Eta'-meson
}
} else
{
NewCode = 221; // Eta -meson
if( aKsi < 0.5 ) {NewCode = 331;} // Eta'-meson
}
} else
{
if ( aAQ > aQ ){ NewCode = aAQ*100 + aQ*10 + 1; NewCode *= aAQ/LeftAQ1; }
else { NewCode = aQ*100 + aAQ*10 + 1; NewCode *= aQ/LeftQ1; }
}
G4ParticleDefinition* TestParticle = G4ParticleTable::GetParticleTable()->FindParticle( NewCode );
if(!TestParticle) return false;
projectile->SetDefinition( TestParticle );
theParameters->SetProjMinDiffMass( 0.5 ); // (0.5) // GeV Uzhi March 2016 ???
theParameters->SetProjMinNonDiffMass( 0.5 );
// Uzhi March 2016 end
//G4cout << "String 2 " << LeftAQ2 << " " << LeftQ2 << G4endl;
target->SplitUp();
target->SetFirstParton( LeftQ2 );
target->SetSecondParton( LeftAQ2 );
target->SetStatus( 0 );
// Uzhi March 2016 start
aAQ=std::abs( LeftAQ2 ); aQ=std::abs( LeftQ2 ); aKsi = G4UniformRand();
if ( aAQ == aQ )
{
if ( aAQ != 3 )
{
NewCode = 111; // Pi0-meson
if ( aKsi < 0.5 )
{
NewCode = 221; // Eta -meson
if ( aKsi < 0.25 ) {NewCode = 331;} // Eta'-meson
}
} else
{
NewCode = 221; // Eta -meson
if( aKsi < 0.5 ) {NewCode = 331;} // Eta'-meson
}
} else
{
if ( aAQ > aQ ){ NewCode = aAQ*100 + aQ*10 + 1; NewCode *= aAQ/LeftAQ2; }
else { NewCode = aQ*100 + aAQ*10 + 1; NewCode *= aQ/LeftQ2; }
}
TestParticle = G4ParticleTable::GetParticleTable()->FindParticle( NewCode );
if(!TestParticle) return false;
target->SetDefinition( TestParticle );
theParameters->SetTarMinDiffMass( 0.5 ); // Uzhi March 2016 ???
theParameters->SetTarMinNonDiffMass( 0.5 );
// Uzhi March 2016
// Sampling kinematical properties
// 1 string LeftAQ1-LeftQ1// 2 string LeftAQ2-LeftQ2
G4ThreeVector Quark_Mom[4];
@@ -857,6 +1034,8 @@ G4bool G4FTFAnnihilation::Annihilate( G4VSplitableHadron* projectile,
projectile->IncrementCollisionCount( 1 );
target->IncrementCollisionCount( 1 );
theParameters->SetProbabilityOfAnnihilation( 0.0 ); // Uzhi March 2016
return true;
} // End of if ( CandidatsN != 0 )
@@ -920,6 +1099,42 @@ G4bool G4FTFAnnihilation::Annihilate( G4VSplitableHadron* projectile,
projectile->SetFirstParton( LeftQ );
projectile->SetSecondParton( LeftAQ );
projectile->SetStatus( 0 );
// Uzhi March 2016 start
G4int aAQ, aQ;
aAQ=std::abs( LeftAQ ); aQ=std::abs( LeftQ );
G4int NewCode;
G4double aKsi = G4UniformRand();
if ( aAQ == aQ )
{
if ( aAQ != 3 )
{
NewCode = 111; // Pi0-meson
if ( aKsi < 0.5 )
{
NewCode = 221; // Eta -meson
if ( aKsi < 0.25 ) {NewCode = 331;} // Eta'-meson
}
} else
{
NewCode = 221; // Eta -meson
if( aKsi < 0.5 ) {NewCode = 331;} // Eta'-meson
}
} else
{
if ( aAQ > aQ ){ NewCode = aAQ*100 + aQ*10 + 1; NewCode *= aAQ/LeftAQ; }
else { NewCode = aQ*100 + aAQ*10 + 1; NewCode *= aQ/LeftQ; }
}
G4ParticleDefinition* TestParticle = G4ParticleTable::GetParticleTable()->FindParticle( NewCode );
if(!TestParticle) return false;
projectile->SetDefinition( TestParticle );
theParameters->SetProjMinDiffMass( 0.5 ); // (0.5) // GeV Uzhi March 2016
theParameters->SetProjMinNonDiffMass( 0.5 );
// Uzhi March 2016 end
target->SetStatus( 4 ); // The target nucleon has annihilated 3->4 Uzhi Oct 2014
Pprojectile.setPx( 0.0 );
Pprojectile.setPy( 0.0 );
@@ -938,6 +1153,9 @@ G4bool G4FTFAnnihilation::Annihilate( G4VSplitableHadron* projectile,
projectile->IncrementCollisionCount( 1 );
target->IncrementCollisionCount( 1 );
theParameters->SetProbabilityOfAnnihilation( 0.0 ); // Uzhi March 2016
return true;
}
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4FTFModel.cc 94688 2015-12-02 17:15:08Z gunter $
// $Id: G4FTFModel.cc 97044 2016-05-23 09:48:46Z gcosmo $
// GEANT4 tag $Name: $
//
@@ -246,6 +246,7 @@ void G4FTFModel::Init( const G4Nucleus& aNucleus, const G4DynamicParticle& aProj
// Init target nucleus
theParticipants.Init( aNucleus.GetA_asInt(), aNucleus.GetZ_asInt() );
//theParticipants.Init( aNucleus.GetA_asInt(), 0 ); //For h+neutron // Uzhi March 2016
if ( theParameters != 0 ) delete theParameters;
theParameters = new G4FTFParameters( theProjectile.GetDefinition(), aNucleus.GetA_asInt(),
@@ -261,8 +262,8 @@ void G4FTFModel::Init( const G4Nucleus& aNucleus, const G4DynamicParticle& aProj
G4cout << "FTF end of Init" << G4endl << G4endl;
#endif
if ( (std::abs( theProjectile.GetDefinition()->GetBaryonNumber() ) <= 1 ) && // Uzhi 29.05.2015
(aNucleus.GetA_asInt() < 2) ) theParameters->SetProbabilityOfElasticScatt(0.);
// if ( (std::abs( theProjectile.GetDefinition()->GetBaryonNumber() ) <= 1 ) && // Uzhi 29.05.2015
// (aNucleus.GetA_asInt() < 2) ) theParameters->SetProbabilityOfElasticScatt(0.);
}
@@ -425,8 +426,6 @@ void G4FTFModel::StoreInvolvedNucleon() {
void G4FTFModel::ReggeonCascade() {
// Implementation of the reggeon theory inspired model
// G4double ExcitationE = theParameters->GetExcitationEnergyPerWoundedNucleon(); // Uzhi May 2015
#ifdef debugReggeonCascade
G4cout << "G4FTFModel::ReggeonCascade -----------" << G4endl
<< "theProjectile.GetTotalMomentum() " << theProjectile.GetTotalMomentum() << G4endl
@@ -439,7 +438,6 @@ void G4FTFModel::ReggeonCascade() {
// Reggeon cascading in target nucleus
for ( G4int InvTN = 0; InvTN < InitNINt; InvTN++ ) {
G4Nucleon* aTargetNucleon = TheInvolvedNucleonsOfTarget[ InvTN ];
// aTargetNucleon->SetBindingEnergy( ExcitationE ); // Uzhi April 2015
G4double CreationTime = aTargetNucleon->GetSplitableHadron()->GetTimeOfCreation();
@@ -486,7 +484,6 @@ void G4FTFModel::ReggeonCascade() {
// for ( G4int InvPN = 0; InvPN < NumberOfInvolvedNucleonsOfProjectile; InvPN++ ) {
for ( G4int InvPN = 0; InvPN < InitNINp; InvPN++ ) {
G4Nucleon* aProjectileNucleon = TheInvolvedNucleonsOfProjectile[ InvPN ];
// aProjectileNucleon->SetBindingEnergy( ExcitationE ); // Uzhi May 2015
G4double CreationTime = aProjectileNucleon->GetSplitableHadron()->GetTimeOfCreation();
@@ -502,7 +499,7 @@ void G4FTFModel::ReggeonCascade() {
G4double impact2= sqr( XofWoundedNucleon - Neighbour->GetPosition().x() ) +
sqr( YofWoundedNucleon - Neighbour->GetPosition().y() );
if ( G4UniformRand() < theParameters->GetCofNuclearDestructionPr() * // Uzhi May 2015
if ( G4UniformRand() < theParameters->GetCofNuclearDestructionPr() *
G4Exp( -impact2 / theParameters->GetR2ofNuclearDestruction() )
) {
// The neighbour nucleon is involved in the reggeon cascade
@@ -514,7 +511,7 @@ void G4FTFModel::ReggeonCascade() {
Neighbour->Hit( projectileSplitable );
projectileSplitable->SetTimeOfCreation( CreationTime );
projectileSplitable->SetStatus( 3 ); // 2->3 Uzhi Oct 2014
projectileSplitable->SetStatus( 3 );
}
}
}
@@ -908,6 +905,7 @@ G4bool G4FTFModel::ExciteParticipants() {
if ( ! Result ) continue;
}
if ( G4UniformRand() <
( 1.0 - target->GetSoftCollisionCount() / MaxNumOfInelCollisions ) * // Uzhi March 2015
( 1.0 - projectile->GetSoftCollisionCount() / MaxNumOfInelCollisions ) ) {
//if ( ! HighEnergyInter ) {
// G4bool Annihilation = false;
@@ -955,7 +953,7 @@ G4bool G4FTFModel::ExciteParticipants() {
#ifdef debugBuildString
G4cout << "Annihilation" << G4endl;
#endif
// // Uzhi March 2016
// Skipping possible interactions of the annihilated nucleons
while ( theParticipants.Next() ) { /* Loop checking, 10.08.2015, A.Ribon */
G4InteractionContent& acollision = theParticipants.GetInteraction();
@@ -965,7 +963,7 @@ G4bool G4FTFModel::ExciteParticipants() {
acollision.SetStatus( 0 );
}
}
// // Uzhi March 2016
// Return to the annihilation
theParticipants.StartLoop();
for ( G4int I = 0; I < CurrentInteraction; I++ ) theParticipants.Next();
@@ -989,6 +987,19 @@ G4bool G4FTFModel::ExciteParticipants() {
#endif
if ( AdditionalString != 0 ) theAdditionalString.push_back( AdditionalString );
/* Uzhi March 2016
if(target->GetStatus() == 4){
// Skipping possible interactions of the annihilated nucleons
while ( theParticipants.Next() ) {
G4InteractionContent& acollision = theParticipants.GetInteraction();
G4VSplitableHadron* NextProjectileNucleon = acollision.GetProjectile();
G4VSplitableHadron* NextTargetNucleon = acollision.GetTarget();
if ( target == NextTargetNucleon ) {acollision.SetStatus( 0 );}
}
}
theParticipants.StartLoop();
for ( G4int I = 0; I < CurrentInteraction; I++ ) theParticipants.Next();
*/ //Uzhi March 2016
}
}
}
@@ -2260,11 +2271,28 @@ G4ExcitedStringVector* G4FTFModel::BuildStrings() {
//G4cout << "primaries[ahadron] " << primaries[ahadron] << G4endl;
//if ( primaries[ahadron]->GetStatus() <= 1 ) isProjectile=true;
FirstString = 0; SecondString = 0;
if ( primaries[ahadron]->GetStatus() <= 1 ) // Uzhi Oct 2014 start
if ( primaries[ahadron]->GetStatus() == 0 ) // Uzhi May 2016
{
theExcitation->CreateStrings( primaries[ ahadron ], isProjectile,
FirstString, SecondString, theParameters );
}
else if ( primaries[ahadron]->GetStatus() == 1
&& primaries[ahadron]->GetSoftCollisionCount() != 0 ) // Uzhi May 2016
{
theExcitation->CreateStrings( primaries[ ahadron ], isProjectile,
FirstString, SecondString, theParameters );
}
else if ( primaries[ahadron]->GetStatus() == 1
&& primaries[ahadron]->GetSoftCollisionCount() == 0 ) // Uzhi May 2016
{
G4LorentzVector ParticleMomentum=primaries[ahadron]->Get4Momentum();
G4KineticTrack* aTrack=new G4KineticTrack(
primaries[ahadron]->GetDefinition(),
primaries[ahadron]->GetTimeOfCreation(),
primaries[ahadron]->GetPosition(),
ParticleMomentum);
FirstString=new G4ExcitedString(aTrack);
}
else if(primaries[ahadron]->GetStatus() == 2)
{
G4LorentzVector ParticleMomentum=primaries[ahadron]->Get4Momentum();
@@ -2275,7 +2303,7 @@ G4ExcitedStringVector* G4FTFModel::BuildStrings() {
ParticleMomentum);
FirstString=new G4ExcitedString(aTrack);
}
else {G4cout<<"Something wrong in FTF Model Build String" << G4endl;} // Uzhi Oct 2014 end
else {G4cout<<"Something wrong in FTF Model Build String" << G4endl;}
if ( FirstString != 0 ) strings->push_back( FirstString );
if ( SecondString != 0 ) strings->push_back( SecondString );
@@ -2326,18 +2354,17 @@ G4ExcitedStringVector* G4FTFModel::BuildStrings() {
<< " " << aProjectile->GetStatus() << G4endl;
#endif
FirstString = 0; SecondString = 0;
if ( aProjectile->GetStatus() == 0 ) { // A nucleon took part in non-diffractive interaction
#ifdef debugBuildString
G4cout << "Case1 aProjectile->GetStatus() == 0 " << G4endl;
#endif
FirstString = 0; SecondString = 0;
theExcitation->CreateStrings(
TheInvolvedNucleonsOfProjectile[ ahadron ]->GetSplitableHadron(),
isProjectile, FirstString, SecondString, theParameters );
if ( FirstString != 0 ) strings->push_back( FirstString );
if ( SecondString != 0 ) strings->push_back( SecondString );
} else if ( aProjectile->GetStatus() == 1 && aProjectile->GetSoftCollisionCount() != 0 ) {
// Nucleon took part in diffractive interaction
@@ -2345,12 +2372,10 @@ G4ExcitedStringVector* G4FTFModel::BuildStrings() {
G4cout << "Case2 aProjectile->GetStatus() !=0 St==1 SoftCol!=0" << G4endl;
#endif
FirstString = 0; SecondString = 0;
theExcitation->CreateStrings(
TheInvolvedNucleonsOfProjectile[ ahadron ]->GetSplitableHadron(),
isProjectile, FirstString, SecondString, theParameters );
if ( FirstString != 0 ) strings->push_back( FirstString );
if ( SecondString != 0 ) strings->push_back( SecondString );
} else if ( aProjectile->GetStatus() == 1 && aProjectile->GetSoftCollisionCount() == 0 &&
HighEnergyInter ) {
// Nucleon was considered as a paricipant of an interaction,
@@ -2361,12 +2386,13 @@ G4ExcitedStringVector* G4FTFModel::BuildStrings() {
G4cout << "Case3 aProjectile->GetStatus() !=0 St==1 SoftCol==0" << G4endl;
#endif
FirstString = 0; SecondString = 0;
theExcitation->CreateStrings(
TheInvolvedNucleonsOfProjectile[ ahadron ]->GetSplitableHadron(),
isProjectile, FirstString, SecondString, theParameters );
if ( FirstString != 0 ) strings->push_back( FirstString );
if ( SecondString != 0 ) strings->push_back( SecondString );
G4LorentzVector ParticleMomentum=aProjectile->Get4Momentum();
G4KineticTrack* aTrack=new G4KineticTrack(
aProjectile->GetDefinition(),
aProjectile->GetTimeOfCreation(),
aProjectile->GetPosition(),
ParticleMomentum);
FirstString=new G4ExcitedString(aTrack);
#ifdef debugBuildString
G4cout << " Strings are built for nucleon marked for an interaction, but"
@@ -2380,15 +2406,16 @@ G4ExcitedStringVector* G4FTFModel::BuildStrings() {
G4cout << "Case4 aProjectile->GetStatus() !=0 St==2 " << G4endl;
#endif
FirstString = 0; SecondString = 0;
theExcitation->CreateStrings(
TheInvolvedNucleonsOfProjectile[ ahadron ]->GetSplitableHadron(),
isProjectile, FirstString, SecondString, theParameters );
if ( FirstString != 0 ) strings->push_back( FirstString );
if ( SecondString != 0 ) strings->push_back( SecondString );
G4LorentzVector ParticleMomentum=aProjectile->Get4Momentum();
G4KineticTrack* aTrack=new G4KineticTrack(
aProjectile->GetDefinition(),
aProjectile->GetTimeOfCreation(),
aProjectile->GetPosition(),
ParticleMomentum);
FirstString=new G4ExcitedString(aTrack);
#ifdef debugBuildString
G4cout << " Strings are build for involved nucleon." << G4endl;
G4cout << " A track is build for involved nucleon." << G4endl;
#endif
} else {
@@ -2405,8 +2432,11 @@ G4ExcitedStringVector* G4FTFModel::BuildStrings() {
#endif
}
}
}
if ( FirstString != 0 ) strings->push_back( FirstString );
if ( SecondString != 0 ) strings->push_back( SecondString );
} // end of for ( G4int ahadron = 0; ahadron < NumberOfInvolvedNucleonsOfProjectile
} // ens of if ( ! GetProjectileNucleus() )
#ifdef debugBuildString
G4cout << "Building of target-like strings" << G4endl;
@@ -2421,25 +2451,20 @@ G4ExcitedStringVector* G4FTFModel::BuildStrings() {
<< aNucleon->GetStatus() << " " << aNucleon->GetSoftCollisionCount()<<G4endl;;
#endif
if ( aNucleon->GetStatus() == 0 ) { // A nucleon took part in non-diffractive interaction
FirstString = 0 ; SecondString = 0;
FirstString = 0 ; SecondString = 0;
if ( aNucleon->GetStatus() == 0 ) {
// A nucleon took part in non-diffractive interaction
theExcitation->CreateStrings( aNucleon, isProjectile,
FirstString, SecondString, theParameters );
if ( FirstString != 0 ) strings->push_back( FirstString );
if ( SecondString != 0 ) strings->push_back( SecondString );
#ifdef debugBuildString
G4cout << " 1 case A string is build" << G4endl;
#endif
} else if ( aNucleon->GetStatus() == 1 && aNucleon->GetSoftCollisionCount() != 0 ) {
// A nucleon took part in diffractive interaction
FirstString = 0; SecondString = 0;
theExcitation->CreateStrings( aNucleon, isProjectile,
FirstString, SecondString, theParameters );
if ( FirstString != 0 ) strings->push_back( FirstString );
if ( SecondString != 0 ) strings->push_back( SecondString );
#ifdef debugBuildString
G4cout << " 2 case A string is build, nucleon was excited." << G4endl;
#endif
@@ -2449,27 +2474,18 @@ G4ExcitedStringVector* G4FTFModel::BuildStrings() {
// A nucleon was considered as a participant but due to annihilation
// its interactions were skipped. It will be considered as involved one
// at high energies.
FirstString = 0; SecondString = 0;
theExcitation->CreateStrings( aNucleon, isProjectile,
FirstString, SecondString, theParameters );
if(SecondString == 0) // Uzhi Oct 2014 start
{
G4LorentzVector ParticleMomentum=aNucleon->Get4Momentum();
G4KineticTrack* aTrack=new G4KineticTrack(
G4LorentzVector ParticleMomentum=aNucleon->Get4Momentum();
G4KineticTrack* aTrack=new G4KineticTrack(
aNucleon->GetDefinition(),
aNucleon->GetTimeOfCreation(),
FirstString->GetPosition(),
aNucleon->GetPosition(),
ParticleMomentum);
delete FirstString;
FirstString=new G4ExcitedString(aTrack);
}; // Uzhi Oct 2014 end
if ( FirstString != 0 ) strings->push_back( FirstString );
if ( SecondString != 0 ) strings->push_back( SecondString );
FirstString=new G4ExcitedString(aTrack);
#ifdef debugBuildString
G4cout << "3 case A string is build" << G4endl;
G4cout << "3 case A track is build" << G4endl;
#endif
} else if ( aNucleon->GetStatus() == 1 && aNucleon->GetSoftCollisionCount() == 0 &&
@@ -2477,36 +2493,28 @@ G4ExcitedStringVector* G4FTFModel::BuildStrings() {
// A nucleon was considered as a participant but due to annihilation
// its interactions were skipped. It will be returned to nucleus
// at low energies energies.
aNucleon->SetStatus( 5 ); // 4->5 Uzhi Oct 2014
aNucleon->SetStatus( 5 );
// ????????? delete aNucleon;
#ifdef debugBuildString
G4cout << "4 case A string is not build" << G4endl;
#endif
} else if(( aNucleon->GetStatus() == 2 )|| // A nucleon took part in quark exchange Uzhi Oct 2014
} else if(( aNucleon->GetStatus() == 2 )|| // A nucleon took part in quark exchange
( aNucleon->GetStatus() == 3 ) ){ // A nucleon was involved in Reggeon cascading
FirstString = 0; SecondString = 0;
theExcitation->CreateStrings( aNucleon, isProjectile,
FirstString, SecondString, theParameters );
if(SecondString == 0) // Uzhi Oct 2014 start
{
G4LorentzVector ParticleMomentum=aNucleon->Get4Momentum();
G4KineticTrack* aTrack=new G4KineticTrack(
aNucleon->GetDefinition(),
aNucleon->GetTimeOfCreation(),
aNucleon->GetPosition(), //FirstString->GetPosition(),
ParticleMomentum);
delete FirstString;
G4LorentzVector ParticleMomentum=aNucleon->Get4Momentum();
G4KineticTrack* aTrack=new G4KineticTrack(
aNucleon->GetDefinition(),
aNucleon->GetTimeOfCreation(),
aNucleon->GetPosition(), //FirstString->GetPosition(),
ParticleMomentum);
FirstString=new G4ExcitedString(aTrack);
}; // Uzhi Oct 2014 end
if ( FirstString != 0 ) strings->push_back( FirstString );
if ( SecondString != 0 ) strings->push_back( SecondString );
#ifdef debugBuildString
G4cout << "5 case A string is build" << G4endl;
G4cout << "5 case A track is build" << G4endl;
#endif
} else {
@@ -2516,7 +2524,11 @@ G4ExcitedStringVector* G4FTFModel::BuildStrings() {
#endif
}
}
if ( FirstString != 0 ) strings->push_back( FirstString );
if ( SecondString != 0 ) strings->push_back( SecondString );
} // end of for ( G4int ahadron = 0; ahadron < NumberOfInvolvedNucleonsOfTarget
#ifdef debugBuildString
G4cout << G4endl << "theAdditionalString.size() " << theAdditionalString.size()
@@ -2943,9 +2955,8 @@ ComputeNucleusProperties( G4V3DNucleus* nucleus, // input paramete
+ aNucleon->Get4Momentum().perp2() );
sumMasses += 20.0*MeV; // Separation energy for a nucleon
// residualExcitationEnergy += ExcitationEnergyPerWoundedNucleon; // Uzhi April 2015
residualExcitationEnergy += -ExcitationEnergyPerWoundedNucleon*
G4Log( G4UniformRand()); // Uzhi April 2015
G4Log( G4UniformRand());
residualMassNumber--;
// The absolute value below is needed only in the case of anti-nucleus.
residualCharge -= std::abs( G4int( aNucleon->GetDefinition()->GetPDGCharge() ) );
@@ -2970,6 +2981,7 @@ ComputeNucleusProperties( G4V3DNucleus* nucleus, // input paramete
if ( residualMassNumber == 1 ) {
residualExcitationEnergy = 0.0;
}
residualMass += residualExcitationEnergy; // Uzhi March 2016 ????
}
sumMasses += std::sqrt( sqr( residualMass ) + residualMomentum.perp2() );
return true;
@@ -3002,7 +3014,7 @@ GenerateDeltaIsobar( const G4double sqrtS, // input parameter
//const G4double ProbDeltaIsobar = 0.05; // Uzhi 6.07.2012
//const G4double ProbDeltaIsobar = 0.25; // Uzhi 13.06.2013
const G4double probDeltaIsobar = 0.10; // A.R. 07.08.2013
const G4double probDeltaIsobar = 0.05; // A.R. 07.08.2013 0.10 -> 0.05 Uzhi March 2016
G4int maxNumberOfDeltas = G4int( (sqrtS - sumMasses)/(400.0*MeV) );
G4int numberOfDeltas = 0;
@@ -3032,7 +3044,7 @@ GenerateDeltaIsobar( const G4double sqrtS, // input parameter
splitableHadron->SetDefinition( old_def );
break;
} else { // Change is accepted
sumMasses += ( massDelta - massNuc );
sumMasses += ( massDelta - massNuc ); // Uzhi March 2016 ???
}
}
}
@@ -3076,35 +3088,67 @@ SamplingNucleonKinematics( G4double averagePt2, // input param
G4bool success = true;
G4double SumMasses = residualMass;
/* // Uzhi March 2016 ???
for ( G4int i = 0; i < numberOfInvolvedNucleons; i++ ) {
G4Nucleon* aNucleon = involvedNucleons[i];
if ( ! aNucleon ) continue;
SumMasses += aNucleon->GetSplitableHadron()->GetDefinition()->GetPDGMass();
}
*/
const G4int maxNumberOfLoops = 1000;
G4int loopCounter = 0;
do { // while ( ! success )
success = true;
//======================================= Sampling of nucleon Pt ===============
G4ThreeVector ptSum( 0.0, 0.0, 0.0 );
G4double xSum = 0.0;
for ( G4int i = 0; i < numberOfInvolvedNucleons; i++ ) {
G4Nucleon* aNucleon = involvedNucleons[i];
if ( ! aNucleon ) continue;
G4ThreeVector tmpPt = GaussianPt( averagePt2, maxPt2 );
ptSum += tmpPt;
// Uzhi 2016
G4LorentzVector tmp( tmpPt.x(), tmpPt.y(), 0., 0.);
aNucleon->SetMomentum( tmp );
}
G4double deltaPx = ( ptSum.x() - pResidual.x() ) / numberOfInvolvedNucleons;
G4double deltaPy = ( ptSum.y() - pResidual.y() ) / numberOfInvolvedNucleons;
SumMasses = residualMass;
for ( G4int i = 0; i < numberOfInvolvedNucleons; i++ ) {
G4Nucleon* aNucleon = involvedNucleons[i];
if ( ! aNucleon ) continue;
G4double px = aNucleon->Get4Momentum().px() - deltaPx;
G4double py = aNucleon->Get4Momentum().py() - deltaPy;
G4double MtN = std::sqrt( sqr( aNucleon->GetSplitableHadron()->GetDefinition()->GetPDGMass() )
+ sqr( px ) + sqr( py ) );
SumMasses += MtN;
G4LorentzVector tmp( px, py, 0., MtN);
aNucleon->SetMomentum( tmp );
}
//======================================== Sampling X of nucleon ===============
G4double xSum = 0.0;
for ( G4int i = 0; i < numberOfInvolvedNucleons; i++ ) {
G4Nucleon* aNucleon = involvedNucleons[i];
if ( ! aNucleon ) continue;
// Uzhi 2016
G4ThreeVector tmpX = GaussianPt( dCor*dCor, 1.0 );
G4double x = tmpX.x() +
aNucleon->GetSplitableHadron()->GetDefinition()->GetPDGMass()/SumMasses;
// G4double x = tmpX.x() + // Uzhi 2016
// aNucleon->GetSplitableHadron()->GetDefinition()->GetPDGMass()/SumMasses;
G4double x = tmpX.x() + aNucleon->Get4Momentum().e()/SumMasses;
if ( x < 0.0 || x > 1.0 ) {
success = false;
break;
}
xSum += x;
//AR The energy is in the lab (instead of cms) frame but it will not be used.
G4LorentzVector tmp( tmpPt.x(), tmpPt.y(), x, aNucleon->Get4Momentum().e() );
// G4LorentzVector tmp( tmpPt.x(), tmpPt.y(), x, aNucleon->Get4Momentum().e() ); // Uzhi
G4LorentzVector tmp( aNucleon->Get4Momentum().x(), aNucleon->Get4Momentum().y(),
x, aNucleon->Get4Momentum().e() );
aNucleon->SetMomentum( tmp );
}
@@ -3112,8 +3156,8 @@ SamplingNucleonKinematics( G4double averagePt2, // input param
if ( ! success ) continue;
G4double deltaPx = ( ptSum.x() - pResidual.x() ) / numberOfInvolvedNucleons;
G4double deltaPy = ( ptSum.y() - pResidual.y() ) / numberOfInvolvedNucleons;
// G4double deltaPx = ( ptSum.x() - pResidual.x() ) / numberOfInvolvedNucleons; // Uzhi 2016
// G4double deltaPy = ( ptSum.y() - pResidual.y() ) / numberOfInvolvedNucleons;
G4double delta = 0.0;
if ( residualMassNumber == 0 ) {
delta = ( xSum - 1.0 ) / numberOfInvolvedNucleons;
@@ -3139,16 +3183,23 @@ SamplingNucleonKinematics( G4double averagePt2, // input param
break;
}
}
/* // Uzhi 2016
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() );
*/
mass2 += sqr( aNucleon->Get4Momentum().e() ) / x;
G4LorentzVector tmp( aNucleon->Get4Momentum().px(), aNucleon->Get4Momentum().py(),
x, aNucleon->Get4Momentum().e() );
aNucleon->SetMomentum( tmp );
}
if ( ! success ) continue;
//=======================================================
if ( success && residualMassNumber != 0 ) {
mass2 += ( sqr( residualMass ) + pResidual.perp2() ) / xSum;
// mass2 += ( sqr( residualMass ) + pResidual.perp2() ) / xSum; // Uzhi 2016
mass2 += sqr( residualMass ) / xSum;
}
#ifdef debugPutOnMassShell
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4FTFParameters.cc 91775 2015-08-05 14:42:39Z gcosmo $
// $Id: G4FTFParameters.cc 97394 2016-06-02 10:13:06Z gcosmo $
// GEANT4 tag $Name: $
//
@@ -513,7 +513,7 @@ G4FTFParameters::G4FTFParameters( const G4ParticleDefinition* particle,
// Parameters of elastic scattering
// Gaussian parametrization of elastic scattering amplitude assumed
SetAvaragePt2ofElasticScattering( 1.0/( Xtotal*Xtotal/16.0/pi/Xelastic/0.3894 )*GeV*GeV );
//G4cout << "AvaragePt2ofElasticScattering " << GetAvaragePt2ofElasticScattering() << G4endl;
// G4cout << "AvaragePt2ofElasticScattering " << GetAvaragePt2ofElasticScattering() << G4endl;
// Parameters of excitations
@@ -522,12 +522,13 @@ G4FTFParameters::G4FTFParameters( const G4ParticleDefinition* particle,
if ( ProjectilePDGcode > 1000 ) { // Projectile is baryon
// Proc# A1 B1 A2 B2 A3 Atop Ymin
SetParams( 0, 13.71, 1.75, -214.5, 4.25, 0.0, 0.5 , 1.1 ); // Qexchange without Exc.
SetParams( 1, 25.0, 1.0, -50.34, 1.5 , 0.0, 0.0 , 1.4 ); // Qexchange with Exc.
// SetParams( 0, 13.71, 1.75, -214.5, 4.25, 0.0, 0.5 , 1.1 ); // Qexchange without Exc.
SetParams( 0, 13.71, 1.75, -30.69, 3.0 , 0.0, 1.0 , 0.93 ); // Qexchange without Exc.
SetParams( 1, 25.0 , 1.0 , -50.34, 1.5 , 0.0, 0.0 , 1.4 ); // Qexchange with Exc.
if( Xinel > 0.) {
SetParams( 2, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93);// Projectile diffraction
SetParams( 3, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93);// Target diffraction
SetParams( 4, 1.0, 0.0 , -2.01 , 0.5 , 0.0, 0.0 , 1.4 );// Qexchange with Exc. Additional multiply
SetParams( 4, 0.6 , 0.0 , -1.20, 0.5 , 0.0, 0.0 , 1.4 );// Qexchange with Exc. Additional multiply
} else {
SetParams( 2, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0);
SetParams( 3, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0);
@@ -550,9 +551,9 @@ G4FTFParameters::G4FTFParameters( const G4ParticleDefinition* particle,
SetProjMinNonDiffMass( 1.16 ); // GeV
SetTarMinDiffMass( 1.16 ); // GeV
SetTarMinNonDiffMass( 1.16 ); // GeV
SetAveragePt2( 0.15 ); // GeV^2 // Uzhi Oct 2014
SetProbLogDistrPrD( 0.3 ); // Uzhi Oct 2014 0.5
SetProbLogDistr(0.3 ); // 0.5
SetAveragePt2( 0.3 ); // GeV^2 // Uzhi Oct 2014
SetProbLogDistrPrD( 0.3 ); // Uzhi Oct 2014 0.5
SetProbLogDistr(0.3); // 0.5
} else if( ProjectilePDGcode < -1000 ) { // Projectile is anti_baryon
@@ -580,7 +581,7 @@ G4FTFParameters::G4FTFParameters( const G4ParticleDefinition* particle,
SetProjMinNonDiffMass( ProjectileMass + 0.22 ); // GeV
SetTarMinDiffMass( TargetMass + 0.22 ); // GeV
SetTarMinNonDiffMass( TargetMass + 0.22 ); // GeV
SetAveragePt2( 0.15 ); // GeV^2 // Uzhi Oct 2014
SetAveragePt2( 0.3 ); // GeV^2 // Uzhi Oct 2014
SetProbLogDistrPrD( 0.3 ); // Uzhi Oct 2014
SetProbLogDistr( 0.3 );
@@ -603,7 +604,7 @@ G4FTFParameters::G4FTFParameters( const G4ParticleDefinition* particle,
SetProjMinNonDiffMass( 0.5 ); // (0.5) // GeV
SetTarMinDiffMass( 1.16 ); // GeV
SetTarMinNonDiffMass( 1.16 ); // GeV
SetAveragePt2( 0.15 ); // GeV^2 // Uzhi Oct 2014
SetAveragePt2( 0.3 ); // GeV^2 // Uzhi Oct 2014
SetProbLogDistrPrD( 0.3 ); // Uzhi Oct 2014
SetProbLogDistr( 0.3 );
@@ -626,14 +627,15 @@ G4FTFParameters::G4FTFParameters( const G4ParticleDefinition* particle,
SetProjMinNonDiffMass( 0.7 ); // (1.4) // (0.7) // GeV
SetTarMinDiffMass( 1.16 ); // GeV
SetTarMinNonDiffMass( 1.16 ); // GeV
SetAveragePt2( 0.15 ); // GeV^2 // Uzhi Oct 2014
SetAveragePt2( 0.3 ); // GeV^2 // Uzhi Oct 2014
SetProbLogDistrPrD( 0.5 ); // Uzhi Oct 2014
SetProbLogDistr( 0.3 ); // Uzhi 5.06.2012
} else { // Projectile is undefined, Nucleon assumed
// Proc# A1 B1 A2 B2 A3 Atop Ymin
SetParams( 0, 13.71, 1.75, -214.5, 4.25, 0.0, 0.5 , 1.1 ); // Qexchange without Exc.
// SetParams( 0, 13.71, 1.75, -214.5, 4.25, 0.0, 0.5 , 1.1 ); // Qexchange without Exc. May 2016
SetParams( 0, 13.71, 1.75, -30.69, 3.0 , 0.0, 1.0 , 0.93 ); // Qexchange without Exc.
SetParams( 1, 25.0, 1.0, -50.34, 1.5 , 0.0, 0.0 , 1.4 ); // Qexchange with Exc.
if( Xinel > 0.) {
SetParams( 2, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93); // Projectile diffraction
@@ -654,7 +656,7 @@ G4FTFParameters::G4FTFParameters( const G4ParticleDefinition* particle,
SetProjMinNonDiffMass( ProjectileMass + 0.22 ); // GeV
SetTarMinDiffMass( TargetMass + 0.22 ); // GeV
SetTarMinNonDiffMass( TargetMass + 0.22 ); // GeV
SetAveragePt2( 0.15 ); // GeV^2 // Uzhi Oct 2014
SetAveragePt2( 0.3 ); // GeV^2 // Uzhi Oct 2014
SetProbLogDistrPrD( 0.3 ); // Uzhi Oct 2014
SetProbLogDistr( 0.3 );