Import Geant4 9.6.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-09 17:01:34 +02:00
parent b1eb5424d2
commit e2d2f9810a
10384 changed files with 698580 additions and 628834 deletions
@@ -1,243 +0,0 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// Calculation of the total, elastic and inelastic cross-sections
// of hadron (proton, neutron, pi+, pi-, K+, K-, anti_proton, anti_neutron
// interactions with nuclei based on CHIPS model
//
// Created by V. Uzhinsky, 31.05.2011
#include "G4ComponentCHIPShadronNuclearXS.hh"
#include "G4ParticleTable.hh"
#include "G4IonTable.hh"
#include "G4ParticleDefinition.hh"
#include "G4VQCrossSection.hh"
#include "G4QProtonElasticCrossSection.hh"
#include "G4QProtonNuclearCrossSection.hh"
#include "G4QNeutronElasticCrossSection.hh"
#include "G4QNeutronNuclearCrossSection.hh"
#include "G4QAntiBaryonElasticCrossSection.hh"
#include "G4QAntiBaryonNuclearCrossSection.hh"
#include "G4QPionMinusElasticCrossSection.hh"
#include "G4QPionMinusNuclearCrossSection.hh"
#include "G4QPionPlusElasticCrossSection.hh"
#include "G4QPionPlusNuclearCrossSection.hh"
#include "G4QKaonMinusElasticCrossSection.hh"
#include "G4QKaonMinusNuclearCrossSection.hh"
#include "G4QKaonPlusElasticCrossSection.hh"
#include "G4QKaonPlusNuclearCrossSection.hh"
///////////////////////////////////////////////////////////////////////////////
G4ComponentCHIPShadronNuclearXS::G4ComponentCHIPShadronNuclearXS()
: fUpperLimit( 10000 * GeV ),
fLowerLimit( 10 * MeV )
{
PxsManagerEl = G4QProtonElasticCrossSection::GetPointer();
PxsManagerInEl = G4QProtonNuclearCrossSection::GetPointer();
NxsManagerEl = G4QNeutronElasticCrossSection::GetPointer();
NxsManagerInEl = G4QNeutronNuclearCrossSection::GetPointer();
PBARxsManagerEl = G4QAntiBaryonElasticCrossSection::GetPointer();
PBARxsManagerInEl = G4QAntiBaryonNuclearCrossSection::GetPointer();
PIPxsManagerEl = G4QPionPlusElasticCrossSection::GetPointer();
PIPxsManagerInEl = G4QPionPlusNuclearCrossSection::GetPointer();
PIMxsManagerEl = G4QPionMinusElasticCrossSection::GetPointer();
PIMxsManagerInEl = G4QPionMinusNuclearCrossSection::GetPointer();
KPxsManagerEl = G4QKaonPlusElasticCrossSection::GetPointer();
KPxsManagerInEl = G4QKaonPlusNuclearCrossSection::GetPointer();
KMxsManagerEl = G4QKaonMinusElasticCrossSection::GetPointer();
KMxsManagerInEl = G4QKaonMinusNuclearCrossSection::GetPointer();
}
///////////////////////////////////////////////////////////////////////////////////////
G4ComponentCHIPShadronNuclearXS::~G4ComponentCHIPShadronNuclearXS()
{
}
////////////////////////////////////////////////////////////////////////////////
G4double G4ComponentCHIPShadronNuclearXS::GetTotalElementCrossSection
(const G4ParticleDefinition* aParticle, G4double kinEnergy, G4int Z, G4double N)
{
G4double momentum = std::sqrt(kinEnergy*(kinEnergy+2.*aParticle->GetPDGMass()));
G4int PDGcode=aParticle->GetPDGEncoding();
G4VQCrossSection* CHIPSmanagerEl=0;
G4VQCrossSection* CHIPSmanagerInEl=0;
if (PDGcode == 2212) // Projectile is Proton
{
CHIPSmanagerEl=PxsManagerEl; CHIPSmanagerInEl=PxsManagerInEl;
} else if(PDGcode == 2112) // Projectile is Neutron
{
CHIPSmanagerEl=NxsManagerEl; CHIPSmanagerInEl=NxsManagerInEl;
} else if(PDGcode == -2212) // Projectile is Anti-Proton
{
CHIPSmanagerEl=PBARxsManagerEl; CHIPSmanagerInEl=PBARxsManagerInEl;
} else if(PDGcode == -2112) // Projectile is Anti-Neutron
{
CHIPSmanagerEl=PBARxsManagerEl; CHIPSmanagerInEl=PBARxsManagerInEl;
} else if(PDGcode == 211) // Projectile is Pi+
{
CHIPSmanagerEl=PIPxsManagerEl; CHIPSmanagerInEl=PIPxsManagerInEl;
} else if(PDGcode == -211) // Projectile is Pi-
{
CHIPSmanagerEl=PIMxsManagerEl; CHIPSmanagerInEl=PIMxsManagerInEl;
} else if(PDGcode == 321) // Projectile is K+
{
CHIPSmanagerEl=KPxsManagerEl; CHIPSmanagerInEl=KPxsManagerInEl;
} else if(PDGcode == -321) // Projectile is K-
{
CHIPSmanagerEl=KMxsManagerEl; CHIPSmanagerInEl=KMxsManagerInEl;
}
G4double Xelastic(0.), Xinelastic(0.);
if((CHIPSmanagerEl != 0) && (CHIPSmanagerInEl != 0))
{
Xelastic = CHIPSmanagerEl->GetCrossSection(false,momentum,Z,(G4int)N,PDGcode);
Xinelastic = CHIPSmanagerInEl->GetCrossSection(false,momentum,Z,(G4int)N,PDGcode);
}
return Xelastic+Xinelastic;
}
////////////////////////////////////////////////////////////////////////////////
G4double G4ComponentCHIPShadronNuclearXS::GetTotalIsotopeCrossSection
(const G4ParticleDefinition* aParticle, G4double kinEnergy, G4int Z, G4int A )
{ return GetTotalElementCrossSection(aParticle, kinEnergy, Z, (G4double) A); }
////////////////////////////////////////////////////////////////////////////////
G4double G4ComponentCHIPShadronNuclearXS::GetInelasticElementCrossSection
(const G4ParticleDefinition* aParticle, G4double kinEnergy, G4int Z, G4double N)
{
G4double momentum = std::sqrt(kinEnergy*(kinEnergy+2.*aParticle->GetPDGMass()));
G4int PDGcode=aParticle->GetPDGEncoding();
G4VQCrossSection* CHIPSmanagerInEl=0;
if (PDGcode == 2212) // Projectile is Proton
{
CHIPSmanagerInEl=PxsManagerInEl;
} else if(PDGcode == 2112) // Projectile is Neutron
{
CHIPSmanagerInEl=NxsManagerInEl;
} else if(PDGcode == -2212) // Projectile is Anti-Proton
{
CHIPSmanagerInEl=PBARxsManagerInEl;
} else if(PDGcode == -2112) // Projectile is Anti-Neutron
{
CHIPSmanagerInEl=PBARxsManagerInEl;
} else if(PDGcode == 211) // Projectile is Pi+
{
CHIPSmanagerInEl=PIPxsManagerInEl;
} else if(PDGcode == -211) // Projectile is Pi-
{
CHIPSmanagerInEl=PIMxsManagerInEl;
} else if(PDGcode == 321) // Projectile is K+
{
CHIPSmanagerInEl=KPxsManagerInEl;
} else if(PDGcode == -321) // Projectile is K-
{
CHIPSmanagerInEl=KMxsManagerInEl;
}
G4double Xinelastic(0.);
if(CHIPSmanagerInEl != 0)
{
Xinelastic = CHIPSmanagerInEl->GetCrossSection(false,momentum,Z,(G4int)N,PDGcode);
}
return Xinelastic;
}
///////////////////////////////////////////////////////////////////////////////
G4double G4ComponentCHIPShadronNuclearXS::GetInelasticIsotopeCrossSection
(const G4ParticleDefinition* aParticle, G4double kinEnergy, G4int Z, G4int A)
{return GetInelasticElementCrossSection(aParticle, kinEnergy, Z, (G4double) A); }
///////////////////////////////////////////////////////////////////////////////
G4double G4ComponentCHIPShadronNuclearXS::GetElasticElementCrossSection
(const G4ParticleDefinition* aParticle, G4double kinEnergy, G4int Z, G4double N)
{
G4double momentum = std::sqrt(kinEnergy*(kinEnergy+2.*aParticle->GetPDGMass()));
G4int PDGcode=aParticle->GetPDGEncoding();
G4VQCrossSection* CHIPSmanagerEl=0;
if (PDGcode == 2212) // Projectile is Proton
{
CHIPSmanagerEl=PxsManagerEl;
} else if(PDGcode == 2112) // Projectile is Neutron
{
CHIPSmanagerEl=NxsManagerEl;
} else if(PDGcode == -2212) // Projectile is Anti-Proton
{
CHIPSmanagerEl=PBARxsManagerEl;
} else if(PDGcode == -2112) // Projectile is Anti-Neutron
{
CHIPSmanagerEl=PBARxsManagerEl;
} else if(PDGcode == 211) // Projectile is Pi+
{
CHIPSmanagerEl=PIPxsManagerEl;
} else if(PDGcode == -211) // Projectile is Pi-
{
CHIPSmanagerEl=PIMxsManagerEl;
} else if(PDGcode == 321) // Projectile is K+
{
CHIPSmanagerEl=KPxsManagerEl;
} else if(PDGcode == -321) // Projectile is K-
{
CHIPSmanagerEl=KMxsManagerEl;
}
G4double Xelastic(0.);
if(CHIPSmanagerEl != 0)
{
Xelastic = CHIPSmanagerEl->GetCrossSection(false,momentum,Z,(G4int)N,PDGcode);
}
return Xelastic;
}
///////////////////////////////////////////////////////////////////////////////
G4double G4ComponentCHIPShadronNuclearXS::GetElasticIsotopeCrossSection
(const G4ParticleDefinition* aParticle, G4double kinEnergy, G4int Z, G4int A)
{ return GetElasticElementCrossSection(aParticle, kinEnergy, Z, (G4double) A); }
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4DiffractiveExcitation.cc,v 1.24 2010/12/07 10:42:40 vuzhinsk Exp $
// $Id$
// ------------------------------------------------------------
// GEANT 4 class implemetation file
//
@@ -45,6 +45,8 @@
#include "globals.hh"
#include "Randomize.hh"
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
#include "G4DiffractiveExcitation.hh"
#include "G4FTFParameters.hh"
@@ -77,7 +79,7 @@ G4bool G4DiffractiveExcitation::
//G4cout<<G4endl<<"ExciteParticipants --------------"<<G4endl;
// -------------------- Projectile parameters -----------------------
G4LorentzVector Pprojectile=projectile->Get4Momentum();
//G4cout<<"Pproj "<<Pprojectile<<G4endl;
if(Pprojectile.z() < 0.)
{
target->SetStatus(2);
@@ -109,9 +111,10 @@ G4bool G4DiffractiveExcitation::
// -------------------- Target parameters -------------------------
G4int TargetPDGcode=target->GetDefinition()->GetPDGEncoding();
G4int absTargetPDGcode=std::abs(TargetPDGcode);
//G4cout<<"Excit "<<ProjectilePDGcode<<" "<<TargetPDGcode<<G4endl;
//G4cout<<"Entry to QE or Excit "<<ProjectilePDGcode<<" "<<TargetPDGcode<<G4endl;
G4LorentzVector Ptarget=target->Get4Momentum();
//G4cout<<"Pproj "<<Pprojectile<<G4endl;
//G4cout<<"Ptarget "<<Ptarget<<G4endl;
G4double M0target = Ptarget.mag();
@@ -130,6 +133,7 @@ G4bool G4DiffractiveExcitation::
G4double ProbTargetDiffraction=theParameters->GetProbabilityOfTarDiff();
G4double AveragePt2=theParameters->GetAveragePt2();
G4double ProbLogDistr=theParameters->GetProbLogDistr(); // Uzhi 21.05.2012
// G4double ProbOfDiffraction=ProbProjectileDiffraction +
// ProbTargetDiffraction;
@@ -142,6 +146,8 @@ G4bool G4DiffractiveExcitation::
Psum=Pprojectile+Ptarget;
G4double S=Psum.mag2();
//Uzhi_SqrtS=std::sqrt(S);
// Transform momenta to cms and then rotate parallel to z axis;
G4LorentzRotation toCms(-1*Psum.boostVector());
@@ -236,6 +242,13 @@ G4cout<<"M0pr M0tr "<<M0projectile<<" "<<M0target<<" "<<SumMasses<<G4endl;
//G4cout<<"Targ "<<Ptarget<<G4endl;
G4double maxPtSquare; // = PZcms2;
/*
Uzhi_targetdiffraction=0;
Uzhi_projectilediffraction=0;
Uzhi_Mx2=1.0;
Uzhi_modT=0.;
G4int Uzhi_QE=0;
*/
/*
G4cout<<"Start --------------------"<<G4endl;
G4cout<<"Proj "<<M0projectile<<" "<<ProjectileDiffStateMinMass<<" "<<ProjectileNonDiffStateMinMass<<G4endl;
G4cout<<"Targ "<<M0target <<" "<<TargetDiffStateMinMass <<" "<<TargetNonDiffStateMinMass<<G4endl;
@@ -245,8 +258,9 @@ G4cout<<"Rapid "<<ProjectileRapidity<<G4endl; //" "<<TargetRapidity<<G4endl;
// Charge exchange can be possible for baryons -----------------
// Getting the values needed for exchange ----------------------
G4double MagQuarkExchange =theParameters->GetMagQuarkExchange();
G4double SlopeQuarkExchange =theParameters->GetSlopeQuarkExchange();
G4double MagQuarkExchange =theParameters->GetMagQuarkExchange();//0.045; //
G4double SlopeQuarkExchange =theParameters->GetSlopeQuarkExchange();//0.; //
// 777777777777777777777777777777777777777777777777777777777777777777777777777777
G4double DeltaProbAtQuarkExchange=theParameters->GetDeltaProbAtQuarkExchange();
// G4double NucleonMass=
@@ -255,7 +269,7 @@ G4cout<<"Rapid "<<ProjectileRapidity<<G4endl; //" "<<TargetRapidity<<G4endl;
(G4ParticleTable::GetParticleTable()->FindParticle(2224))->GetPDGMass();
//G4double TargetRapidity(0.);
//G4cout<<"Prob Q Exch "<<MagQuarkExchange*std::exp(-SlopeQuarkExchange*(ProjectileRapidity - TargetRapidity))<<G4endl;
//G4cout<<"Prob Q Exch "<<MagQuarkExchange*std::exp(-SlopeQuarkExchange*ProjectileRapidity)<<G4endl;
//G4cout<<"Q exc Mag Slop Wdelta"<<MagQuarkExchange<<" "<<SlopeQuarkExchange<<" "<<DeltaProbAtQuarkExchange<<G4endl;
//G4cout<<"ProjectileRapidity "<<ProjectileRapidity<<G4endl;
@@ -268,6 +282,7 @@ G4cout<<"Rapid "<<ProjectileRapidity<<G4endl; //" "<<TargetRapidity<<G4endl;
{
// std::exp(-SlopeQuarkExchange*(ProjectileRapidity - 1.36))) //TargetRapidity))) 1.45
//G4cout<<"Q exchange"<<G4endl;
//Uzhi_QE=1;
G4int NewProjCode(0), NewTargCode(0);
G4int ProjQ1(0), ProjQ2(0), ProjQ3(0);
@@ -388,9 +403,24 @@ TestParticle=G4ParticleTable::GetParticleTable()->FindParticle(NewProjCode);
if(TestParticle)
{
M0projectile=
G4double MtestPart= // 31.05.2012
(G4ParticleTable::GetParticleTable()->FindParticle(NewProjCode))->GetPDGMass();
M0projectile2 = M0projectile * M0projectile;
/*
G4cout<<"TestParticle Name "<<NewProjCode<<" "<<TestParticle->GetParticleName()<<G4endl;
G4cout<<"MtestPart M0projectile projectile->GetDefinition()->GetPDGMass() "<<MtestPart<<" "<<M0projectile<<" "<<projectile->GetDefinition()->GetPDGMass()<<G4endl;
G4bool Test =M0projectile <= projectile->GetDefinition()->GetPDGMass();
G4cout<<"M0projectile <= projectile->GetDefinition()->GetPDGMass() "<<Test<<G4endl;
*/
if(MtestPart > M0projectile)
{M0projectile = MtestPart;}
else
{
if(std::abs(M0projectile - projectile->GetDefinition()->GetPDGMass()) < 140.*MeV)
{M0projectile = MtestPart;}
}
//G4cout<<"M0projectile After check "<<M0projectile<<G4endl;
M0projectile2 = M0projectile * M0projectile;
ProjectileDiffStateMinMass =M0projectile+210.*MeV; //210 MeV=m_pi+70 MeV
ProjectileNonDiffStateMinMass=M0projectile+210.*MeV; //210 MeV=m_pi+70 MeV
@@ -424,14 +454,20 @@ if(TestParticle)
// target->SetDefinition( // Fix 15.12.09
// G4ParticleTable::GetParticleTable()->FindParticle(NewTargCode));// Fix 15.12.09
//G4cout<<"NewTargCode "<<NewTargCode<<G4endl;
//G4int Uzhi; G4cin>>Uzhi;
TestParticle=G4ParticleTable::GetParticleTable()->FindParticle(NewTargCode);
//G4cout<<"New targ "<<NewTargCode<<" "<<TestParticle->GetParticleName()<<G4endl;
if(TestParticle)
{
M0target=
G4double MtestPart= // 31.05.2012
(G4ParticleTable::GetParticleTable()->FindParticle(NewTargCode))->GetPDGMass();
M0target2 = M0target * M0target;
if(MtestPart > M0target)
{M0target=MtestPart;}
else
{
if(std::abs(M0target - target->GetDefinition()->GetPDGMass()) < 140.*MeV)
{M0target=MtestPart;}
}
TargetDiffStateMinMass =M0target+220.*MeV; //220 MeV=m_pi+80 MeV;
TargetNonDiffStateMinMass=M0target+220.*MeV; //220 MeV=m_pi+80 MeV;
@@ -508,15 +544,6 @@ if(TestParticle)
NewProjCode = NewNucleonId(ProjQ1, ProjQ2, ProjQ3); // *****************************
//G4cout<<"ProjQ1, ProjQ2, ProjQ3 "<<ProjQ1<<" "<<ProjQ2<<" "<<ProjQ3<<" "<<NewProjCode<<G4endl;
//G4int TestParticleID=NewProjCode;
//G4ParticleDefinition* TestParticle=0;
//G4double TestParticleMass=DBL_MAX;
//TestParticle=G4ParticleTable::GetParticleTable()->FindParticle(NewProjCode);
//if(TestParticle) TestParticleMass=TestParticle->GetPDGMass();
if((ProjQ1==ProjQ2) && (ProjQ1==ProjQ3)) {NewProjCode +=2; ProjDeltaHasCreated=true;}
else if(projectile->GetDefinition()->GetPDGiIsospin() == 3)// Projectile was Delta
{ if(G4UniformRand() > DeltaProbAtQuarkExchange)
@@ -575,9 +602,14 @@ if(ProjDeltaHasCreated) {ProbProjectileDiffraction=1.; ProbTargetDiffraction=0.;
if(TargDeltaHasCreated) {ProbProjectileDiffraction=0.; ProbTargetDiffraction=1.;}
if(ProjDeltaHasCreated)
{
M0projectile=
G4double MtestPart= // 31.05.2012
(G4ParticleTable::GetParticleTable()->FindParticle(NewProjCode))->GetPDGMass();
M0projectile2 = M0projectile * M0projectile;
if(MtestPart >= M0projectile) // 31.05.2012
{ // 31.05.2012
M0projectile = MtestPart; // 31.05.2012
M0projectile2 = M0projectile * M0projectile; // 31.05.2012
} // 31.05.2012
ProjectileDiffStateMinMass =M0projectile+210.*MeV; //210 MeV=m_pi+70 MeV
ProjectileNonDiffStateMinMass=M0projectile+210.*MeV; //210 MeV=m_pi+70 MeV
@@ -587,9 +619,14 @@ if(TargDeltaHasCreated) {ProbProjectileDiffraction=0.; ProbTargetDiffraction=1.;
// (G4ParticleTable::GetParticleTable()->FindParticle(NewTargCode))->GetPDGMass())
if(TargDeltaHasCreated)
{
M0target=
G4double MtestPart= // 31.05.2012
(G4ParticleTable::GetParticleTable()->FindParticle(NewTargCode))->GetPDGMass();
M0target2 = M0target * M0target;
if(MtestPart >=M0target) // 31.05.2012
{ // 31.05.2012
M0target=MtestPart; // 31.05.2012
M0target2 = M0target * M0target; // 31.05.2012
} // 31.05.2012
TargetDiffStateMinMass =M0target+210.*MeV; //210 MeV=m_pi+70 MeV;
TargetNonDiffStateMinMass=M0target+210.*MeV; //210 MeV=m_pi+70 MeV;
@@ -642,6 +679,7 @@ if(TargDeltaHasCreated) {ProbProjectileDiffraction=0.; ProbTargetDiffraction=1.;
target->Set4Momentum(Ptarget);
G4bool Result= theElastic->ElasticScattering (projectile,target,theParameters);
//G4cout<<"Result of el. scatt "<<Result<<G4endl;
return Result;
} // end of if(Make elastic scattering for projectile meson?)
} else
@@ -677,7 +715,7 @@ G4cout<<"SqrtS "<<SqrtS<<G4endl;
G4cout<<"Prob ProjDiff TargDiff "<<ProbProjectileDiffraction<<" "<<ProbTargetDiffraction<<" "<<ProbOfDiffraction<<G4endl;
G4cout<<"Pr Y "<<Pprojectile.rapidity()<<" Tr Y "<<Ptarget.rapidity()<<G4endl;
G4int Uzhi; G4cin>>Uzhi;
//G4int Uzhi; G4cin>>Uzhi;
*/
/*
if(ProjectileNonDiffStateMinMass + TargetNonDiffStateMinMass > SqrtS) // 24.07.10
@@ -726,7 +764,8 @@ G4int Uzhi; G4cin>>Uzhi;
G4int whilecount=0;
// Choose a process ---------------------------
//ProbOfDiffraction=1.; // Uzhi Difr
//ProbProjectileDiffraction=1.; // Uzhi
if(G4UniformRand() < ProbOfDiffraction)
{
if(G4UniformRand() < ProbProjectileDiffraction)
@@ -734,6 +773,11 @@ G4int Uzhi; G4cin>>Uzhi;
//G4cout<<"projectile diffraction"<<G4endl;
do {
/*
Uzhi_projectilediffraction=1;
Uzhi_targetdiffraction=0;
Uzhi_Mx2=1.;
*/
// Generate pt
// if (whilecount++ >= 500 && (whilecount%100)==0)
// G4cout << "G4DiffractiveExcitation::ExciteParticipants possibly looping"
@@ -802,12 +846,18 @@ G4int Uzhi; G4cin>>Uzhi;
} while ((Pprojectile+Qmomentum).mag2() < ProjectileDiffStateMinMass2); //||
//Repeat the sampling because there was not any excitation
//((Ptarget -Qmomentum).mag2() < M0target2 )) );
projectile->SetStatus(1*projectile->GetStatus()); // VU 10.04.2012
}
else
{ // -------------- Target diffraction ----------------
//G4cout<<"Target diffraction"<<G4endl;
do {
/*
Uzhi_projectilediffraction=0;
Uzhi_targetdiffraction=1;
Uzhi_Mx2=1.;
*/
// Generate pt
// if (whilecount++ >= 500 && (whilecount%100)==0)
// G4cout << "G4DiffractiveExcitation::ExciteParticipants possibly looping"
@@ -890,6 +940,7 @@ G4cout<<Seco<<G4endl;
// (((Pprojectile+Qmomentum).mag2() < M0projectile2 ) || //No without excitation
// ((Ptarget -Qmomentum).mag2() < TargetDiffStateMinMass2)) );
//G4cout<<"Go out"<<G4endl;
target->SetStatus(1*target->GetStatus()); // VU 10.04.2012
} // End of if(G4UniformRand() < ProbProjectileDiffraction)
}
else //----------- Non-diffraction process ------------
@@ -897,6 +948,11 @@ G4cout<<Seco<<G4endl;
//G4cout<<"Non-diffraction process"<<G4endl;
do {
/*
Uzhi_projectilediffraction=0;
Uzhi_targetdiffraction=0;
Uzhi_Mx2=1.;
*/
// Generate pt
// if (whilecount++ >= 500 && (whilecount%100)==0)
// G4cout << "G4DiffractiveExcitation::ExciteParticipants possibly looping"
@@ -946,16 +1002,18 @@ G4cout<<Seco<<G4endl;
PMinusMin=std::sqrt(ProjMassT2+PZcms2)-PZcms;
PMinusMax=SqrtS-TargMassT;
// PMinusNew=ChooseP(PMinusMin, PMinusMax); // 12.06.11
PMinusNew=(PMinusMax-PMinusMin)*G4UniformRand() + PMinusMin;
if(G4UniformRand() < ProbLogDistr) // Uzhi 25.04.2012
{ PMinusNew=ChooseP(PMinusMin, PMinusMax);} // 12.06.11
else {PMinusNew=(PMinusMax-PMinusMin)*G4UniformRand() + PMinusMin;}
Qminus=PMinusNew-Pprojectile.minus();
TPlusMin=std::sqrt(TargMassT2+PZcms2)-PZcms;
// TPlusMax=SqrtS-PMinusNew;
TPlusMax=SqrtS-ProjMassT;
TPlusMax=SqrtS-PMinusNew; // Why is it closed???
// TPlusMax=SqrtS-ProjMassT;
// TPlusNew=ChooseP(TPlusMin, TPlusMax); // 12.06.11
TPlusNew=(TPlusMax-TPlusMin)*G4UniformRand() +TPlusMin;
if(G4UniformRand() < 0.5) //ProbLogDistr) // Uzhi 29.05.2012 0.5)
{ TPlusNew=ChooseP(TPlusMin, TPlusMax);} // 12.06.11
else {TPlusNew=(TPlusMax-TPlusMin)*G4UniformRand() +TPlusMin;}
Qplus=-(TPlusNew-Ptarget.plus());
@@ -969,6 +1027,9 @@ G4int Uzhi; G4cin>>Uzhi;
} while (
((Pprojectile+Qmomentum).mag2() < ProjectileNonDiffStateMinMass2) || //No double Diffraction
((Ptarget -Qmomentum).mag2() < TargetNonDiffStateMinMass2 ));
projectile->SetStatus(0*projectile->GetStatus()); // VU 10.04.2012
target->SetStatus(0*target->GetStatus()); // VU 10.04.2012
}
Pprojectile += Qmomentum;
@@ -986,7 +1047,20 @@ G4int Uzhi; G4cin>>Uzhi;
// Creation time and position of target nucleon were determined at
// 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.;
}
*/
//G4cout<<"Mproj "<<Pprojectile.mag()<<G4endl;
//G4cout<<"Mtarg "<<Ptarget.mag()<<G4endl;
projectile->Set4Momentum(Pprojectile);
@@ -1065,8 +1139,13 @@ G4cout<<"Defin "<<hadron->GetDefinition()->GetPDGEncoding()<<G4endl;
//G4cout<<G4endl<<"Check for Kink!##############"<<G4endl<<G4endl;
if(W > Wmin)
{ // Kink is possible
G4double Pt2kink=theParameters->GetPt2Kink();
Pt = std::sqrt(Pt2kink*(std::pow(W2/16./Pt2kink+1.,G4UniformRand()) - 1.));
if(hadron->GetStatus() == 0) // VU 10.04.2012
{
G4double Pt2kink=theParameters->GetPt2Kink(); // For non-diffractive
Pt = std::sqrt(Pt2kink*(std::pow(W2/16./Pt2kink+1.,G4UniformRand()) - 1.));
}
else
{Pt=0.;} // For diffractive
if(Pt > 500.*MeV)
{
@@ -1320,28 +1399,28 @@ if((start->GetDefinition()->GetParticleSubType() == "quark") &&
tmp.set(0.,0.,1.);
}
G4LorentzVector Pstart(tmp,0.);
G4LorentzVector Pend(tmp,0.);
G4LorentzVector Pstart1(tmp,0.);
G4LorentzVector Pend1(tmp,0.);
if(isProjectile)
{
Pstart*=(-1.)*Minus/2.;
Pend *=(+1.)*Plus /2.;
Pstart1*=(-1.)*Minus/2.;
Pend1 *=(+1.)*Plus /2.;
}
else
{
Pstart*=(+1.)*Plus/2.;
Pend *=(-1.)*Minus/2.;
Pstart1*=(+1.)*Plus/2.;
Pend1 *=(-1.)*Minus/2.;
}
Momentum=-Pstart.mag();
Pstart.setT(Momentum); // It is assumed that quark has m=0.
Momentum=-Pstart1.mag();
Pstart1.setT(Momentum); // It is assumed that quark has m=0.
Momentum=-Pend.mag();
Pend.setT(Momentum); // It is assumed that di-quark has m=0.
Momentum=-Pend1.mag();
Pend1.setT(Momentum); // It is assumed that di-quark has m=0.
start->Set4Momentum(Pstart);
end->Set4Momentum(Pend);
start->Set4Momentum(Pstart1);
end->Set4Momentum(Pend1);
SecondString=0;
} // End of kink is impossible
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4DiffractiveSplitableHadron.cc,v 1.10 2010/12/07 10:42:40 vuzhinsk Exp $
// $Id$
// GEANT4 tag $Name: $
//
@@ -76,11 +76,6 @@ G4DiffractiveSplitableHadron::~G4DiffractiveSplitableHadron()
// if(Parton[0] != NULL){delete Parton[0]; delete Parton[1];}
}
const G4DiffractiveSplitableHadron & G4DiffractiveSplitableHadron::operator=(const G4DiffractiveSplitableHadron &)
{
throw G4HadronicException(__FILE__, __LINE__, "G4DiffractiveSplitableHadron::operator= meant to not be accessable");
return *this;
}
void G4DiffractiveSplitableHadron::SplitUp()
{
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4ElasticHNScattering.cc,v 1.14 2009-12-16 17:51:13 gunter Exp $
// $Id$
// ------------------------------------------------------------
// GEANT 4 class implemetation file
//
@@ -38,6 +38,7 @@
#include "globals.hh"
#include "Randomize.hh"
#include "G4PhysicalConstants.hh"
#include "G4ElasticHNScattering.hh"
#include "G4LorentzRotation.hh"
@@ -137,6 +138,7 @@ G4bool G4ElasticHNScattering::
PZcms2=(S*S+Mprojectile2*Mprojectile2+Mtarget2*Mtarget2-
2*S*Mprojectile2 - 2*S*Mtarget2 - 2*Mprojectile2*Mtarget2)
/4./S;
if(PZcms2 < 0.){ return false;} // Non succesful attempt after the de-excitation
}
else // if(M0projectile > projectile->GetDefinition()->GetPDGMass())
@@ -181,7 +183,6 @@ G4bool G4ElasticHNScattering::
G4double TargMassT2; //, TargMassT;
G4LorentzVector Qmomentum;
Qmomentum=G4LorentzVector(GaussianPt(AveragePt2,maxPtSquare),0);
Pt2=G4ThreeVector(Qmomentum.vect()).mag2();
@@ -262,19 +263,19 @@ G4ElasticHNScattering::~G4ElasticHNScattering()
const G4ElasticHNScattering & G4ElasticHNScattering::operator=(const G4ElasticHNScattering &)
{
throw G4HadronicException(__FILE__, __LINE__, "G4ElasticHNScattering = operator meant to be called");
return *this;
throw G4HadronicException(__FILE__, __LINE__, "G4ElasticHNScattering = operator not meant to be called");
//return *this; //A.R. 25-Jul-2012 : fix Coverity
}
int G4ElasticHNScattering::operator==(const G4ElasticHNScattering &) const
{
throw G4HadronicException(__FILE__, __LINE__, "G4ElasticHNScattering == operator meant to be called");
return false;
throw G4HadronicException(__FILE__, __LINE__, "G4ElasticHNScattering == operator not meant to be called");
//return false; //A.R. 25-Jul-2012 : fix Coverity
}
int G4ElasticHNScattering::operator!=(const G4ElasticHNScattering &) const
{
throw G4HadronicException(__FILE__, __LINE__, "G4ElasticHNScattering != operator meant to be called");
return true;
throw G4HadronicException(__FILE__, __LINE__, "G4ElasticHNScattering != operator not meant to be called");
//return true; //A.R. 25-Jul-2012 : fix Coverity
}
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4FTFAnnihilation.cc,v 1.1 2010/12/07 10:42:40 vuzhinsk Exp $
// $Id$
// ------------------------------------------------------------
// GEANT 4 class implemetation file
//
@@ -45,6 +45,8 @@
#include "globals.hh"
#include "Randomize.hh"
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
#include "G4DiffractiveSplitableHadron.hh"
#include "G4DiffractiveExcitation.hh"
@@ -189,43 +191,43 @@ G4bool G4FTFAnnihilation::
//G4cout<<"Annih X a b c d "<<X_a<<" "<<X_b<<" "<<X_c<<" "<<X_d<<G4endl;
if((ProjectilePDGcode == -2212)&&(TargetPDGcode == 2212))
if((ProjectilePDGcode == -2212)&&((TargetPDGcode == 2212)||(TargetPDGcode == 2214)))
{X_b*=5.; X_c*=5.; X_d*=6.;} // Pbar P
else if((ProjectilePDGcode == -2212)&&(TargetPDGcode == 2112))
else if((ProjectilePDGcode == -2212)&&((TargetPDGcode == 2112)||(TargetPDGcode == 2114)))
{X_b*=4.; X_c*=4.; X_d*=4.;} // Pbar N
else if((ProjectilePDGcode == -2112)&&(TargetPDGcode == 2212))
else if((ProjectilePDGcode == -2112)&&((TargetPDGcode == 2212)||(TargetPDGcode == 2214)))
{X_b*=4.; X_c*=4.; X_d*=4.;} // NeutrBar P
else if((ProjectilePDGcode == -2112)&&(TargetPDGcode == 2112))
else if((ProjectilePDGcode == -2112)&&((TargetPDGcode == 2112)||(TargetPDGcode == 2114)))
{X_b*=5.; X_c*=5.; X_d*=6.;} // NeutrBar N
else if((ProjectilePDGcode == -3122)&&(TargetPDGcode == 2212))
else if((ProjectilePDGcode == -3122)&&((TargetPDGcode == 2212)||(TargetPDGcode == 2214)))
{X_b*=3.; X_c*=3.; X_d*=2.;} // LambdaBar P
else if((ProjectilePDGcode == -3122)&&(TargetPDGcode == 2112))
else if((ProjectilePDGcode == -3122)&&((TargetPDGcode == 2112)||(TargetPDGcode == 2114)))
{X_b*=3.; X_c*=3.; X_d*=2.;} // LambdaBar N
else if((ProjectilePDGcode == -3112)&&(TargetPDGcode == 2212))
else if((ProjectilePDGcode == -3112)&&((TargetPDGcode == 2212)||(TargetPDGcode == 2214)))
{X_b*=2.; X_c*=2.; X_d*=0.;} // Sigma-Bar P
else if((ProjectilePDGcode == -3112)&&(TargetPDGcode == 2112))
else if((ProjectilePDGcode == -3112)&&((TargetPDGcode == 2112)||(TargetPDGcode == 2114)))
{X_b*=4.; X_c*=4.; X_d*=2.;} // Sigma-Bar N
else if((ProjectilePDGcode == -3212)&&(TargetPDGcode == 2212))
else if((ProjectilePDGcode == -3212)&&((TargetPDGcode == 2212)||(TargetPDGcode == 2214)))
{X_b*=3.; X_c*=3.; X_d*=2.;} // Sigma0Bar P
else if((ProjectilePDGcode == -3212)&&(TargetPDGcode == 2112))
else if((ProjectilePDGcode == -3212)&&((TargetPDGcode == 2112)||(TargetPDGcode == 2114)))
{X_b*=3.; X_c*=3.; X_d*=2.;} // Sigma0Bar N
else if((ProjectilePDGcode == -3222)&&(TargetPDGcode == 2212))
else if((ProjectilePDGcode == -3222)&&((TargetPDGcode == 2212)||(TargetPDGcode == 2214)))
{X_b*=4.; X_c*=4.; X_d*=2.;} // Sigma+Bar P
else if((ProjectilePDGcode == -3222)&&(TargetPDGcode == 2112))
{X_b*=2.; X_c*=2.; X_d*=0.;} // Sigma+Bar P
else if((ProjectilePDGcode == -3312)&&(TargetPDGcode == 2212))
else if((ProjectilePDGcode == -3222)&&((TargetPDGcode == 2112)||(TargetPDGcode == 2114)))
{X_b*=2.; X_c*=2.; X_d*=0.;} // Sigma+Bar N
else if((ProjectilePDGcode == -3312)&&((TargetPDGcode == 2212)||(TargetPDGcode == 2214)))
{X_b*=1.; X_c*=1.; X_d*=0.;} // Xi-Bar P
else if((ProjectilePDGcode == -3312)&&(TargetPDGcode == 2112))
else if((ProjectilePDGcode == -3312)&&((TargetPDGcode == 2112)||(TargetPDGcode == 2114)))
{X_b*=2.; X_c*=2.; X_d*=0.;} // Xi-Bar N
else if((ProjectilePDGcode == -3322)&&(TargetPDGcode == 2212))
else if((ProjectilePDGcode == -3322)&&((TargetPDGcode == 2212)||(TargetPDGcode == 2214)))
{X_b*=2.; X_c*=2.; X_d*=0.;} // Xi0Bar P
else if((ProjectilePDGcode == -3322)&&(TargetPDGcode == 2112))
else if((ProjectilePDGcode == -3322)&&((TargetPDGcode == 2112)||(TargetPDGcode == 2114)))
{X_b*=1.; X_c*=1.; X_d*=0.;} // Xi0Bar N
else if((ProjectilePDGcode == -3334)&&(TargetPDGcode == 2212))
else if((ProjectilePDGcode == -3334)&&((TargetPDGcode == 2212)||(TargetPDGcode == 2214)))
{X_b*=0.; X_c*=0.; X_d*=0.;} // Omega-Bar P
else if((ProjectilePDGcode == -3334)&&(TargetPDGcode == 2112))
else if((ProjectilePDGcode == -3334)&&((TargetPDGcode == 2112)||(TargetPDGcode == 2114)))
{X_b*=0.; X_c*=0.; X_d*=0.;} // Omega-Bar N
else {G4cout<<"Unknown anti-baryon for FTF annihilation"<<G4endl;}
else {G4cout<<"Unknown anti-baryon for FTF annihilation: PDGcodes - "<<ProjectilePDGcode<<" "<<TargetPDGcode<<G4endl;}
//G4cout<<"Annih X a b c d "<<X_a<<" "<<X_b<<" "<<X_c<<" "<<X_d<<G4endl;
//=========================================
@@ -1111,19 +1113,19 @@ G4FTFAnnihilation::~G4FTFAnnihilation()
const G4FTFAnnihilation & G4FTFAnnihilation::operator=(const G4FTFAnnihilation &)
{
throw G4HadronicException(__FILE__, __LINE__, "G4FTFAnnihilation = operator meant to be called");
return *this;
throw G4HadronicException(__FILE__, __LINE__, "G4FTFAnnihilation = operator not meant to be called");
//return *this; //A.R. 25-Jul-2012 : fix Coverity
}
int G4FTFAnnihilation::operator==(const G4FTFAnnihilation &) const
{
throw G4HadronicException(__FILE__, __LINE__, "G4FTFAnnihilation == operator meant to be called");
return false;
throw G4HadronicException(__FILE__, __LINE__, "G4FTFAnnihilation == operator not meant to be called");
//return false; //A.R. 25-Jul-2012 : fix Coverity
}
int G4FTFAnnihilation::operator!=(const G4FTFAnnihilation &) const
{
throw G4HadronicException(__FILE__, __LINE__, "G4DiffractiveExcitation != operator meant to be called");
return true;
throw G4HadronicException(__FILE__, __LINE__, "G4DiffractiveExcitation != operator not meant to be called");
//return true; //A.R. 25-Jul-2012 : fix Coverity
}
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4FTFModel.cc,v 1.38 2010/12/07 10:42:40 vuzhinsk Exp $
// $Id$
// GEANT4 tag $Name: $
//
@@ -36,7 +36,12 @@
// class implementing the excitation in the FTF Parton String Model
// ------------------------------------------------------------
#include <utility>
#include "G4FTFModel.hh"
#include "G4ios.hh"
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
#include "G4FTFParameters.hh"
#include "G4FTFParticipants.hh"
#include "G4DiffractiveSplitableHadron.hh"
@@ -44,13 +49,12 @@
#include "G4LorentzRotation.hh"
#include "G4ParticleDefinition.hh"
#include "G4ParticleTable.hh"
#include "G4ios.hh"
#include <utility>
#include "G4IonTable.hh"
// Class G4FTFModel
G4FTFModel::G4FTFModel():theExcitation(new G4DiffractiveExcitation()),
G4FTFModel::G4FTFModel(const G4String& modelName):G4VPartonStringModel(modelName),
theExcitation(new G4DiffractiveExcitation()),
theElastic(new G4ElasticHNScattering()),
theAnnihilation(new G4FTFAnnihilation())
{
@@ -58,6 +62,7 @@ G4FTFModel::G4FTFModel():theExcitation(new G4DiffractiveExcitation()),
theParameters=0;
NumberOfInvolvedNucleon=0;
NumberOfInvolvedNucleonOfProjectile=0;
SetEnergyMomentumCheckLevels(2*perCent, 150*MeV);
}
struct DeleteVSplitableHadron { void operator()(G4VSplitableHadron * aH){ delete aH;} };
@@ -103,22 +108,6 @@ G4FTFModel::~G4FTFModel()
*/
}
const G4FTFModel & G4FTFModel::operator=(const G4FTFModel &)
{
throw G4HadronicException(__FILE__, __LINE__, "G4FTFModel::operator= is not meant to be accessed ");
return *this;
}
int G4FTFModel::operator==(const G4FTFModel &right) const
{
return this==&right;
}
int G4FTFModel::operator!=(const G4FTFModel &right) const
{
return this!=&right;
}
// ------------------------------------------------------------
void G4FTFModel::Init(const G4Nucleus & aNucleus, const G4DynamicParticle & aProjectile)
{
@@ -220,7 +209,7 @@ G4ExcitedStringVector * G4FTFModel::GetStrings()
theParticipants.GetList(theProjectile,theParameters);
// StoreInvolvedNucleon();
//G4cout<<" GetList theProjectile.GetMomentum()"<<theProjectile.GetMomentum()<<G4endl;
//G4cout<<" GetList theProjectile.GetMomentum() GetBaryonNumber() "<<theProjectile.GetMomentum()<<" "<<theProjectile.GetDefinition()->GetBaryonNumber()<<G4endl;
G4bool Success(true);
if((std::abs(theProjectile.GetDefinition()->GetBaryonNumber()) <= 1) &&
@@ -663,17 +652,17 @@ G4bool G4FTFModel::PutOnMassShell()
G4LorentzRotation toCms(-1*P_total.boostVector());
G4LorentzVector Ptmp=toCms*P_participants;
G4LorentzVector Pcms=toCms*P_participants;
//G4cout<<"Ppart in CMS "<<Ptmp<<G4endl;
if ( Ptmp.pz() <= 0. )
if ( Pcms.pz() <= 0. )
{ // "String" moving backwards in CMS, abort collision !!
//G4cout << " abort ColliDeleteVSplitableHadronsion!! " << G4endl;
return false;
}
toCms.rotateZ(-1*Ptmp.phi()); // Uzhi 5.12.09
toCms.rotateY(-1*Ptmp.theta()); // Uzhi 5.12.09
toCms.rotateZ(-1*Pcms.phi()); // Uzhi 5.12.09
toCms.rotateY(-1*Pcms.theta()); // Uzhi 5.12.09
//G4cout<<"Mpa M res "<<ResidualMass<<" "<<MassOfParticipants<<" "<<SqrtS<<G4endl;
G4LorentzRotation toLab(toCms.inverse());
@@ -743,7 +732,7 @@ G4bool G4FTFModel::PutOnMassShell()
G4VSplitableHadron * primary = theParticipants.GetInteraction().GetProjectile();
G4LorentzVector Pprojectile=primary->Get4Momentum();
G4bool ProjectileIsAntiBaryon = primary->GetDefinition()->GetBaryonNumber() < 0;
// 13.06.2012 G4bool ProjectileIsAntiBaryon = primary->GetDefinition()->GetBaryonNumber() < 0;
//G4cout<<"PutOnMass Pprojectile "<<Pprojectile<<G4endl;
// To get original projectile particle
@@ -757,16 +746,16 @@ G4bool G4FTFModel::PutOnMassShell()
G4double SumMasses = Mprojectile + 20.*MeV; // 13.12.09
// Separation energy for projectile
if(ProjectileIsAntiBaryon) {SumMasses = Mprojectile;}
// if(ProjectileIsAntiBaryon) {SumMasses = Mprojectile;}
//G4cout<<"SumMasses Pr "<<SumMasses<<G4endl;
//--------------- Target nucleus ------------------------------
G4V3DNucleus *theNucleus = GetWoundedNucleus();
G4Nucleon * aNucleon;
G4int ResidualMassNumber=theNucleus->GetMassNumber();
G4int ResidualCharge =theNucleus->GetCharge();
ResidualExcitationEnergy=0.;
G4LorentzVector Ptarget(0.,0.,0.,0.); // Uzhi 20 Sept.
G4LorentzVector Ptarget(0.,0.,0.,0.);
G4LorentzVector PnuclearResidual(0.,0.,0.,0.); // Uzhi 12.06.2012
G4double ExcitationEnergyPerWoundedNucleon=
theParameters->GetExcitationEnergyPerWoundedNucleon();
@@ -775,19 +764,21 @@ G4bool G4FTFModel::PutOnMassShell()
theNucleus->StartLoop();
while ((aNucleon = theNucleus->GetNextNucleon()))
while (G4Nucleon * aNucleon = theNucleus->GetNextNucleon())
{
Ptarget+=aNucleon->Get4Momentum(); // Uzhi 20 Sept.
Ptarget+=aNucleon->Get4Momentum();
if(aNucleon->AreYouHit())
{ // Involved nucleons
//G4cout<<"PutOn Tr "<<aNucleon->Get4Momentum()<<G4endl;
// Psum += aNucleon->Get4Momentum(); // Uzhi 20 Sept.
if(!ProjectileIsAntiBaryon)
{
SumMasses += aNucleon->GetDefinition()->GetPDGMass();
// if(!ProjectileIsAntiBaryon) // Uzhi 13.06.2012
// {
SumMasses += std::sqrt(sqr(aNucleon->GetDefinition()->GetPDGMass()) //Uzhi 12.06.2012
+ aNucleon->Get4Momentum().perp2()); //Uzhi 12.06.2012
SumMasses += 20.*MeV; // 13.12.09 Separation energy for a nucleon
ResidualExcitationEnergy+=ExcitationEnergyPerWoundedNucleon;
/* //Uzhi 13.06.2012
} else
{
SumMasses += aNucleon->Get4Momentum().mag(); // 4.12.2010
@@ -795,33 +786,21 @@ G4bool G4FTFModel::PutOnMassShell()
tmp.setE(aNucleon->Get4Momentum().mag()); // It is need to save mass 6.12.2011
aNucleon->SetMomentum(tmp);
}
*/ //Uzhi 13.06.2012
//G4cout<<"SumMasses Tr "<<SumMasses<<G4endl;
//if(SumMasses+ResidualExcitationEnergy > Psum.mag())
//{
// SetStatus ???
// if(!ProjectileIsAntiBaryon)
// {
// SumMasses -= aNucleon->GetDefinition()->GetPDGMass();
// SumMasses -= 20.*MeV;
// ResidualExcitationEnergy-=ExcitationEnergyPerWoundedNucleon;
// } else
// {
// SumMasses -= aNucleon->Get4Momentum().mag();
// tmp ???
// }
//}
ResidualMassNumber--;
ResidualCharge-=(G4int) aNucleon->GetDefinition()->GetPDGCharge();
}
else
{ // Spectator nucleons
// PnuclearResidual += aNucleon->Get4Momentum(); // Uzhi 20 Sept.
PnuclearResidual += aNucleon->Get4Momentum(); // Uzhi 12.06.2012
} // end of if(!aNucleon->AreYouHit())
} // end of while (theNucleus->GetNextNucleon())
Psum += Ptarget; // PnuclearResidual; // Uzhi 20 Sept.
//G4cout<<"ResidualCharge ,ResidualMassNumber "<<ResidualCharge<<" "<<ResidualMassNumber<<" "<<Ptarget<<G4endl;
Psum += Ptarget;
PnuclearResidual.setPz(0.); PnuclearResidual.setE(0.); // Uzhi 12.06.2012
//G4cout<<"ResidualCharge ,ResidualMassNumber "<<ResidualCharge<<" "<<ResidualMassNumber<<" "<<Ptarget<<" "<<PnuclearResidual<<G4endl;
G4double ResidualMass(0.);
if(ResidualMassNumber == 0)
{
@@ -837,7 +816,7 @@ G4bool G4FTFModel::PutOnMassShell()
// ResidualMass +=ResidualExcitationEnergy; // Will be given after checks
//G4cout<<"SumMasses And ResidualMass "<<SumMasses<<" "<<ResidualMass<<G4endl;
SumMasses += ResidualMass;
SumMasses += std::sqrt(sqr(ResidualMass)+PnuclearResidual.mag2()); // Uzhi 12.06.2012
//G4cout<<"SumMasses + ResM "<<SumMasses<<G4endl;
//G4cout<<"Psum "<<Psum<<G4endl;
//-------------------------------------------------------------
@@ -851,36 +830,59 @@ G4bool G4FTFModel::PutOnMassShell()
// after putting nuclear nucleons
// on mass-shell
if(SqrtS < SumMasses+ResidualExcitationEnergy) {ResidualExcitationEnergy=0.;}
SumMasses -= std::sqrt(sqr(ResidualMass)+PnuclearResidual.mag2()); // Uzhi 12.06.2012
SumMasses += std::sqrt(sqr(ResidualMass+ResidualExcitationEnergy)
+PnuclearResidual.mag2()); // Uzhi 12.06.2012
if(SqrtS < SumMasses) // Uzhi 12.06.2012
{
SumMasses -= std::sqrt(sqr(ResidualMass+ResidualExcitationEnergy)
+PnuclearResidual.mag2()); // Uzhi 12.06.2012
SumMasses += std::sqrt(sqr(ResidualMass)+PnuclearResidual.mag2());// Uzhi 12.06.2012
ResidualExcitationEnergy=0.;
}
ResidualMass +=ResidualExcitationEnergy;
SumMasses +=ResidualExcitationEnergy;
//G4cout<<"ResidualMass "<<ResidualMass<<" "<<SumMasses<<G4endl;
// SumMasses +=ResidualExcitationEnergy; // Uzhi 12.06.2012
//G4cout<<"ResidualMass SumMasses ResidualExcitationEnergy "<<ResidualMass<<" "<<SumMasses<<" "<<ResidualExcitationEnergy<<G4endl;
//-------------------------------------------------------------
// Sampling of nucleons what are transfered to delta-isobars --
G4int MaxNumberOfDeltas = (int)((SqrtS - SumMasses)/(400.*MeV));
G4int NumberOfDeltas(0);
//G4cout<<"MaxNumberOfDeltas "<<MaxNumberOfDeltas<<G4endl;
if(theNucleus->GetMassNumber() != 1)
{
G4double ProbDeltaIsobar(0.); // 1. *** Can be set if it is needed
//G4cout<<"NumberOfInvolvedNucleon "<<NumberOfInvolvedNucleon<<G4endl;
G4double ProbDeltaIsobar(0.05); // Uzhi 6.07.2012
for(G4int i=0; i < NumberOfInvolvedNucleon; i++ )
{
if((G4UniformRand() < ProbDeltaIsobar)&&(NumberOfDeltas < MaxNumberOfDeltas))
{
NumberOfDeltas++;
G4VSplitableHadron * targetSplitable=TheInvolvedNucleon[i]->GetSplitableHadron();
SumMasses-=targetSplitable->GetDefinition()->GetPDGMass();
G4double MassDec=std::sqrt(sqr(targetSplitable->GetDefinition()->GetPDGMass())
+ targetSplitable->Get4Momentum().perp2());
G4int PDGcode = targetSplitable->GetDefinition()->GetPDGEncoding();
G4ParticleDefinition* Old_def = targetSplitable->GetDefinition();
G4int newPDGcode = PDGcode/10; newPDGcode=newPDGcode*10+4; // Delta
G4ParticleDefinition* ptr =
G4ParticleTable::GetParticleTable()->FindParticle(newPDGcode);
targetSplitable->SetDefinition(ptr);
SumMasses+=targetSplitable->GetDefinition()->GetPDGMass();
G4double MassInc=std::sqrt(sqr(targetSplitable->GetDefinition()->GetPDGMass())
+ targetSplitable->Get4Momentum().perp2());
if(SqrtS < SumMasses + MassInc - MassDec) // Uzhi 12.06.2012
{ // Change cannot be acsepted!
targetSplitable->SetDefinition(Old_def);
ProbDeltaIsobar = 0.;
} else
{ // Change is acsepted.
SumMasses += (MassInc - MassDec);
}
}
} // end of for(G4int i=0; i < NumberOfInvolvedNucleon; i++ )
} // end of if(theNucleus.GetMassNumber() != 1)
//-------------------------------------------------------------
G4LorentzRotation toCms(-1*Psum.boostVector());
@@ -890,14 +892,10 @@ G4bool G4FTFModel::PutOnMassShell()
//G4cout << " abort ColliDeleteVSplitableHadronsion!! " << G4endl;
return false;
}
//G4cout<<"Yprojectile hadron "<<Ptmp.rapidity()<<G4endl;
// toCms.rotateZ(-1*Ptmp.phi()); // Uzhi 5.12.09
// toCms.rotateY(-1*Ptmp.theta()); // Uzhi 5.12.09
G4LorentzRotation toLab(toCms.inverse());
// Ptmp=toCms*PnuclearResidual; // Uzhi 20 Sept.
Ptmp=toCms*Ptarget; // Uzhi 20 Sept.
Ptmp=toCms*Ptarget;
G4double YtargetNucleus=Ptmp.rapidity();
//G4cout<<"YtargetNucleus "<<YtargetNucleus<<G4endl;
//-------------------------------------------------------------
@@ -923,8 +921,7 @@ G4bool G4FTFModel::PutOnMassShell()
{ // while (DecayMomentum < 0.)
NumberOfTries++;
//G4cout<<"NumberOfTries "<<NumberOfTries<<G4endl;
//{G4int Uzhi; G4cin>>Uzhi;}
if(NumberOfTries == 100*(NumberOfTries/100)) // 100
{ // At large number of tries it would be better to reduce the values
ScaleFactor/=2.;
@@ -932,7 +929,7 @@ G4bool G4FTFModel::PutOnMassShell()
AveragePt2 *=ScaleFactor;
}
G4ThreeVector PtSum(0.,0.,0.), PtRes(0.,0.,0.);
G4ThreeVector PtSum(0.,0.,0.);
G4double XminusSum(0.);
G4double Xminus(0.);
G4bool InerSuccess=true;
@@ -947,41 +944,34 @@ G4bool G4FTFModel::PutOnMassShell()
for(G4int i=0; i < NumberOfInvolvedNucleon; i++ )
{
G4Nucleon * aNucleon = TheInvolvedNucleon[i];
PtRes-=aNucleon->Get4Momentum().vect();
G4ThreeVector tmpPt = GaussianPt(AveragePt2, maxPtSquare);
PtSum += tmpPt;
//G4cout<<"Dcor at sampling "<<Dcor<<G4endl;
G4ThreeVector tmpX=GaussianPt(Dcor*Dcor, 1.);
Xminus=tmpX.x();
XminusSum+=Xminus;
// G4LorentzVector tmp(tmpPt.x(),tmpPt.y(),Xminus,0.); // 6 Dec.2010
G4LorentzVector tmp(tmpPt.x(),tmpPt.y(),Xminus, // 6 Dec.2010
aNucleon->Get4Momentum().e());// 6 Dec.2010
aNucleon->Get4Momentum().e()); // 6 Dec.2010
//G4cout<<"Inv i mom "<<i<<" "<<tmp<<G4endl;
aNucleon->SetMomentum(tmp);
} // end of for(G4int i=0; i < NumberOfInvolvedNucleon; i++ )
//---------------------------------------------------------------------------
G4double DeltaX(PtSum.x()); //0.);
G4double DeltaY(PtSum.y()); //0.);
G4double DeltaX = (PtSum.x()-PnuclearResidual.x())/NumberOfInvolvedNucleon;
G4double DeltaY = (PtSum.y()-PnuclearResidual.y())/NumberOfInvolvedNucleon;
G4double DeltaXminus(0.);
//G4cout<<"ResidualMassNumber "<<ResidualMassNumber<<" "<<PtSum<<G4endl;
DeltaX = (PtSum.x()-PtRes.x())/NumberOfInvolvedNucleon;
DeltaY = (PtSum.y()-PtRes.y())/NumberOfInvolvedNucleon;
if(ResidualMassNumber == 0)
{
// DeltaX = PtSum.x()/NumberOfInvolvedNucleon;
// DeltaY = PtSum.y()/NumberOfInvolvedNucleon;
DeltaXminus = (XminusSum-1.)/NumberOfInvolvedNucleon;
}
else
{
DeltaXminus = -1./theNucleus->GetMassNumber();
}
//G4cout<<"Dx y xmin "<<DeltaX<<" "<<DeltaY<<" "<<DeltaXminus<<G4endl;
XminusSum=1.;
M2target =0.;
@@ -991,19 +981,19 @@ DeltaY = (PtSum.y()-PtRes.y())/NumberOfInvolvedNucleon;
Xminus = aNucleon->Get4Momentum().pz() - DeltaXminus;
XminusSum-=Xminus;
//G4cout<<" i X-sum "<<i<<" "<<Xminus<<" "<<XminusSum<<G4endl;
if(ResidualMassNumber == 0) // Uzhi 5.07.10
if(ResidualMassNumber == 0)
{
if((Xminus <= 0.) || (Xminus > 1.)) {InerSuccess=false; break;}
} else
{
if((Xminus <= 0.) || (Xminus > 1.) ||
(XminusSum <=0.) || (XminusSum > 1.)) {InerSuccess=false; break;}
} // Uzhi 5.07.10
}
G4double Px=aNucleon->Get4Momentum().px() - DeltaX;
G4double Py=aNucleon->Get4Momentum().py() - DeltaY;
//G4cout<<" i Px Py "<<i<<" "<<Px<<" "<<Py<<G4endl;
// if(!ProjectileIsAntiBaryon) // 4.12.2010
// {
M2target +=(aNucleon->GetSplitableHadron()->GetDefinition()->GetPDGMass()*
@@ -1021,13 +1011,11 @@ DeltaY = (PtSum.y()-PtRes.y())/NumberOfInvolvedNucleon;
aNucleon->SetMomentum(tmp);
} // end of for(G4int i=0; i < NumberOfInvolvedNucleon; i++ )
//G4cout<<"Rescale O.K."<<G4endl;
if(InerSuccess && (ResidualMassNumber != 0))
{
M2target +=(ResidualMass*ResidualMass + PtRes.mag2())/XminusSum;//PtSum
M2target +=(sqr(ResidualMass) + PnuclearResidual.mag2())/XminusSum;
}
//G4cout<<"InerSuccess "<<InerSuccess<<" "<<std::sqrt(M2target)<<G4endl;
//G4cout<<"InerSuccess "<<InerSuccess<<" "<<SqrtS<<" "<<Mprojectile + std::sqrt(M2target)<<" "<<std::sqrt(M2target)<<G4endl;
//G4int Uzhi;G4cin>>Uzhi;
} while(!InerSuccess);
} while (SqrtS < Mprojectile + std::sqrt(M2target));
@@ -1056,14 +1044,13 @@ DeltaY = (PtSum.y()-PtRes.y())/NumberOfInvolvedNucleon;
{
G4Nucleon * aNucleon = TheInvolvedNucleon[i];
G4LorentzVector tmp=aNucleon->Get4Momentum();
//G4cout<<"Invol Nucl Mom "<<tmp<<G4endl;
G4double Mt2(0.);
// if(!ProjectileIsAntiBaryon) // 4.12.2010
// {
Mt2 = sqr(tmp.x())+sqr(tmp.y())+
aNucleon->GetSplitableHadron()->GetDefinition()->GetPDGMass()*
aNucleon->GetSplitableHadron()->GetDefinition()->GetPDGMass();
sqr(aNucleon->GetSplitableHadron()->GetDefinition()->GetPDGMass());
/*
} else
{
@@ -1078,26 +1065,6 @@ DeltaY = (PtSum.y()-PtRes.y())/NumberOfInvolvedNucleon;
G4double YtargetNucleon=0.5*std::log((E+Pz)/(E-Pz)); // 1.07.11 //Uzhi 20 Sept.
//G4cout<<"YtargetNucleon "<<YtargetNucleon<<G4endl;
/*
tmp.setPz(Pz);
tmp.setE(E);
G4LorentzVector TestPsum=TestPprojectile+tmp;
G4LorentzRotation toCms(-1*TestPsum.boostVector());
G4LorentzVector Ptmp=toCms*TestPprojectile;
if ( Ptmp.pz() <= 0. )
{
// "String" moving backwards in CMS, abort collision !!
OuterSuccess=false;
break;
}
*/
//G4cout<<"Pz E "<<Pz<<" "<<E<<G4endl;
//G4cout<<"Pz/E > Pzprojectile/Eprojectile "<<Pz/E <<" "<< Pzprojectile/Eprojectile<<G4endl;
//G4cout<<"Pz+E > Pzprojectile+Eprojectile "<<Pz+E <<" "<< Pzprojectile+Eprojectile<<G4endl;
// if( E+Pz > WplusProjectile ){OuterSuccess=false; break;} // 8.06.11
// if( Pz/E > Pzprojectile/Eprojectile ){OuterSuccess=false; break;} // 8.06.11
//G4cout<<"YtargetNucleon-YtargetNucleus "<<YtargetNucleon-YtargetNucleus<<G4endl;
//G4cout<<"Yprojectile YtargetNucleon "<<Yprojectile<<" "<<YtargetNucleon<<G4endl;
if((std::abs(YtargetNucleon-YtargetNucleus) > 2) ||
@@ -1132,8 +1099,7 @@ if((std::abs(YtargetNucleon-YtargetNucleus) > 2) ||
// if(!ProjectileIsAntiBaryon) // 4.12.2010
// {
Mt2 = sqr(tmp.x())+sqr(tmp.y())+
aNucleon->GetSplitableHadron()->GetDefinition()->GetPDGMass()*
aNucleon->GetSplitableHadron()->GetDefinition()->GetPDGMass();
sqr(aNucleon->GetSplitableHadron()->GetDefinition()->GetPDGMass());
/*
} else
{
@@ -1196,7 +1162,7 @@ G4bool G4FTFModel::ExciteParticipants()
G4int CurrentInteraction(0); // Uzhi Feb26
G4int MaxNumOfInelCollisions=G4int(theParameters->GetMaxNumberOfCollisions());
//G4cout<<"MaxNumOfInelCollisions "<<MaxNumOfInelCollisions<<G4endl;
G4double NumberOfInel(0.);
//
if(MaxNumOfInelCollisions > 0)
@@ -1205,6 +1171,7 @@ G4bool G4FTFModel::ExciteParticipants()
MaxNumOfInelCollisions;
if(G4UniformRand() < ProbMaxNumber) {MaxNumOfInelCollisions++;}
NumberOfInel=MaxNumOfInelCollisions;
//G4cout<<"Plab > Pbound MaxNumOfInelCollisions "<<MaxNumOfInelCollisions<<G4endl;
} else
{ // Plab < Pbound, Normal application of FTF is impossible,
// low energy corrections applied.
@@ -1216,6 +1183,7 @@ G4bool G4FTFModel::ExciteParticipants()
{ // Special case for hadron-nucleon interactions
NumberOfInel = 1.;
MaxNumOfInelCollisions = 1;
//G4cout<<"Plab < Pbound MaxNumOfInelCollisions "<<MaxNumOfInelCollisions<<G4endl;
}
} // end of if(MaxNumOfInelCollisions > 0)
//
@@ -1232,8 +1200,8 @@ G4bool G4FTFModel::ExciteParticipants()
//G4cout<<"Ppr tr "<<projectile<<" "<<target<<G4endl;
//G4cout<<"theInter Time "<<collision.GetInteractionTime()/fermi<<G4endl;
//G4cout<<"Int Status "<<collision.GetStatus()<<" "<<CurrentInteraction<<G4endl;
//G4cout<<"Proj M "<<projectile->Get4Momentum()<<G4endl;
//G4cout<<"Targ M "<<target->Get4Momentum()<<G4endl;
//G4cout<<"Proj M "<<projectile->Get4Momentum()<<" "<<projectile->Get4Momentum().mag()<<G4endl;
//G4cout<<"Targ M "<<target->Get4Momentum()<<" "<<target->Get4Momentum().mag()<<G4endl;
//G4cout<<"ProbabilityOfElasticScatt "<<theParameters->GetProbabilityOfElasticScatt()<<G4endl;
//G4cout<<"ProbabilityOfAnnihilation "<<theParameters->GetProbabilityOfAnnihilation()<<G4endl;
//G4cout<<"projectile->GetStatus target->GetStatus "<<projectile->GetStatus()<<" "<<target->GetStatus()<<G4endl;
@@ -1254,49 +1222,43 @@ if(collision.GetStatus()) // Uzhi Feb26
if(G4UniformRand()< theParameters->GetProbabilityOfElasticScatt())
{ // Elastic scattering -------------------------
//G4cout<<"Elastic FTF"<<G4endl;
if(theElastic->ElasticScattering(projectile, target, theParameters))
{
//G4cout<<"Elastic FTF Successfull "<<target->GetStatus()<<G4endl;
//G4cout<<"After pro "<<projectile->Get4Momentum()<<" "<<projectile->Get4Momentum().mag()<<G4endl;
//G4cout<<"After tar "<<target->Get4Momentum()<<" "<<target->Get4Momentum().mag()<<G4endl;
// Successfull = Successfull || true; //1.07.11
} else
{
//G4cout<<"Elastic FTF Not Successfull "<<target->GetStatus()<<G4endl;
// Successfull = Successfull || false;
// Successfull = Successfull && false;
Successfull = false; break; // 1.07.11
if(NumberOfInvolvedTargetNucleon > 1)
{
NumberOfInvolvedTargetNucleon--;
target->SetStatus(0); // 1->0 return nucleon to the target VU 18.02.11
}
}
Successfull = theElastic->ElasticScattering(projectile, target, theParameters)
|| Successfull; // 9.06.2012
}
else if(G4UniformRand() > theParameters->GetProbabilityOfAnnihilation())
{ // Inelastic scattering ----------------------
//G4cout<<"Inelastic FTF"<<G4endl;
//G4cout<<"MaxNumOfInelCollisions MaxNumOfInelCollisions "<<MaxNumOfInelCollisions<<" "<<MaxNumOfInelCollisions<<G4endl;
//G4cout<<"NumberOfInel MaxNumOfInelCollisions "<<NumberOfInel<<" "<<MaxNumOfInelCollisions<<G4endl;
if(G4UniformRand()< NumberOfInel/MaxNumOfInelCollisions)
{
if(theExcitation->ExciteParticipants(projectile, target,
theParameters, theElastic))
{
// Successfull = Successfull || true;
NumberOfInel--;
//G4cout<<"Excitation FTF Successfull "<<G4endl;
//G4cout<<"After pro "<<projectile->Get4Momentum()<<" "<<projectile->Get4Momentum().mag()<<G4endl;
//G4cout<<"After tar "<<target->Get4Momentum()<<" "<<target->Get4Momentum().mag()<<G4endl;
} else
{
// Successfull = Successfull || false;
// Successfull = Successfull && false;
Successfull = false; break; // 1.07.11
//G4cout<<"Excitation FTF Non Successfull -> Elastic scattering "<<Successfull<<G4endl;
Successfull = theElastic->ElasticScattering(projectile, target, theParameters)
|| Successfull; // 9.06.2012
/*
if(NumberOfInvolvedTargetNucleon > 1)
{
NumberOfInvolvedTargetNucleon--;
target->SetStatus(0); // 1->0 return nucleon to the target VU 18.02.11
target->SetStatus(0); // 1->0 return nucleon to the target VU 10.04.2012
}
*/
}
} else // If NumOfInel
{
//G4cout<<"Elastic at rejected inelastic scattering"<<G4endl;
Successfull = theElastic->ElasticScattering(projectile, target, theParameters)
|| Successfull; // 9.06.2012
/*
if(theElastic->ElasticScattering(projectile, target, theParameters))
{
// Successfull = Successfull || true;
@@ -1305,12 +1267,14 @@ Successfull = false; break; // 1.07.11
// Successfull = Successfull || false;
//Successfull = Successfull && false;
Successfull = false; break; // 1.07.11
if(NumberOfInvolvedTargetNucleon > 1)
{
NumberOfInvolvedTargetNucleon--;
target->SetStatus(0); // 1->0 return nucleon to the target VU 18.02.11
target->SetStatus(4); // 1->0 return nucleon to the target VU 10.04.2012
}
}
*/
} // end if NumOfInel
}
else // Annihilation
@@ -1323,12 +1287,12 @@ Successfull = false; break; // 1.07.11
{
while (theParticipants.Next())
{
G4InteractionContent & collision=theParticipants.GetInteraction();//Uzhi Feb26
G4InteractionContent & acollision=theParticipants.GetInteraction();//Uzhi Feb26
G4VSplitableHadron * NextProjectileNucleon=collision.GetProjectile(); // Uzhi Feb26
G4VSplitableHadron * NextTargetNucleon =collision.GetTarget();
G4VSplitableHadron * NextProjectileNucleon=acollision.GetProjectile(); // Uzhi Feb26
G4VSplitableHadron * NextTargetNucleon =acollision.GetTarget();
if((projectile == NextProjectileNucleon) ||
(target == NextTargetNucleon )) collision.SetStatus(0);
(target == NextTargetNucleon )) acollision.SetStatus(0);
// if(target != NextTargetNucleon) NextTargetNucleon->SetStatus(0); // Uzhi Feb26
}
@@ -1355,7 +1319,10 @@ Successfull = false; break; // 1.07.11
} else
{
Successfull = Successfull || false;
//A.R. 25-Jul-2012 : commenting the next line to fix a Coverity
// "logically dead code".
//Successfull = Successfull || false;
// target->SetStatus(2);
}
}
@@ -1508,8 +1475,13 @@ void G4FTFModel::AjustTargetNucleonForAnnihilation(G4VSplitableHadron *SelectedA
SelectedTargetNucleon->Set4Momentum(Ptmp);
//-----------
G4double DeltaExcitationEnergy=ResidualExcitationEnergy/((G4double) NumberOfHoles);
//A.R. 25-Jul-2012 : Fix to Covery "Division by zero"
//G4double DeltaExcitationEnergy=ResidualExcitationEnergy/((G4double) NumberOfHoles);
G4double DeltaExcitationEnergy = 0.0;
if ( NumberOfHoles != 0 ) {
DeltaExcitationEnergy = ResidualExcitationEnergy / ((G4double) NumberOfHoles);
}
// Re-definition of the wounded nucleon momenta
theNucleus->StartLoop();
while ((aNucleon = theNucleus->GetNextNucleon()))
@@ -1571,13 +1543,12 @@ G4ExcitedStringVector * G4FTFModel::BuildStrings()
} // Uzhi Feb26
}
unsigned int ahadron;
//G4cout<<G4endl<<"primaries.size() "<<primaries.size()<<G4endl;
for ( ahadron=0; ahadron < primaries.size() ; ahadron++)
for (unsigned int ahadron=0; ahadron < primaries.size() ; ahadron++)
{
G4bool isProjectile(0);
if(primaries[ahadron]->GetStatus() == 1) {isProjectile=true; }
if(primaries[ahadron]->GetStatus() <= 1) {isProjectile=true; } // VU 10.04.2012
// if(primaries[ahadron]->GetStatus() == 3) {isProjectile=false;}
FirstString=0; SecondString=0;
@@ -1627,11 +1598,11 @@ G4ExcitedStringVector * G4FTFModel::BuildStrings()
//G4cout<<G4endl<<"theAdditionalString.size() "<<theAdditionalString.size()<<G4endl;
if(theAdditionalString.size() != 0)
{
for ( ahadron=0; ahadron < theAdditionalString.size() ; ahadron++)
for (unsigned int ahadron=0; ahadron < theAdditionalString.size() ; ahadron++)
{
G4bool isProjectile(0);
if(theAdditionalString[ahadron]->GetStatus() == 1) {isProjectile=true; }
if(theAdditionalString[ahadron]->GetStatus() <= 1) {isProjectile=true; } // VU 10.04.2012
// if(theAdditionalString[ahadron]->GetStatus() == 3) {isProjectile=false;}
FirstString=0; SecondString=0;
@@ -1652,14 +1623,14 @@ G4ExcitedStringVector * G4FTFModel::BuildStrings()
for (G4int ahadron=0; ahadron < NumberOfInvolvedNucleon ; ahadron++)
{
//G4cout<<"Nucleon status & int# "<<ahadron<<" "<<TheInvolvedNucleon[ahadron]->GetSplitableHadron()->GetStatus()<<" "<<TheInvolvedNucleon[ahadron]->GetSplitableHadron()->GetSoftCollisionCount()<<G4endl;
if(TheInvolvedNucleon[ahadron]->GetSplitableHadron()->GetStatus() ==0)
if(TheInvolvedNucleon[ahadron]->GetSplitableHadron()->GetStatus() ==4)
{ // A nucleon is returned back to the nucleus after annihilation act for example
//G4cout<<" Delete 0"<<G4endl;
delete TheInvolvedNucleon[ahadron]->GetSplitableHadron();
G4VSplitableHadron *aHit=0;
TheInvolvedNucleon[ahadron]->Hit(aHit);
}
else if((TheInvolvedNucleon[ahadron]->GetSplitableHadron()->GetStatus() ==1) &&
else if((TheInvolvedNucleon[ahadron]->GetSplitableHadron()->GetStatus() <=1) && // VU 10.04.2012
(TheInvolvedNucleon[ahadron]->GetSplitableHadron()->GetSoftCollisionCount() ==0))
{ // A nucleon is returned back to the nucleus after rejected interactions
// due to an annihilation before
@@ -1668,7 +1639,7 @@ G4ExcitedStringVector * G4FTFModel::BuildStrings()
G4VSplitableHadron *aHit=0;
TheInvolvedNucleon[ahadron]->Hit(aHit);
}
else if((TheInvolvedNucleon[ahadron]->GetSplitableHadron()->GetStatus() ==1) &&
else if((TheInvolvedNucleon[ahadron]->GetSplitableHadron()->GetStatus() <=1) && // VU 10.04.2012
(TheInvolvedNucleon[ahadron]->GetSplitableHadron()->GetSoftCollisionCount() !=0))
{ // Nucleon which participate in the interactions,
//G4cout<<"Taken 1 !=0"<<G4endl;
@@ -1770,3 +1741,8 @@ G4ThreeVector G4FTFModel::GaussianPt(G4double AveragePt2, G4double maxPtSquare)
return G4ThreeVector (Pt*std::cos(phi), Pt*std::sin(phi), 0.);
}
void G4FTFModel::ModelDescription(std::ostream& desc) const
{
desc << "please add description here" << G4endl;
}
@@ -24,16 +24,17 @@
// ********************************************************************
//
//
// $Id: G4FTFParameters.cc,v 1.16 2010/12/07 10:42:40 vuzhinsk Exp $
// $Id$
// GEANT4 tag $Name: $
//
#include <utility>
#include "G4FTFParameters.hh"
#include "G4ios.hh"
#include <utility>
#include "G4VComponentCrossSection.hh" // 31 May 2011
#include "G4ComponentCHIPShadronNuclearXS.hh" // 31 May 2011
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
#include "G4ParticleDefinition.hh" // 31 May 2011
@@ -45,18 +46,39 @@
#include "G4KaonPlus.hh" // 31 May 2011
#include "G4KaonMinus.hh" // 31 May 2011
G4FTFParameters::G4FTFParameters()
{FTFxsManager=0;}
G4FTFParameters::G4FTFParameters() :
//A.R. 14-Aug-2012 : Coverity fix.
FTFhNcmsEnergy(0.0),
FTFxsManager(0),
FTFXtotal(0.0), FTFXelastic(0.0), FTFXinelastic(0.0), FTFXannihilation(0.0),
ProbabilityOfAnnihilation(0.0), ProbabilityOfElasticScatt(0.0),
RadiusOfHNinteractions2(0.0), FTFSlope(0.0),
AvaragePt2ofElasticScattering(0.0), FTFGamma0(0.0),
MagQuarkExchange(0.0), SlopeQuarkExchange(0.0), DeltaProbAtQuarkExchange(0.0),
ProbOfSameQuarkExchange(0.0), ProjMinDiffMass(0.0), ProjMinNonDiffMass(0.0),
ProbabilityOfProjDiff(0.0), TarMinDiffMass(0.0), TarMinNonDiffMass(0.0),
ProbabilityOfTarDiff(0.0), AveragePt2(0.0), ProbLogDistr(0.0),
Pt2kink(0.0),
MaxNumberOfCollisions(0.0), ProbOfInelInteraction(0.0), CofNuclearDestruction(0.0),
R2ofNuclearDestruction(0.0), ExcitationEnergyPerWoundedNucleon(0.0),
DofNuclearDestruction(0.0), Pt2ofNuclearDestruction(0.0), MaxPt2ofNuclearDestruction(0.0)
{}
G4FTFParameters::~G4FTFParameters()
{delete FTFxsManager;}
{}
//**********************************************************************************************
G4FTFParameters::G4FTFParameters(const G4ParticleDefinition * particle,
G4int theA,
G4int theZ,
G4double PlabPerParticle)
{
//A.R. 25-Jul-2012 Coverity fix.
FTFXannihilation = 0.0;
FTFhNcmsEnergy = 0.0;
ProbOfSameQuarkExchange = 0.0;
G4int ProjectilePDGcode = particle->GetPDGEncoding();
G4int ProjectileabsPDGcode = std::abs(ProjectilePDGcode);
G4double ProjectileMass = particle->GetPDGMass();
@@ -88,7 +110,7 @@ G4FTFParameters::G4FTFParameters(const G4ParticleDefinition * particle,
G4double Elab = std::sqrt(Plab*Plab+ProjectileMass2);
G4double KineticEnergy = Elab-ProjectileMass; // 31 May 2011
G4double s=ProjectileMass2 + TargetMass2 + 2.*TargetMass*Elab;
G4double S=ProjectileMass2 + TargetMass2 + 2.*TargetMass*Elab;
//G4cout<<"Proj Plab "<<ProjectilePDGcode<<" "<<Plab<<G4endl;
//G4cout<<"Mass KinE "<<ProjectileMass<<" "<<KineticEnergy<<G4endl;
@@ -99,15 +121,15 @@ G4FTFParameters::G4FTFParameters(const G4ParticleDefinition * particle,
Ylab=0.5*std::log((Elab+Plab)/(Elab-Plab));
G4double ECMSsqr=s/GeV/GeV;
G4double SqrtS =std::sqrt(s)/GeV;
G4double ECMSsqr=S/GeV/GeV;
G4double SqrtS =std::sqrt(S)/GeV;
//G4cout<<"Sqrt(s) "<<SqrtS<<G4endl;
TargetMass /=GeV; TargetMass2 /=(GeV*GeV);
ProjectileMass /=GeV; ProjectileMass2 /=(GeV*GeV);
// ------------------- Cross section calculation from CHIPS -------------
FTFxsManager = new G4ComponentCHIPShadronNuclearXS(); // 31 May 2011
static G4ChipsComponentXS* _instance = new G4ChipsComponentXS(); // Witek Pokorski
FTFxsManager = _instance;
Plab/=GeV;
// G4double LogPlab = std::log( Plab );
@@ -497,6 +519,7 @@ if(Xtotal-Xelastic != 0.)
//G4cout<<"AvaragePt2ofElasticScattering "<<GetAvaragePt2ofElasticScattering()<<G4endl;
//----------- Parameters of excitations ---------------------------------------------
G4double Xinel=Xtotal-Xelastic; // Uzhi 25.04.2012
//G4cout<<"Param ProjectilePDGcode "<<ProjectilePDGcode<<G4endl;
if( ProjectilePDGcode > 1000 ) //------Projectile is baryon --------
{
@@ -506,16 +529,19 @@ if(Xtotal-Xelastic != 0.)
if(NumberOfTargetNucleons > 26) {SetProbOfSameQuarkExchange(1.);}
else {SetProbOfSameQuarkExchange(0.);}
SetProjMinDiffMass(1.16); // GeV
SetProjMinNonDiffMass(1.16); // GeV
//G4cout<<"Param Get Min Dif "<<GetProjMinNonDiffMass()<<G4endl;
SetProbabilityOfProjDiff(0.805*std::exp(-0.35*Ylab));// 0.5 0.805
SetProjMinDiffMass(1.16); // GeV
SetProjMinNonDiffMass(1.16); // GeV
// SetProbabilityOfProjDiff(0.805*std::exp(-0.35*Ylab)); // Uzhi 21.05.2012
SetProbabilityOfProjDiff(6./Xinel+1.5/ECMSsqr); // Uzhi 25.04.2012
SetTarMinDiffMass(1.16); // GeV
SetTarMinNonDiffMass(1.16); // GeV
SetProbabilityOfTarDiff(0.805*std::exp(-0.35*Ylab));// 0.5
SetTarMinDiffMass(1.16); // GeV
SetTarMinNonDiffMass(1.16); // GeV
// SetProbabilityOfTarDiff(0.805*std::exp(-0.35*Ylab)); // Uzhi 21.05.2012
SetProbabilityOfTarDiff(6./Xinel+1.5/ECMSsqr); // Uzhi 25.04.2012
// SetAveragePt2(0.15); // 0.15 GeV^2
SetAveragePt2(0.3); // 0.30 GeV^2 Uzhi 21.05.2012
SetAveragePt2(0.15); // 0.15 GeV^2
SetProbLogDistr(0.5); // Uzhi 21.05.2012
}
else if( ProjectilePDGcode < -1000 ) //------Projectile is anti_baryon --------
{
@@ -524,36 +550,41 @@ if(Xtotal-Xelastic != 0.)
SetDeltaProbAtQuarkExchange(0.);
SetProbOfSameQuarkExchange(0.);
SetProjMinDiffMass(ProjectileMass+0.22); // GeV
SetProjMinNonDiffMass(ProjectileMass+0.22); // GeV
SetProbabilityOfProjDiff(0.805*std::exp(-0.35*Ylab));// 0.5
//SetProbabilityOfProjDiff(0.5);
//G4cout<<"PrDif "<<GetProbabilityOfProjDiff()<<" "<<1.-2.*GetProbabilityOfProjDiff()<<G4endl;
//G4int Uzhi; G4cin>>Uzhi;
SetProjMinDiffMass(ProjectileMass+0.22); // GeV
SetProjMinNonDiffMass(ProjectileMass+0.22); // GeV
// SetProbabilityOfProjDiff(0.805*std::exp(-0.35*Ylab)); // Uzhi 21.05.2012
SetProbabilityOfProjDiff(6./Xinel+1.5/ECMSsqr); // Uzhi 25.04.2012
SetTarMinDiffMass(TargetMass+0.22); // GeV
SetTarMinNonDiffMass(TargetMass+0.22); // GeV
SetProbabilityOfTarDiff(0.805*std::exp(-0.35*Ylab)); // 0.5
//SetProbabilityOfTarDiff(0.5);
SetAveragePt2(0.15); // 0.15 GeV^2
// SetProbabilityOfTarDiff(0.805*std::exp(-0.35*Ylab)); // Uzhi 21.05.2012
SetProbabilityOfTarDiff(6./Xinel+1.5/ECMSsqr); // Uzhi 25.04.2012
SetAveragePt2(0.3); // 0.15 GeV^2 // Uzhi 21.05.2012
SetProbLogDistr(0.5); // Uzhi 21.05.2012
}
else if( ProjectileabsPDGcode == 211 ||
ProjectilePDGcode == 111) //------Projectile is Pion -----------
{
SetMagQuarkExchange(240.);
SetSlopeQuarkExchange(2.); // 2.
SetSlopeQuarkExchange(2.);
SetDeltaProbAtQuarkExchange(0.56); //(0.35);
SetProjMinDiffMass(0.5); // GeV
SetProjMinNonDiffMass(0.5); // GeV 0.3
SetProbabilityOfProjDiff(0.);//(0.*0.62*std::pow(s/GeV/GeV,-0.51)); // 40/32 X-dif/X-inel
SetProjMinDiffMass(0.5); // GeV
SetProjMinNonDiffMass(0.5); // GeV 0.3
// SetProbabilityOfProjDiff(0.); // Uzhi 3.06.2012
SetProbabilityOfProjDiff((6.2-3.7*std::exp(-sqr(SqrtS-7.)/16.))/Xinel*0.);
SetTarMinDiffMass(1.16); // GeV
SetTarMinNonDiffMass(1.16); // GeV
// SetProbabilityOfTarDiff(1.);//(2.*0.62*std::pow(s/GeV/GeV,-0.51));
// SetProbabilityOfTarDiff(2.6*std::exp(-0.46*Ylab));
SetProbabilityOfTarDiff(0.8*std::exp(-0.6*(Ylab-3.)));
SetTarMinDiffMass(1.16); // GeV
SetTarMinNonDiffMass(1.16); // GeV
// SetProbabilityOfTarDiff(0.8*std::exp(-0.6*(Ylab-3.))); // Uzhi 3.06.2012
SetProbabilityOfTarDiff((2.+22./ECMSsqr)/Xinel);
SetAveragePt2(0.15); // GeV^2 7 June 2011
SetAveragePt2(0.3); // GeV^2 7 June 2011
SetProbLogDistr(0.); // Uzhi 21.05.2012
SetProbLogDistr(1.);
}
else if( (ProjectileabsPDGcode == 321) ||
(ProjectileabsPDGcode == 311) ||
@@ -563,24 +594,23 @@ if(Xtotal-Xelastic != 0.)
SetMagQuarkExchange(40.);
SetSlopeQuarkExchange(2.25);
SetDeltaProbAtQuarkExchange(0.6);
//SetMagQuarkExchange(0.);
//SetSlopeQuarkExchange(0.);
//SetDeltaProbAtQuarkExchange(0.);
SetProjMinDiffMass(0.6); // GeV 0.7
SetProjMinNonDiffMass(0.6); // GeV 0.7
SetProbabilityOfProjDiff(0.85*std::pow(s/GeV/GeV,-0.5)); // 40/32 X-dif/X-inel
SetProbabilityOfProjDiff(0.);
SetProjMinDiffMass(0.6); // GeV 0.7 0.6
SetProjMinNonDiffMass(0.6); // GeV 0.7 0.6
// SetProbabilityOfProjDiff(0.85*std::pow(s/GeV/GeV,-0.5)); // 40/32 X-dif/X-inel
SetProbabilityOfProjDiff(0.*4.7/Xinel); // Uzhi 5.06.2012
SetTarMinDiffMass(1.1); // GeV
SetTarMinNonDiffMass(1.1); // GeV
SetProbabilityOfTarDiff(0.45*std::pow(s/GeV/GeV,-0.5)); // 40/32 X-dif/X-inel
SetAveragePt2(0.15); // GeV^2 7 June 2011
SetTarMinDiffMass(1.1); // GeV
SetTarMinNonDiffMass(1.1); // GeV
// SetProbabilityOfTarDiff(0.45*std::pow(s/GeV/GeV,-0.5));// 40/32 X-dif/X-inel
SetProbabilityOfTarDiff(1.5/Xinel); // Uzhi 5.06.2012
SetAveragePt2(0.3); // GeV^2 7 June 2011
SetProbLogDistr(1.); // Uzhi 5.06.2012
}
else //------Projectile is undefined,
//------Nucleon assumed
{
/* // Uzhi 6.06.2012
SetMagQuarkExchange(1.85); // 7 June 2011
SetSlopeQuarkExchange(0.7); // 7 June 2011
SetDeltaProbAtQuarkExchange(0.); // 7 June 2011
@@ -592,10 +622,29 @@ SetProbabilityOfProjDiff(0.);
SetTarMinDiffMass(1.16); // GeV
SetTarMinNonDiffMass(1.16); // GeV
SetProbabilityOfTarDiff(0.805*std::pow(s/GeV/GeV,-0.35)); // 40/32 X-dif/X-inel
*/
SetAveragePt2(0.15); // GeV^2
SetMagQuarkExchange(0.);
SetSlopeQuarkExchange(0.);
SetDeltaProbAtQuarkExchange(0.);
SetProbOfSameQuarkExchange(0.);
SetProjMinDiffMass(ProjectileMass+0.22); // GeV
SetProjMinNonDiffMass(ProjectileMass+0.22); // GeV
SetProbabilityOfProjDiff(6./Xinel+1.5/ECMSsqr); // Uzhi 25.04.2012
SetTarMinDiffMass(TargetMass+0.22); // GeV
SetTarMinNonDiffMass(TargetMass+0.22); // GeV
SetProbabilityOfTarDiff(6./Xinel+1.5/ECMSsqr); // Uzhi 25.04.2012
SetAveragePt2(0.3); // 0.15 GeV^2 Uzhi 21.05.2012
SetProbLogDistr(0.5); // Uzhi 21.05.2012
}
// if(theA > 4) SetProbabilityOfProjDiff(0.); // Uzhi 6.07.2012 Closed
//G4cout<<"Param Get Min Dif "<<GetProjMinNonDiffMass()<<G4endl;
// ---------- Set parameters of a string kink -------------------------------
SetPt2Kink(6.*GeV*GeV);
G4double Puubar(1./3.), Pddbar(1./3.), Pssbar(1./3.); // SU(3) symmetry
@@ -612,13 +661,13 @@ SetProbabilityOfProjDiff(0.);
SetR2ofNuclearDestruction(1.5*fermi*fermi);
SetDofNuclearDestruction(0.4);
SetDofNuclearDestruction(0.3);
SetPt2ofNuclearDestruction((0.035+0.04*std::exp(4.*(Ylab-2.5))/
(1.+std::exp(4.*(Ylab-2.5))))*GeV*GeV); //0.09
//G4cout<<"Parm Pt2 Y "<<(0.035+0.04*std::exp(4.*(Ylab-2.5))/(1.+std::exp(4.*(Ylab-2.5))))<<" "<<Ylab<<G4endl;
SetMaxPt2ofNuclearDestruction(1.0*GeV*GeV);
SetExcitationEnergyPerWoundedNucleon(75.*MeV);
SetExcitationEnergyPerWoundedNucleon(100.*MeV);
} else if( ProjectilePDGcode < -1000 ) // for anti-baryon projectile
{
//G4cout<<"Nucl destruct Anti Bar"<<G4endl;
@@ -629,12 +678,12 @@ SetProbabilityOfProjDiff(0.);
SetR2ofNuclearDestruction(1.5*fermi*fermi);
SetDofNuclearDestruction(0.4);
SetDofNuclearDestruction(0.3);
SetPt2ofNuclearDestruction((0.035+0.04*std::exp(4.*(Ylab-2.5))/
(1.+std::exp(4.*(Ylab-2.5))))*GeV*GeV); //0.09
SetMaxPt2ofNuclearDestruction(1.0*GeV*GeV);
SetExcitationEnergyPerWoundedNucleon(75.*MeV);
SetExcitationEnergyPerWoundedNucleon(100.*MeV);
if(Plab < 2.) // 2 GeV/c
{ // For slow anti-baryon we have to garanty putting on mass-shell
@@ -653,12 +702,12 @@ SetProbabilityOfProjDiff(0.);
SetR2ofNuclearDestruction(1.5*fermi*fermi);
SetDofNuclearDestruction(0.4);
SetDofNuclearDestruction(0.3);
SetPt2ofNuclearDestruction((0.035+0.04*std::exp(4.*(Ylab-2.5))/
(1.+std::exp(4.*(Ylab-2.5))))*GeV*GeV); //0.09
SetMaxPt2ofNuclearDestruction(1.0*GeV*GeV);
SetExcitationEnergyPerWoundedNucleon(75.*MeV);
SetExcitationEnergyPerWoundedNucleon(100.*MeV);
}
//SetCofNuclearDestruction(0.47*std::exp(2.*(Ylab-2.5))/(1.+std::exp(2.*(Ylab-2.5))));
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4FTFParticipants.cc,v 1.18 2010/12/07 10:42:40 vuzhinsk Exp $
// $Id$
// GEANT4 tag $Name: $
//
// ------------------------------------------------------------
@@ -39,23 +39,26 @@
// (February 2011)
// ------------------------------------------------------------
#include "G4FTFParameters.hh" // Uzhi 29.03.08
#include "G4FTFParticipants.hh"
#include "G4DiffractiveSplitableHadron.hh"
#include "G4VSplitableHadron.hh"
#include "Randomize.hh"
#include <utility> // Uzhi 29.03.08
#include "G4ios.hh"
#include <utility>
#include <vector>
#include <algorithm>
// Class G4FTFParticipants
G4FTFParticipants::G4FTFParticipants()
#include "G4FTFParticipants.hh"
#include "G4ios.hh"
#include "Randomize.hh"
#include "G4SystemOfUnits.hh"
#include "G4FTFParameters.hh" // Uzhi 29.03.08
#include "G4DiffractiveSplitableHadron.hh"
#include "G4VSplitableHadron.hh"
G4FTFParticipants::G4FTFParticipants() :
theProjectileNucleus(0),
currentInteraction(-1)
{
theProjectileNucleus=0;
}
G4FTFParticipants::G4FTFParticipants(const G4FTFParticipants &): G4VParticipants()
, theProjectileNucleus(0), currentInteraction(-1) //A.R. 14-Aug-2012 Coverity fix.
{
G4Exception("G4FTFParticipants::G4FTFParticipants()","HAD_FTF_001",
FatalException," Must not use copy ctor()");
@@ -110,10 +113,10 @@ void G4FTFParticipants::GetList(const G4ReactionProduct &thePrimary,
//G4cout<<"Prim in Part "<<primarySplitable->Get4Momentum()<<G4endl;
G4double xyradius;
xyradius =theNucleus->GetOuterRadius() + deltaxy; // Impact parameter sampling
// G4bool nucleusNeedsShift = true; // Uzhi 20 July 2009
while ( theInteractions.size() == 0 )
do
{
std::pair<G4double, G4double> theImpactParameter;
theImpactParameter = theNucleus->ChooseImpactXandY(xyradius);
@@ -155,8 +158,10 @@ G4int TrN(0);
theInteractions.push_back(aInteraction);
}
TrN++;
}
} // end of while ( theInteractions.size() == 0 )
}
} while ( theInteractions.size() == 0 );
//if ( theInteractions.size() == 0 ) delete primarySplitable; //A.R. 14-Aug-2012 Coverity fix
// G4cout << "Number of Hit nucleons " << theInteractions.size()
// << "\t" << impactX/fermi << "\t"<<impactY/fermi
@@ -181,7 +186,7 @@ TrN++;
G4double impactX(0.), impactY(0.);
while ( theInteractions.size() == 0 )
do
{
//G4cout<<"New interaction list"<<G4endl;
std::pair<G4double, G4double> theImpactParameter;
@@ -259,7 +264,7 @@ TrNuclN++;
} // End of while ( (TargetNucleon=theNucleus->GetNextNucleon()) )
PrNuclN++;
} // End of while ( (ProjectileNucleon=theProjectileNucleus->GetNextNucleon()) )
} // end of while ( theInteractions.size() == 0 )
} while ( theInteractions.size() == 0 ); // end of while ( theInteractions.size() == 0 )
//std::sort(theInteractions.begin(),theInteractions.end()); // ????