Import Geant4 9.5.0 source tree
This commit is contained in:
+243
@@ -0,0 +1,243 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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); }
|
||||
+168
-51
@@ -24,7 +24,7 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4DiffractiveExcitation.cc,v 1.23 2010/11/15 10:02:38 vuzhinsk Exp $
|
||||
// $Id: G4DiffractiveExcitation.cc,v 1.24 2010/12/07 10:42:40 vuzhinsk Exp $
|
||||
// ------------------------------------------------------------
|
||||
// GEANT 4 class implemetation file
|
||||
//
|
||||
@@ -74,9 +74,10 @@ G4bool G4DiffractiveExcitation::
|
||||
G4FTFParameters *theParameters,
|
||||
G4ElasticHNScattering *theElastic) const
|
||||
{
|
||||
//G4cout<<G4endl<<"ExciteParticipants --------------"<<G4endl;
|
||||
// -------------------- Projectile parameters -----------------------
|
||||
G4LorentzVector Pprojectile=projectile->Get4Momentum();
|
||||
|
||||
//G4cout<<"Pproj "<<Pprojectile<<G4endl;
|
||||
if(Pprojectile.z() < 0.)
|
||||
{
|
||||
target->SetStatus(2);
|
||||
@@ -91,6 +92,7 @@ G4bool G4DiffractiveExcitation::
|
||||
G4bool PutOnMassShell(false);
|
||||
// G4double M0projectile=projectile->GetDefinition()->GetPDGMass(); // With de-excitation
|
||||
G4double M0projectile = Pprojectile.mag(); // Without de-excitation
|
||||
//G4cout<<"M0projectile "<<M0projectile<<" "<<ProjectileRapidity<<G4endl;
|
||||
|
||||
if(M0projectile < projectile->GetDefinition()->GetPDGMass())
|
||||
{
|
||||
@@ -110,11 +112,11 @@ G4bool G4DiffractiveExcitation::
|
||||
//G4cout<<"Excit "<<ProjectilePDGcode<<" "<<TargetPDGcode<<G4endl;
|
||||
|
||||
G4LorentzVector Ptarget=target->Get4Momentum();
|
||||
|
||||
//G4cout<<"Ptarget "<<Ptarget<<G4endl;
|
||||
G4double M0target = Ptarget.mag();
|
||||
|
||||
// G4double TargetRapidity = Ptarget.rapidity();
|
||||
|
||||
//G4cout<<"M0target "<<M0target<<" "<<TargetRapidity<<G4endl;
|
||||
if(M0target < target->GetDefinition()->GetPDGMass())
|
||||
{
|
||||
PutOnMassShell=true;
|
||||
@@ -132,7 +134,8 @@ G4bool G4DiffractiveExcitation::
|
||||
// G4double ProbOfDiffraction=ProbProjectileDiffraction +
|
||||
// ProbTargetDiffraction;
|
||||
|
||||
G4double SumMasses=M0projectile+M0target+200.*MeV;
|
||||
// G4double SumMasses=M0projectile+M0target+220.*MeV; // 200->220 7 June 2011
|
||||
G4double SumMasses=M0projectile+M0target+220.*MeV; // 200->220 7 June 2011
|
||||
|
||||
// Kinematical properties of the interactions --------------
|
||||
G4LorentzVector Psum; // 4-momentum in CMS
|
||||
@@ -162,21 +165,35 @@ G4bool G4DiffractiveExcitation::
|
||||
G4double PZcms2, PZcms;
|
||||
|
||||
G4double SqrtS=std::sqrt(S);
|
||||
//G4cout<<"SqrtS < 2300*MeV "<<SqrtS<<G4endl;
|
||||
if(absProjectilePDGcode > 1000 && (SqrtS < 2300*MeV || SqrtS < SumMasses))
|
||||
|
||||
/*
|
||||
G4cout<<"Proj "<<Pprojectile<<G4endl;
|
||||
G4cout<<"Targ "<<Ptarget<<G4endl;
|
||||
G4cout<<"SqrtS "<<SqrtS<<G4endl;
|
||||
G4cout<<"M0pr M0tr "<<M0projectile<<" "<<M0target<<" "<<SumMasses<<G4endl;
|
||||
*/
|
||||
//G4cout<<"SqrtS < 2300*MeV Bary "<<SqrtS<<G4endl;
|
||||
// if(absProjectilePDGcode > 1000 && (SqrtS < 2300*MeV || SqrtS < SumMasses)) // 7.06.11
|
||||
if(absProjectilePDGcode > 1000 && (SqrtS < SumMasses))
|
||||
{target->SetStatus(2); return false;} // The model cannot work for
|
||||
// p+p-interactions
|
||||
// at Plab < 1.62 GeV/c.
|
||||
|
||||
//G4cout<<"SqrtS < 1600*MeV Pion "<<SqrtS<<G4endl;
|
||||
|
||||
// if(( absProjectilePDGcode == 211 || ProjectilePDGcode == 111) && // 7.06.11
|
||||
// ((SqrtS < 1600*MeV) || (SqrtS < SumMasses)))
|
||||
if(( absProjectilePDGcode == 211 || ProjectilePDGcode == 111) &&
|
||||
((SqrtS < 1600*MeV) || (SqrtS < SumMasses)))
|
||||
(SqrtS < SumMasses))
|
||||
{target->SetStatus(2); return false;} // The model cannot work for
|
||||
// Pi+p-interactions
|
||||
// at Plab < 1. GeV/c.
|
||||
|
||||
//G4cout<<"SqrtS < 1600*MeV "<<SqrtS<<G4endl;
|
||||
//SumMasses=M0projectile+M0target+20.*MeV;
|
||||
if(( (absProjectilePDGcode == 321) || (ProjectilePDGcode == -311) ||
|
||||
(absProjectilePDGcode == 311) || (absProjectilePDGcode == 130) ||
|
||||
(absProjectilePDGcode == 310)) && ((SqrtS < 1600*MeV) || (SqrtS < SumMasses)))
|
||||
(absProjectilePDGcode == 310)) && (SqrtS < SumMasses))
|
||||
// (absProjectilePDGcode == 310)) && ((SqrtS < 1600*MeV) || (SqrtS < SumMasses)))
|
||||
{target->SetStatus(2); return false;} // The model cannot work for
|
||||
// K+p-interactions
|
||||
// at Plab < ??? GeV/c. ???
|
||||
@@ -184,7 +201,7 @@ G4bool G4DiffractiveExcitation::
|
||||
PZcms2=(S*S+M0projectile2*M0projectile2+M0target2*M0target2-
|
||||
2*S*M0projectile2 - 2*S*M0target2 - 2*M0projectile2*M0target2)
|
||||
/4./S;
|
||||
|
||||
//G4cout<<"PZcms2 "<<PZcms2<<G4endl;
|
||||
if(PZcms2 < 0)
|
||||
{target->SetStatus(2); return false;} // It can be in an interaction with
|
||||
// off-shell nuclear nucleon
|
||||
@@ -214,6 +231,9 @@ G4bool G4DiffractiveExcitation::
|
||||
PZcms2));
|
||||
}
|
||||
|
||||
|
||||
//G4cout<<"Proj "<<Pprojectile<<G4endl;
|
||||
//G4cout<<"Targ "<<Ptarget<<G4endl;
|
||||
G4double maxPtSquare; // = PZcms2;
|
||||
/*
|
||||
G4cout<<"Start --------------------"<<G4endl;
|
||||
@@ -234,11 +254,12 @@ G4cout<<"Rapid "<<ProjectileRapidity<<G4endl; //" "<<TargetRapidity<<G4endl;
|
||||
G4double DeltaMass=
|
||||
(G4ParticleTable::GetParticleTable()->FindParticle(2224))->GetPDGMass();
|
||||
|
||||
//G4cout<<MagQuarkExchange*std::exp(-SlopeQuarkExchange*(ProjectileRapidity - TargetRapidity))<<G4endl;
|
||||
//G4double TargetRapidity(0.);
|
||||
//G4cout<<"Prob Q Exch "<<MagQuarkExchange*std::exp(-SlopeQuarkExchange*(ProjectileRapidity - TargetRapidity))<<G4endl;
|
||||
|
||||
//G4cout<<"Q exc Mag Slop Wdelta"<<MagQuarkExchange<<" "<<SlopeQuarkExchange<<" "<<DeltaProbAtQuarkExchange<<G4endl;
|
||||
//G4cout<<"ProjectileRapidity "<<ProjectileRapidity<<G4endl;
|
||||
//G4cout<<MagQuarkExchange*std::exp(-SlopeQuarkExchange*(ProjectileRapidity))<<G4endl;
|
||||
//G4cout<<"Prob Exc "<<MagQuarkExchange*std::exp(-SlopeQuarkExchange*(ProjectileRapidity))<<G4endl;
|
||||
//G4int Uzhi; G4cin>>Uzhi;
|
||||
// Check for possible quark exchange -----------------------------------
|
||||
|
||||
@@ -275,34 +296,72 @@ G4cout<<"Rapid "<<ProjectileRapidity<<G4endl; //" "<<TargetRapidity<<G4endl;
|
||||
|
||||
if(ProjQ1 > 0 ) // ProjQ1 is quark
|
||||
{
|
||||
G4int Navailable=0;
|
||||
ProjExchangeQ = ProjQ1;
|
||||
if(ProjExchangeQ != TargQ1)
|
||||
if(ProjExchangeQ != TargQ1) Navailable++;
|
||||
if(ProjExchangeQ != TargQ2) Navailable++;
|
||||
if(ProjExchangeQ != TargQ3) Navailable++;
|
||||
|
||||
G4int Nsampled=CLHEP::RandFlat::shootInt(G4long(Navailable))+1;
|
||||
//G4cout<<"Navailable Nsampled "<<Navailable<<" "<<Nsampled<<G4endl;
|
||||
Navailable=0;
|
||||
if(ProjExchangeQ != TargQ1)
|
||||
{
|
||||
TargExchangeQ = TargQ1; TargQ1=ProjExchangeQ; ProjQ1=TargExchangeQ;
|
||||
} else
|
||||
Navailable++;
|
||||
if(Navailable == Nsampled)
|
||||
{TargExchangeQ = TargQ1; TargQ1=ProjExchangeQ; ProjQ1=TargExchangeQ;}
|
||||
}
|
||||
|
||||
if(ProjExchangeQ != TargQ2)
|
||||
{
|
||||
TargExchangeQ = TargQ2; TargQ2=ProjExchangeQ; ProjQ1=TargExchangeQ;
|
||||
} else
|
||||
Navailable++;
|
||||
if(Navailable == Nsampled)
|
||||
{TargExchangeQ = TargQ2; TargQ2=ProjExchangeQ; ProjQ1=TargExchangeQ;}
|
||||
}
|
||||
|
||||
if(ProjExchangeQ != TargQ3)
|
||||
{
|
||||
TargExchangeQ = TargQ3; TargQ3=ProjExchangeQ; ProjQ1=TargExchangeQ;
|
||||
Navailable++;
|
||||
if(Navailable == Nsampled)
|
||||
{TargExchangeQ = TargQ3; TargQ3=ProjExchangeQ; ProjQ1=TargExchangeQ;}
|
||||
}
|
||||
} else // ProjQ2 is quark
|
||||
{
|
||||
G4int Navailable=0;
|
||||
ProjExchangeQ = ProjQ2;
|
||||
if(ProjExchangeQ != TargQ1)
|
||||
if(ProjExchangeQ != TargQ1) Navailable++;
|
||||
if(ProjExchangeQ != TargQ2) Navailable++;
|
||||
if(ProjExchangeQ != TargQ3) Navailable++;
|
||||
|
||||
G4int Nsampled=CLHEP::RandFlat::shootInt(G4long(Navailable))+1;
|
||||
//G4cout<<"Navailable Nsampled "<<Navailable<<" "<<Nsampled<<G4endl;
|
||||
Navailable=0;
|
||||
if(ProjExchangeQ != TargQ1)
|
||||
{
|
||||
TargExchangeQ = TargQ1; TargQ1=ProjExchangeQ; ProjQ2=TargExchangeQ;
|
||||
} else
|
||||
Navailable++;
|
||||
if(Navailable == Nsampled)
|
||||
{TargExchangeQ = TargQ1; TargQ1=ProjExchangeQ; ProjQ2=TargExchangeQ;}
|
||||
}
|
||||
|
||||
if(ProjExchangeQ != TargQ2)
|
||||
{
|
||||
TargExchangeQ = TargQ2; TargQ2=ProjExchangeQ; ProjQ2=TargExchangeQ;
|
||||
} else
|
||||
Navailable++;
|
||||
if(Navailable == Nsampled)
|
||||
{TargExchangeQ = TargQ2; TargQ2=ProjExchangeQ; ProjQ2=TargExchangeQ;}
|
||||
}
|
||||
|
||||
if(ProjExchangeQ != TargQ3)
|
||||
{
|
||||
TargExchangeQ = TargQ3; TargQ3=ProjExchangeQ; ProjQ2=TargExchangeQ;
|
||||
Navailable++;
|
||||
if(Navailable == Nsampled)
|
||||
{TargExchangeQ = TargQ3; TargQ3=ProjExchangeQ; ProjQ2=TargExchangeQ;}
|
||||
}
|
||||
} // End of if(ProjQ1 > 0 ) // ProjQ1 is quark
|
||||
|
||||
//G4cout<<"Exch Pr Tr "<<ProjExchangeQ<<" "<<TargExchangeQ<<G4endl;
|
||||
//G4cout<<ProjQ1<<" "<<ProjQ2<<" "<<ProjQ3<<G4endl;
|
||||
//G4cout<<TargQ1<<" "<<TargQ2<<" "<<TargQ3<<G4endl;
|
||||
|
||||
G4int aProjQ1=std::abs(ProjQ1);
|
||||
G4int aProjQ2=std::abs(ProjQ2);
|
||||
if(aProjQ1 == aProjQ2) {NewProjCode = 111;} // Pi0-meson
|
||||
@@ -310,19 +369,23 @@ G4cout<<"Rapid "<<ProjectileRapidity<<G4endl; //" "<<TargetRapidity<<G4endl;
|
||||
{
|
||||
if(aProjQ1 > aProjQ2) {NewProjCode = aProjQ1*100+aProjQ2*10+1;}
|
||||
else {NewProjCode = aProjQ2*100+aProjQ1*10+1;}
|
||||
NewProjCode *=(ProjectilePDGcode/absProjectilePDGcode);
|
||||
// NewProjCode *=(ProjectilePDGcode/absProjectilePDGcode);
|
||||
}
|
||||
|
||||
G4bool ProjExcited=false;
|
||||
//G4cout<<"NewProjCode "<<NewProjCode<<G4endl;
|
||||
if(G4UniformRand() < 0.5)
|
||||
{
|
||||
NewProjCode +=2; // Excited Pi0-meson
|
||||
ProjExcited=true;
|
||||
}
|
||||
//G4cout<<G4endl<<"NewProjCode "<<NewProjCode<<G4endl;
|
||||
if(aProjQ1 != aProjQ2) NewProjCode *=(ProjectilePDGcode/absProjectilePDGcode); // Uzhi
|
||||
//G4cout<<"NewProjCode +2 or 0 "<<NewProjCode<<G4endl;
|
||||
|
||||
G4ParticleDefinition* TestParticle=0;
|
||||
TestParticle=G4ParticleTable::GetParticleTable()->FindParticle(NewProjCode);
|
||||
//G4cout<<"TestParticle ? "<<TestParticle<<G4endl;
|
||||
|
||||
if(TestParticle)
|
||||
{
|
||||
M0projectile=
|
||||
@@ -338,6 +401,10 @@ if(TestParticle)
|
||||
NewTargCode = NewNucleonId(TargQ1, TargQ2, TargQ3);
|
||||
//G4cout<<"NewTargCode "<<NewTargCode<<G4endl;
|
||||
|
||||
// if( (TargQ1 != TargQ2) && (TargQ1 != TargQ3) && (TargQ2 != TargQ3) // Lambda or Sigma0
|
||||
// {if(G4UniformRand() < 0.5) NewTargCode=
|
||||
|
||||
|
||||
if( (TargQ1 == TargQ2) && (TargQ1 == TargQ3) &&
|
||||
(SqrtS > M0projectile+DeltaMass)) {NewTargCode +=2; //Create Delta isobar
|
||||
ProjExcited=true;}
|
||||
@@ -443,12 +510,12 @@ if(TestParticle)
|
||||
|
||||
//G4cout<<"ProjQ1, ProjQ2, ProjQ3 "<<ProjQ1<<" "<<ProjQ2<<" "<<ProjQ3<<" "<<NewProjCode<<G4endl;
|
||||
|
||||
G4int TestParticleID=NewProjCode;
|
||||
G4ParticleDefinition* TestParticle=0;
|
||||
G4double TestParticleMass=DBL_MAX;
|
||||
//G4int TestParticleID=NewProjCode;
|
||||
//G4ParticleDefinition* TestParticle=0;
|
||||
//G4double TestParticleMass=DBL_MAX;
|
||||
|
||||
TestParticle=G4ParticleTable::GetParticleTable()->FindParticle(NewProjCode);
|
||||
if(TestParticle) TestParticleMass=TestParticle->GetPDGMass();
|
||||
//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
|
||||
@@ -463,8 +530,8 @@ if(TestParticle) TestParticleMass=TestParticle->GetPDGMass();
|
||||
else {NewProjCode +=0; ProjDeltaHasCreated=false;}
|
||||
}
|
||||
|
||||
G4ParticleDefinition* NewTestParticle=
|
||||
G4ParticleTable::GetParticleTable()->FindParticle(NewProjCode);
|
||||
//G4ParticleDefinition* NewTestParticle=
|
||||
// G4ParticleTable::GetParticleTable()->FindParticle(NewProjCode);
|
||||
//G4cout<<"TestParticleMass NewTestParticle->GetPDGMass() "<<TestParticleMass<<" "<< NewTestParticle->GetPDGMass()<<G4endl;
|
||||
//if(TestParticleMass < NewTestParticle->GetPDGMass()) {NewProjCode=TestParticleID;}
|
||||
|
||||
@@ -474,11 +541,11 @@ G4ParticleDefinition* NewTestParticle=
|
||||
|
||||
//G4cout<<"TargQ1, TargQ2, TargQ3 "<<TargQ1<<" "<<TargQ2<<" "<<TargQ3<<" "<<NewTargCode<<G4endl;
|
||||
|
||||
TestParticleID=NewTargCode;
|
||||
TestParticleMass=DBL_MAX;
|
||||
//TestParticleID=NewTargCode;
|
||||
//TestParticleMass=DBL_MAX;
|
||||
|
||||
TestParticle=G4ParticleTable::GetParticleTable()->FindParticle(NewTargCode);
|
||||
if(TestParticle) TestParticleMass=TestParticle->GetPDGMass();
|
||||
//TestParticle=G4ParticleTable::GetParticleTable()->FindParticle(NewTargCode);
|
||||
//if(TestParticle) TestParticleMass=TestParticle->GetPDGMass();
|
||||
|
||||
if((TargQ1==TargQ2) && (TargQ1==TargQ3)) {NewTargCode +=2; TargDeltaHasCreated=true;}
|
||||
else if(target->GetDefinition()->GetPDGiIsospin() == 3) // Target was Delta
|
||||
@@ -493,7 +560,7 @@ if(TestParticle) TestParticleMass=TestParticle->GetPDGMass();
|
||||
else {NewTargCode +=0; TargDeltaHasCreated=false;}
|
||||
}
|
||||
|
||||
NewTestParticle=G4ParticleTable::GetParticleTable()->FindParticle(NewTargCode);
|
||||
//NewTestParticle=G4ParticleTable::GetParticleTable()->FindParticle(NewTargCode);
|
||||
//G4cout<<"TestParticleMass NewTestParticle->GetPDGMass() "<<TestParticleMass<<" "<< NewTestParticle->GetPDGMass()<<G4endl;
|
||||
//if(TestParticleMass < NewTestParticle->GetPDGMass()) {NewTargCode=TestParticleID;}
|
||||
|
||||
@@ -708,10 +775,12 @@ G4int Uzhi; G4cin>>Uzhi;
|
||||
TargMassT2=M0target2+Pt2;
|
||||
TargMassT =std::sqrt(TargMassT2);
|
||||
|
||||
//G4cout<<"Masses "<<ProjMassT<<" "<<TargMassT<<" "<<SqrtS<<" "<<ProjMassT+TargMassT<<G4endl;
|
||||
|
||||
PZcms2=(S*S + ProjMassT2*ProjMassT2 + TargMassT2*TargMassT2-
|
||||
2.*S*ProjMassT2-2.*S*TargMassT2-2.*ProjMassT2*TargMassT2)
|
||||
/4./S;
|
||||
|
||||
//G4cout<<"PZcms2 PrD"<<PZcms2<<G4endl;
|
||||
if(PZcms2 < 0 ) continue;
|
||||
PZcms =std::sqrt(PZcms2);
|
||||
|
||||
@@ -877,15 +946,16 @@ G4cout<<Seco<<G4endl;
|
||||
PMinusMin=std::sqrt(ProjMassT2+PZcms2)-PZcms;
|
||||
PMinusMax=SqrtS-TargMassT;
|
||||
|
||||
PMinusNew=ChooseP(PMinusMin, PMinusMax);
|
||||
|
||||
// PMinusNew=ChooseP(PMinusMin, PMinusMax); // 12.06.11
|
||||
PMinusNew=(PMinusMax-PMinusMin)*G4UniformRand() + PMinusMin;
|
||||
Qminus=PMinusNew-Pprojectile.minus();
|
||||
|
||||
TPlusMin=std::sqrt(TargMassT2+PZcms2)-PZcms;
|
||||
// TPlusMax=SqrtS-PMinusNew;
|
||||
TPlusMax=SqrtS-ProjMassT;
|
||||
|
||||
TPlusNew=ChooseP(TPlusMin, TPlusMax);
|
||||
// TPlusNew=ChooseP(TPlusMin, TPlusMax); // 12.06.11
|
||||
TPlusNew=(TPlusMax-TPlusMin)*G4UniformRand() +TPlusMin;
|
||||
|
||||
Qplus=-(TPlusNew-Ptarget.plus());
|
||||
|
||||
@@ -896,7 +966,7 @@ G4cout<<(Pprojectile+Qmomentum).mag2()<<" "<<ProjectileNonDiffStateMinMass2<<G4e
|
||||
G4cout<<(Ptarget -Qmomentum).mag2()<<" "<<TargetNonDiffStateMinMass2<<G4endl;
|
||||
G4int Uzhi; G4cin>>Uzhi;
|
||||
*/
|
||||
} while (
|
||||
} while (
|
||||
((Pprojectile+Qmomentum).mag2() < ProjectileNonDiffStateMinMass2) || //No double Diffraction
|
||||
((Ptarget -Qmomentum).mag2() < TargetNonDiffStateMinMass2 ));
|
||||
}
|
||||
@@ -935,8 +1005,14 @@ void G4DiffractiveExcitation::CreateStrings(G4VSplitableHadron * hadron,
|
||||
G4ExcitedString * &SecondString,
|
||||
G4FTFParameters *theParameters) const
|
||||
{
|
||||
/*
|
||||
G4cout<<"Create Strings SplitUp "<<hadron<<G4endl;
|
||||
G4cout<<"Defin "<<hadron->GetDefinition()<<G4endl;
|
||||
G4cout<<"Defin "<<hadron->GetDefinition()->GetPDGEncoding()<<G4endl;
|
||||
*/
|
||||
hadron->SplitUp();
|
||||
G4Parton *start= hadron->GetNextParton();
|
||||
|
||||
if ( start==NULL)
|
||||
{ G4cout << " G4FTFModel::String() Error:No start parton found"<< G4endl;
|
||||
FirstString=0; SecondString=0;
|
||||
@@ -948,9 +1024,10 @@ void G4DiffractiveExcitation::CreateStrings(G4VSplitableHadron * hadron,
|
||||
FirstString=0; SecondString=0;
|
||||
return;
|
||||
}
|
||||
|
||||
//G4cout<<start<<" "<<start->GetPDGcode()<<" "<<end<<" "<<end->GetPDGcode()<<G4endl;
|
||||
//G4cout<<"Create string "<<start->GetPDGcode()<<" "<<end->GetPDGcode()<<G4endl;
|
||||
G4LorentzVector Phadron=hadron->Get4Momentum();
|
||||
|
||||
//G4cout<<"String mom "<<Phadron<<G4endl;
|
||||
G4LorentzVector Pstart(0.,0.,0.,0.);
|
||||
G4LorentzVector Pend(0.,0.,0.,0.);
|
||||
G4LorentzVector Pkink(0.,0.,0.,0.);
|
||||
@@ -959,6 +1036,7 @@ void G4DiffractiveExcitation::CreateStrings(G4VSplitableHadron * hadron,
|
||||
|
||||
G4int PDGcode_startQ = std::abs(start->GetDefinition()->GetPDGEncoding());
|
||||
G4int PDGcode_endQ = std::abs( end->GetDefinition()->GetPDGEncoding());
|
||||
//G4cout<<"PDGcode_startQ "<<PDGcode_startQ<<" PDGcode_endQ "<<PDGcode_endQ <<G4endl;
|
||||
|
||||
//--------------------------------------------------------------------------------
|
||||
G4double Wmin(0.);
|
||||
@@ -971,11 +1049,20 @@ void G4DiffractiveExcitation::CreateStrings(G4VSplitableHadron * hadron,
|
||||
} // end of if(isProjectile)
|
||||
|
||||
G4double W = hadron->Get4Momentum().mag();
|
||||
//G4cout<<"Wmin W "<<Wmin<<" "<<W<<G4endl;
|
||||
G4double W2=W*W;
|
||||
|
||||
G4double Pt(0.), x1(0.), x2(0.), x3(0.);
|
||||
G4double Pt(0.), x1(0.), x3(0.); // x2(0.),
|
||||
G4bool Kink=false;
|
||||
|
||||
if(!(((start->GetDefinition()->GetParticleSubType() == "di_quark") &&
|
||||
( end->GetDefinition()->GetParticleSubType() == "di_quark") ) ||
|
||||
((start->GetDefinition()->GetParticleSubType() == "quark") &&
|
||||
( end->GetDefinition()->GetParticleSubType() == "quark") )))
|
||||
{ // Kinky strings are allowed only for qq-q strings
|
||||
// Kinky strings are impossible for other systems (qq-qqbar, q-qbar)
|
||||
// according to the analysis of Pbar P interactions
|
||||
//G4cout<<G4endl<<"Check for Kink!##############"<<G4endl<<G4endl;
|
||||
if(W > Wmin)
|
||||
{ // Kink is possible
|
||||
G4double Pt2kink=theParameters->GetPt2Kink();
|
||||
@@ -988,7 +1075,7 @@ void G4DiffractiveExcitation::CreateStrings(G4VSplitableHadron * hadron,
|
||||
|
||||
x1=1.-Pt/W*std::exp( Y);
|
||||
x3=1.-Pt/W*std::exp(-Y);
|
||||
x2=2.-x1-x3;
|
||||
// x2=2.-x1-x3;
|
||||
|
||||
G4double Mass_startQ = 650.*MeV;
|
||||
if(PDGcode_startQ < 3) Mass_startQ = 325.*MeV;
|
||||
@@ -1060,34 +1147,59 @@ Pend*=Rotate;
|
||||
} // end of if((P2_1 < 0.) || (P2_3 <0.))
|
||||
} // end of if(Pt > 500.*MeV)
|
||||
} // end of if(W > Wmin) Check for a kink
|
||||
|
||||
} // end of qq-q string selection
|
||||
//--------------------------------------------------------------------------------
|
||||
/*
|
||||
G4cout<<"Kink "<<Kink<<" "
|
||||
<<start->GetDefinition()->GetParticleSubType()<<" "
|
||||
<< end->GetDefinition()->GetParticleSubType() <<G4endl;
|
||||
|
||||
G4cout<<"Kink "<<Kink<<" "
|
||||
<<start->GetDefinition()->GetPDGEncoding()<<" "
|
||||
<< end->GetDefinition()->GetPDGEncoding() <<G4endl;
|
||||
G4int Uzhi; G4cin>>Uzhi;
|
||||
*/
|
||||
|
||||
if(Kink)
|
||||
{ // Kink is possible
|
||||
//G4cout<<"Kink is sampled!"<<G4endl;
|
||||
std::vector<G4double> QuarkProbabilitiesAtGluonSplitUp =
|
||||
theParameters->GetQuarkProbabilitiesAtGluonSplitUp();
|
||||
|
||||
G4int QuarkInGluon(1); G4double Ksi=G4UniformRand();
|
||||
for(unsigned int Iq=0; Iq <3; Iq++)
|
||||
{
|
||||
//G4cout<<"Iq "<<Iq<<G4endl;
|
||||
|
||||
if(Ksi > QuarkProbabilitiesAtGluonSplitUp[Iq]) QuarkInGluon++;}
|
||||
|
||||
//G4cout<<"Last Iq "<<QuarkInGluon<<G4endl;
|
||||
G4Parton * Gquark = new G4Parton(QuarkInGluon);
|
||||
G4Parton * Ganti_quark = new G4Parton(-QuarkInGluon);
|
||||
//G4cout<<"Lorentz "<<G4endl;
|
||||
|
||||
//-------------------------------------------------------------------------------
|
||||
G4LorentzRotation toCMS(-1*Phadron.boostVector());
|
||||
|
||||
G4LorentzRotation toLab(toCMS.inverse());
|
||||
|
||||
//G4cout<<"Pstart "<<Pstart<<G4endl;
|
||||
//G4cout<<"Pend "<<Pend<<G4endl;
|
||||
Pstart.transform(toLab); start->Set4Momentum(Pstart);
|
||||
PkinkQ1.transform(toLab);
|
||||
PkinkQ2.transform(toLab);
|
||||
Pend.transform(toLab); end->Set4Momentum(Pend);
|
||||
//G4cout<<"Pstart "<<Pstart<<G4endl;
|
||||
//G4cout<<"Pend "<<Pend<<G4endl;
|
||||
//G4cout<<"Defin "<<hadron->GetDefinition()<<G4endl;
|
||||
//G4cout<<"Defin "<<hadron->GetDefinition()->GetPDGEncoding()<<G4endl;
|
||||
|
||||
G4int absPDGcode=std::abs(hadron->GetDefinition()->GetPDGEncoding());
|
||||
// G4int absPDGcode=std::abs(hadron->GetDefinition()->GetPDGEncoding());
|
||||
G4int absPDGcode=1500; // 23 Dec
|
||||
if((start->GetDefinition()->GetParticleSubType() == "quark") &&
|
||||
( end->GetDefinition()->GetParticleSubType() == "quark") )
|
||||
absPDGcode=110;
|
||||
|
||||
//G4cout<<"absPDGcode "<<absPDGcode<<G4endl;
|
||||
|
||||
if(absPDGcode < 1000)
|
||||
{ // meson
|
||||
@@ -1176,6 +1288,7 @@ if(Ksi > QuarkProbabilitiesAtGluonSplitUp[Iq]) QuarkInGluon++;}
|
||||
// -------------------------------------------------------------------------
|
||||
} else // End of kink is possible
|
||||
{ // Kink is impossible
|
||||
//G4cout<<start<<" "<<start->GetPDGcode()<<" "<<end<<" "<<end->GetPDGcode()<<G4endl;
|
||||
if ( isProjectile )
|
||||
{
|
||||
FirstString= new G4ExcitedString(end,start, +1);
|
||||
@@ -1232,6 +1345,9 @@ if(Ksi > QuarkProbabilitiesAtGluonSplitUp[Iq]) QuarkInGluon++;}
|
||||
SecondString=0;
|
||||
} // End of kink is impossible
|
||||
|
||||
//G4cout<<"Quarks in the string at creation"<<FirstString->GetRightParton()->GetPDGcode()<<" "<<FirstString->GetLeftParton()->GetPDGcode()<<G4endl;
|
||||
//G4cout<<FirstString<<" "<<SecondString<<G4endl;
|
||||
|
||||
#ifdef G4_FTFDEBUG
|
||||
G4cout << " generated string flavors "
|
||||
<< start->GetPDGcode() << " / "
|
||||
@@ -1268,6 +1384,7 @@ G4double G4DiffractiveExcitation::ChooseP(G4double Pmin, G4double Pmax) const
|
||||
}
|
||||
|
||||
G4double P=Pmin * std::pow(Pmax/Pmin,G4UniformRand());
|
||||
// G4double P=(Pmax-Pmin)*G4UniformRand()+Pmin;
|
||||
return P;
|
||||
}
|
||||
|
||||
|
||||
+31
-7
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4DiffractiveSplitableHadron.cc,v 1.9 2010/09/20 15:50:46 vuzhinsk Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
// $Id: G4DiffractiveSplitableHadron.cc,v 1.10 2010/12/07 10:42:40 vuzhinsk Exp $
|
||||
// GEANT4 tag $Name: $
|
||||
//
|
||||
|
||||
// ------------------------------------------------------------
|
||||
@@ -44,6 +44,9 @@
|
||||
G4DiffractiveSplitableHadron::G4DiffractiveSplitableHadron()
|
||||
|
||||
{
|
||||
PartonIndex=-1;
|
||||
Parton[0] = new G4Parton(1);
|
||||
Parton[1] = new G4Parton(-1);
|
||||
}
|
||||
|
||||
G4DiffractiveSplitableHadron::G4DiffractiveSplitableHadron(const G4ReactionProduct & aPrimary)
|
||||
@@ -68,7 +71,10 @@ G4DiffractiveSplitableHadron::G4DiffractiveSplitableHadron(const G4VKineticNucle
|
||||
}
|
||||
|
||||
G4DiffractiveSplitableHadron::~G4DiffractiveSplitableHadron()
|
||||
{}
|
||||
{
|
||||
//G4cout<<"Destruct G4DiffractiveSplitableHadron"<<Parton[0]<<" "<<Parton[1]<<G4endl;
|
||||
// if(Parton[0] != NULL){delete Parton[0]; delete Parton[1];}
|
||||
}
|
||||
|
||||
const G4DiffractiveSplitableHadron & G4DiffractiveSplitableHadron::operator=(const G4DiffractiveSplitableHadron &)
|
||||
{
|
||||
@@ -78,6 +84,7 @@ const G4DiffractiveSplitableHadron & G4DiffractiveSplitableHadron::operator=(con
|
||||
|
||||
void G4DiffractiveSplitableHadron::SplitUp()
|
||||
{
|
||||
//G4cout<<"SplitUp() IsSplit() Parton[0] "<<IsSplit()<<" "<<Parton[0]<<G4endl;
|
||||
if (IsSplit()) return;
|
||||
Splitting();
|
||||
// Split once only...
|
||||
@@ -99,19 +106,36 @@ G4Parton * G4DiffractiveSplitableHadron::GetNextParton()
|
||||
{
|
||||
++PartonIndex;
|
||||
if ( PartonIndex > 1 || PartonIndex < 0 ) return NULL;
|
||||
|
||||
return Parton[PartonIndex];
|
||||
G4int PartonInd(PartonIndex); // Vova
|
||||
if(PartonIndex == 1) PartonIndex=-1; // Vova
|
||||
return Parton[PartonInd];
|
||||
// return Parton[PartonIndex];
|
||||
}
|
||||
|
||||
G4Parton * G4DiffractiveSplitableHadron::GetNextAntiParton()
|
||||
{
|
||||
return NULL; // to be looked at @@
|
||||
++PartonIndex; // Uzhi 22.11.10
|
||||
if ( PartonIndex > 1 || PartonIndex < 0 ) return NULL;
|
||||
G4int PartonInd(PartonIndex);
|
||||
if(PartonIndex == 1) PartonIndex=-1;
|
||||
return Parton[PartonInd];
|
||||
// return NULL; // to be looked at @@
|
||||
}
|
||||
|
||||
void G4DiffractiveSplitableHadron::SetFirstParton(G4int PDGcode)// Uzhi 24.11.10
|
||||
{
|
||||
delete Parton[0];
|
||||
Parton[0]=new G4Parton(PDGcode);
|
||||
}
|
||||
|
||||
void G4DiffractiveSplitableHadron::SetSecondParton(G4int PDGcode)// Uzhi 24.11.10
|
||||
{
|
||||
delete Parton[1];
|
||||
Parton[1]=new G4Parton(PDGcode);
|
||||
}
|
||||
//
|
||||
//----------------------- Implementation--------------------------
|
||||
//
|
||||
|
||||
void G4DiffractiveSplitableHadron::ChooseStringEnds(G4int PDGcode,G4int * aEnd, G4int * bEnd) const
|
||||
{
|
||||
const G4double udspin1= 1./6.;
|
||||
|
||||
+5
-5
@@ -24,7 +24,7 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4ElasticHNScattering.cc,v 1.14 2009/12/16 17:51:13 gunter Exp $
|
||||
// $Id: G4ElasticHNScattering.cc,v 1.14 2009-12-16 17:51:13 gunter Exp $
|
||||
// ------------------------------------------------------------
|
||||
// GEANT 4 class implemetation file
|
||||
//
|
||||
@@ -177,8 +177,8 @@ G4bool G4ElasticHNScattering::
|
||||
|
||||
// ------ Now we can calculate the transfered Pt --------------------------
|
||||
G4double Pt2;
|
||||
G4double ProjMassT2, ProjMassT;
|
||||
G4double TargMassT2, TargMassT;
|
||||
G4double ProjMassT2; //, ProjMassT;
|
||||
G4double TargMassT2; //, TargMassT;
|
||||
|
||||
G4LorentzVector Qmomentum;
|
||||
|
||||
@@ -187,10 +187,10 @@ G4bool G4ElasticHNScattering::
|
||||
Pt2=G4ThreeVector(Qmomentum.vect()).mag2();
|
||||
|
||||
ProjMassT2=Mprojectile2+Pt2;
|
||||
ProjMassT =std::sqrt(ProjMassT2);
|
||||
// ProjMassT =std::sqrt(ProjMassT2);
|
||||
|
||||
TargMassT2=Mtarget2+Pt2;
|
||||
TargMassT =std::sqrt(TargMassT2);
|
||||
// TargMassT =std::sqrt(TargMassT2);
|
||||
|
||||
PZcms2=(S*S+ProjMassT2*ProjMassT2+
|
||||
TargMassT2*TargMassT2-
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+457
-184
@@ -24,225 +24,469 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4FTFParameters.cc,v 1.15 2010/11/15 10:02:38 vuzhinsk Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
// $Id: G4FTFParameters.cc,v 1.16 2010/12/07 10:42:40 vuzhinsk Exp $
|
||||
// GEANT4 tag $Name: $
|
||||
//
|
||||
|
||||
#include "G4FTFParameters.hh"
|
||||
|
||||
#include "G4ios.hh"
|
||||
#include <utility>
|
||||
#include "G4VComponentCrossSection.hh" // 31 May 2011
|
||||
#include "G4ComponentCHIPShadronNuclearXS.hh" // 31 May 2011
|
||||
|
||||
#include "G4ParticleDefinition.hh" // 31 May 2011
|
||||
|
||||
#include "G4Proton.hh" // 31 May 2011
|
||||
#include "G4Neutron.hh" // 31 May 2011
|
||||
|
||||
#include "G4PionPlus.hh" // 31 May 2011
|
||||
#include "G4PionMinus.hh" // 31 May 2011
|
||||
#include "G4KaonPlus.hh" // 31 May 2011
|
||||
#include "G4KaonMinus.hh" // 31 May 2011
|
||||
|
||||
G4FTFParameters::G4FTFParameters()
|
||||
{;}
|
||||
{FTFxsManager=0;}
|
||||
|
||||
|
||||
G4FTFParameters::~G4FTFParameters()
|
||||
{;}
|
||||
{delete FTFxsManager;}
|
||||
//**********************************************************************************************
|
||||
|
||||
//G4FTFParameters::G4FTFParameters(const G4ParticleDefinition * particle,
|
||||
// G4double theA,
|
||||
// G4double theZ,
|
||||
// G4double s)
|
||||
G4FTFParameters::G4FTFParameters(const G4ParticleDefinition * particle,
|
||||
G4int theA,
|
||||
G4int theZ,
|
||||
G4double s)
|
||||
G4int theA,
|
||||
G4int theZ,
|
||||
G4double PlabPerParticle)
|
||||
{
|
||||
G4int PDGcode = particle->GetPDGEncoding();
|
||||
G4int absPDGcode = std::abs(PDGcode);
|
||||
G4double ProjectileMass = particle->GetPDGMass();
|
||||
G4int ProjectilePDGcode = particle->GetPDGEncoding();
|
||||
G4int ProjectileabsPDGcode = std::abs(ProjectilePDGcode);
|
||||
G4double ProjectileMass = particle->GetPDGMass();
|
||||
G4double ProjectileMass2 =ProjectileMass*ProjectileMass;
|
||||
|
||||
G4int ProjectileBaryonNumber(0), AbsProjectileBaryonNumber(0);
|
||||
G4int AbsProjectileCharge(0);
|
||||
G4bool ProjectileIsNucleus=false;
|
||||
|
||||
if(std::abs(particle->GetBaryonNumber()) > 1)
|
||||
{ // The projectile is a nucleus
|
||||
ProjectileIsNucleus =true;
|
||||
ProjectileBaryonNumber =particle->GetBaryonNumber();
|
||||
AbsProjectileBaryonNumber=std::abs(ProjectileBaryonNumber);
|
||||
AbsProjectileCharge =(G4int) particle->GetPDGCharge();
|
||||
|
||||
if(ProjectileBaryonNumber > 1)
|
||||
{ ProjectilePDGcode= 2212; ProjectileabsPDGcode=2212;} // Proton
|
||||
else { ProjectilePDGcode=-2212; ProjectileabsPDGcode=2212;} // Anti-Proton
|
||||
|
||||
ProjectileMass =G4Proton::Proton()->GetPDGMass();
|
||||
ProjectileMass2=sqr(ProjectileMass);
|
||||
}
|
||||
|
||||
G4double TargetMass = G4Proton::Proton()->GetPDGMass();
|
||||
G4double TargetMass2 = TargetMass*TargetMass;
|
||||
|
||||
G4double Elab = (s - ProjectileMass*ProjectileMass - TargetMass*TargetMass)/
|
||||
(2*TargetMass);
|
||||
G4double Plab = std::sqrt(Elab * Elab - ProjectileMass*ProjectileMass);
|
||||
G4double Plab = PlabPerParticle;
|
||||
G4double Elab = std::sqrt(Plab*Plab+ProjectileMass2);
|
||||
G4double KineticEnergy = Elab-ProjectileMass; // 31 May 2011
|
||||
|
||||
G4double Ylab=0.5*std::log((Elab+Plab)/(Elab-Plab));
|
||||
G4double s=ProjectileMass2 + TargetMass2 + 2.*TargetMass*Elab;
|
||||
|
||||
Plab/=GeV; // Uzhi 8.07.10
|
||||
G4double LogPlab = std::log( Plab );
|
||||
G4double sqrLogPlab = LogPlab * LogPlab;
|
||||
//G4cout<<"Proj Plab "<<ProjectilePDGcode<<" "<<Plab<<G4endl;
|
||||
//G4cout<<"Mass KinE "<<ProjectileMass<<" "<<KineticEnergy<<G4endl;
|
||||
//G4cout<<" A Z "<<theA<<" "<<theZ<<G4endl;
|
||||
|
||||
G4double Ylab,Xtotal,Xelastic,Xannihilation;
|
||||
G4int NumberOfTargetNucleons;
|
||||
|
||||
Ylab=0.5*std::log((Elab+Plab)/(Elab-Plab));
|
||||
|
||||
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
|
||||
|
||||
Plab/=GeV;
|
||||
// G4double LogPlab = std::log( Plab );
|
||||
// G4double sqrLogPlab = LogPlab * LogPlab;
|
||||
|
||||
G4int NumberOfTargetProtons = theZ;
|
||||
G4int NumberOfTargetNeutrons = theA-theZ;
|
||||
// G4int NumberOfTargetProtons = (G4int) theZ;
|
||||
// G4int NumberOfTargetNeutrons = (G4int) theA- (G4int) theZ;
|
||||
G4int NumberOfTargetNucleons = NumberOfTargetProtons + NumberOfTargetNeutrons;
|
||||
|
||||
G4double Xtotal, Xelastic;
|
||||
NumberOfTargetNucleons = NumberOfTargetProtons + NumberOfTargetNeutrons;
|
||||
|
||||
if( PDGcode > 1000 ) //------Projectile is baryon --------
|
||||
if( (ProjectilePDGcode == 2212) ||
|
||||
(ProjectilePDGcode == 2112) ) //------Projectile is nucleon --------
|
||||
{
|
||||
G4double XtotPP = 48.0 + 0. *std::pow(Plab, 0. ) + 0.522*sqrLogPlab - 4.51*LogPlab;
|
||||
G4double XtotPN = 47.3 + 0. *std::pow(Plab, 0. ) + 0.513*sqrLogPlab - 4.27*LogPlab;
|
||||
G4double XtotPP = FTFxsManager->
|
||||
GetTotalElementCrossSection( particle,KineticEnergy,1,0);
|
||||
G4ParticleDefinition* Neutron=G4Neutron::Neutron();
|
||||
G4double XtotPN = FTFxsManager->
|
||||
GetTotalElementCrossSection( Neutron,KineticEnergy,1,0);
|
||||
|
||||
G4double XelPP = 11.9 + 26.9*std::pow(Plab,-1.21) + 0.169*sqrLogPlab - 1.85*LogPlab;
|
||||
G4double XelPN = 11.9 + 26.9*std::pow(Plab,-1.21) + 0.169*sqrLogPlab - 1.85*LogPlab;
|
||||
|
||||
Xtotal = ( NumberOfTargetProtons * XtotPP +
|
||||
NumberOfTargetNeutrons * XtotPN ) / NumberOfTargetNucleons;
|
||||
Xelastic = ( NumberOfTargetProtons * XelPP +
|
||||
NumberOfTargetNeutrons * XelPN ) / NumberOfTargetNucleons;
|
||||
G4double XelPP = FTFxsManager->
|
||||
GetElasticElementCrossSection(particle,KineticEnergy,1,0);
|
||||
G4double XelPN = FTFxsManager->
|
||||
GetElasticElementCrossSection( Neutron,KineticEnergy,1,0);
|
||||
//G4cout<<"Xs "<<XtotPP/millibarn<<" "<<XelPP/millibarn<<G4endl;
|
||||
//G4cout<<"Xs "<<XtotPN/millibarn<<" "<<XelPN/millibarn<<G4endl;
|
||||
if(!ProjectileIsNucleus)
|
||||
{ // Projectile is hadron
|
||||
Xtotal = ( NumberOfTargetProtons * XtotPP +
|
||||
NumberOfTargetNeutrons * XtotPN ) / NumberOfTargetNucleons;
|
||||
Xelastic = ( NumberOfTargetProtons * XelPP +
|
||||
NumberOfTargetNeutrons * XelPN ) / NumberOfTargetNucleons;
|
||||
} else
|
||||
{ // Projectile is a nucleus
|
||||
Xtotal = (
|
||||
AbsProjectileCharge *NumberOfTargetProtons *XtotPP +
|
||||
(AbsProjectileBaryonNumber-AbsProjectileCharge)*NumberOfTargetNeutrons*XtotPP +
|
||||
( AbsProjectileCharge *NumberOfTargetNeutrons +
|
||||
(AbsProjectileBaryonNumber-AbsProjectileCharge)*NumberOfTargetProtons)*XtotPN
|
||||
)/(AbsProjectileBaryonNumber*NumberOfTargetNucleons);
|
||||
|
||||
Xelastic= (
|
||||
AbsProjectileCharge *NumberOfTargetProtons *XelPP +
|
||||
(AbsProjectileBaryonNumber-AbsProjectileCharge)*NumberOfTargetNeutrons*XelPP +
|
||||
( AbsProjectileCharge *NumberOfTargetNeutrons +
|
||||
(AbsProjectileBaryonNumber-AbsProjectileCharge)*NumberOfTargetProtons)*XelPN
|
||||
)/(AbsProjectileBaryonNumber*NumberOfTargetNucleons);
|
||||
}
|
||||
else if( PDGcode < -1000 ) //------Projectile is anti_baryon --------
|
||||
|
||||
Xannihilation = 0.;
|
||||
Xtotal/=millibarn;
|
||||
Xelastic/=millibarn;
|
||||
}
|
||||
else if( ProjectilePDGcode < -1000 ) //------Projectile is anti_baryon --------
|
||||
{
|
||||
G4double XtotPP = 38.4 + 77.6*std::pow(Plab,-0.64) + 0.26*sqrLogPlab - 1.2*LogPlab;
|
||||
G4double XtotPN = 0. + 133.6*std::pow(Plab,-0.70) + 1.22*sqrLogPlab +13.7*LogPlab;
|
||||
|
||||
G4double XelPP = 10.2 + 52.7*std::pow(Plab,-1.16) + 0.125*sqrLogPlab - 1.28*LogPlab;
|
||||
G4double XelPN = 36.5 + 0. *std::pow(Plab, 0. ) + 0. *sqrLogPlab -11.9 *LogPlab;
|
||||
G4double X_a(0.), X_b(0.), X_c(0.), X_d(0.);
|
||||
G4double MesonProdThreshold=ProjectileMass+TargetMass+(2.*0.14+0.016); // 2 Mpi +DeltaE;
|
||||
|
||||
Xtotal = ( NumberOfTargetProtons * XtotPP +
|
||||
NumberOfTargetNeutrons * XtotPN ) / NumberOfTargetNucleons;
|
||||
Xelastic = ( NumberOfTargetProtons * XelPP +
|
||||
NumberOfTargetNeutrons * XelPN ) / NumberOfTargetNucleons;
|
||||
if(PlabPerParticle < 40.*MeV)
|
||||
{ // Low energy limits. Projectile at rest.
|
||||
Xtotal= 1512.9; // mb
|
||||
Xelastic= 473.2; // mb
|
||||
X_a= 625.1; // mb
|
||||
X_b= 9.780; // mb
|
||||
X_c= 49.989; // mb
|
||||
X_d= 6.614; // mb
|
||||
}
|
||||
else
|
||||
{ // Total and elastic cross section of PbarP interactions a'la Arkhipov
|
||||
G4double LogS=std::log(ECMSsqr/33.0625);
|
||||
G4double Xasmpt=36.04+0.304*LogS*LogS; // mb
|
||||
|
||||
LogS=std::log(SqrtS/20.74);
|
||||
G4double Basmpt=11.92+0.3036*LogS*LogS; // GeV^(-2)
|
||||
G4double R0=std::sqrt(0.40874044*Xasmpt-Basmpt); // GeV^(-1)
|
||||
|
||||
G4double FlowF=SqrtS/
|
||||
std::sqrt(ECMSsqr*ECMSsqr+ProjectileMass2*ProjectileMass2+TargetMass2*TargetMass2-
|
||||
2.*ECMSsqr*ProjectileMass2 -2.*ECMSsqr*TargetMass2 -2.*ProjectileMass2*TargetMass2);
|
||||
|
||||
Xtotal=Xasmpt*(1.+13.55*FlowF/R0/R0/R0*
|
||||
(1.-4.47/SqrtS+12.38/ECMSsqr-12.43/SqrtS/ECMSsqr)); // mb
|
||||
|
||||
Xasmpt=4.4+0.101*LogS*LogS; // mb
|
||||
Xelastic=Xasmpt*(1.+59.27*FlowF/R0/R0/R0*
|
||||
(1.-6.95/SqrtS+23.54/ECMSsqr-25.34/SqrtS/ECMSsqr)); // mb
|
||||
//G4cout<<"Param Xtotal Xelastic "<<Xtotal<<" "<<Xelastic<<G4endl;
|
||||
//G4cout<<"FlowF "<<FlowF<<" SqrtS "<<SqrtS<<G4endl;
|
||||
//G4cout<<"Param Xelastic-NaN "<<Xelastic<<" "<<1.5*16.654/pow(ECMSsqr/2.176/2.176,2.2)<<" "<<ECMSsqr<<G4endl;
|
||||
X_a=25.*FlowF; // mb, 3-shirts diagram
|
||||
|
||||
if(SqrtS < MesonProdThreshold)
|
||||
{
|
||||
X_b=3.13+140.*std::pow(MesonProdThreshold-SqrtS,2.5);// mb anti-quark-quark annihilation
|
||||
Xelastic-=3.*X_b; // Xel-X(PbarP->NNbar)
|
||||
} else
|
||||
{
|
||||
X_b=6.8/SqrtS; // mb anti-quark-quark annihilation
|
||||
Xelastic-=3.*X_b; // Xel-X(PbarP->NNbar)
|
||||
}
|
||||
|
||||
X_c=2.*FlowF*sqr(ProjectileMass+TargetMass)/ECMSsqr; // mb rearrangement
|
||||
|
||||
//G4cout<<"Old new Xa "<<35.*FlowF<<" "<<25.*FlowF<<G4endl;
|
||||
|
||||
X_d=23.3/ECMSsqr; // mb anti-quark-quark string creation
|
||||
}
|
||||
//---------------------------------------------------------------
|
||||
//G4cout<<"Param Xtotal Xelastic "<<Xtotal<<" "<<Xelastic<<G4endl;
|
||||
//G4cout<<"Para a b c d "<<X_a<<" "<<X_b<<" "<<X_c<<" "<<X_d<<G4endl;
|
||||
//G4cout<<"Para a b c d "<<X_a<<" "<<5.*X_b<<" "<<5.*X_c<<" "<<6.*X_d<<G4endl;
|
||||
G4double Xann_on_P(0.), Xann_on_N(0.);
|
||||
|
||||
if(ProjectilePDGcode == -2212) // Pbar+P/N
|
||||
{Xann_on_P=X_a + X_b*5. + X_c*5. + X_d*6.; Xann_on_N=X_a + X_b*4. + X_c*4. + X_d*4.;}
|
||||
else if(ProjectilePDGcode == -2112) // NeutrBar+P/N
|
||||
{Xann_on_P=X_a + X_b*4. + X_c*4. + X_d*4.; Xann_on_N=X_a + X_b*5. + X_c*5. + X_d*6.;}
|
||||
else if(ProjectilePDGcode == -3122) // LambdaBar+P/N
|
||||
{Xann_on_P=X_a + X_b*3. + X_c*3. + X_d*2.; Xann_on_N=X_a + X_b*3. + X_c*3. + X_d*2.;}
|
||||
else if(ProjectilePDGcode == -3112) // Sigma-Bar+P/N
|
||||
{Xann_on_P=X_a + X_b*2. + X_c*2. + X_d*0.; Xann_on_N=X_a + X_b*4. + X_c*4. + X_d*2.;}
|
||||
else if(ProjectilePDGcode == -3212) // Sigma0Bar+P/N
|
||||
{Xann_on_P=X_a + X_b*3. + X_c*3. + X_d*2.; Xann_on_N=X_a + X_b*3. + X_c*3. + X_d*2.;}
|
||||
else if(ProjectilePDGcode == -3222) // Sigma+Bar+P/N
|
||||
{Xann_on_P=X_a + X_b*4. + X_c*4. + X_d*2.; Xann_on_N=X_a + X_b*2. + X_c*2. + X_d*0.;}
|
||||
else if(ProjectilePDGcode == -3312) // Xi-Bar+P/N
|
||||
{Xann_on_P=X_a + X_b*1. + X_c*1. + X_d*0.; Xann_on_N=X_a + X_b*2. + X_c*2. + X_d*0.;}
|
||||
else if(ProjectilePDGcode == -3322) // Xi0Bar+P/N
|
||||
{Xann_on_P=X_a + X_b*2. + X_c*2. + X_d*0.; Xann_on_N=X_a + X_b*1. + X_c*1. + X_d*0.;}
|
||||
else if(ProjectilePDGcode == -3334) // Omega-Bar+P/N
|
||||
{Xann_on_P=X_a + X_b*0. + X_c*0. + X_d*0.; Xann_on_N=X_a + X_b*0. + X_c*0. + X_d*0.;}
|
||||
else {G4cout<<"Unknown anti-baryon for FTF annihilation"<<G4endl;}
|
||||
//---------------------------------------------------------------
|
||||
|
||||
//G4cout<<"Sum "<<Xann_on_P<<G4endl;
|
||||
|
||||
if(!ProjectileIsNucleus)
|
||||
{ // Projectile is anti-baryon
|
||||
Xannihilation = ( NumberOfTargetProtons * Xann_on_P +
|
||||
NumberOfTargetNeutrons * Xann_on_N ) / NumberOfTargetNucleons;
|
||||
} else
|
||||
{ // Projectile is a nucleus
|
||||
Xannihilation=(
|
||||
( AbsProjectileCharge *NumberOfTargetProtons+
|
||||
(AbsProjectileBaryonNumber-AbsProjectileCharge)*NumberOfTargetNeutrons )*Xann_on_P +
|
||||
( AbsProjectileCharge *NumberOfTargetNeutrons+
|
||||
(AbsProjectileBaryonNumber-AbsProjectileCharge)*NumberOfTargetProtons )*Xann_on_N
|
||||
)/(AbsProjectileBaryonNumber*NumberOfTargetNucleons);
|
||||
}
|
||||
|
||||
G4double Xftf=0.;
|
||||
MesonProdThreshold=ProjectileMass+TargetMass+(0.14+0.08); // Mpi +DeltaE
|
||||
if(SqrtS > MesonProdThreshold) {Xftf=36.*(1.-MesonProdThreshold/SqrtS);}
|
||||
|
||||
Xtotal = Xelastic + Xannihilation + Xftf;
|
||||
/*
|
||||
G4cout<<"Plab Xtotal, Xelastic Xinel Xftf "<<Plab<<" "<<Xtotal<<" "<<Xelastic<<" "<<Xtotal-Xelastic<<" "<<Xtotal-Xelastic-Xannihilation<<G4endl;
|
||||
G4cout<<"Plab Xelastic/Xtotal, Xann/Xin "<<Plab<<" "<<Xelastic/Xtotal<<" "<<Xannihilation/(Xtotal-Xelastic)<<G4endl;
|
||||
//G4int Uzhi; G4cin>>Uzhi;
|
||||
*/
|
||||
//---------------------------------------------------------------
|
||||
}
|
||||
else if( PDGcode == 211 ) //------Projectile is PionPlus -------
|
||||
else if( ProjectilePDGcode == 211 ) //------Projectile is PionPlus -------
|
||||
{
|
||||
G4double XtotPiP = 16.4 + 19.3 *std::pow(Plab,-0.42) + 0.19 *sqrLogPlab - 0.0 *LogPlab;
|
||||
G4double XtotPiN = 33.0 + 14.0 *std::pow(Plab,-1.36) + 0.456*sqrLogPlab - 4.03*LogPlab;
|
||||
G4double XtotPiP = FTFxsManager->
|
||||
GetTotalElementCrossSection( particle,KineticEnergy,1,0);
|
||||
G4ParticleDefinition* PionMinus=G4PionMinus::PionMinus();
|
||||
G4double XtotPiN = FTFxsManager->
|
||||
GetTotalElementCrossSection( PionMinus,KineticEnergy,1,0);
|
||||
|
||||
G4double XelPiP = 0.0 + 11.4*std::pow(Plab,-0.40) + 0.079*sqrLogPlab - 0.0 *LogPlab;
|
||||
G4double XelPiN = 1.76 + 11.2*std::pow(Plab,-0.64) + 0.043*sqrLogPlab - 0.0 *LogPlab;
|
||||
G4double XelPiP = FTFxsManager->
|
||||
GetElasticElementCrossSection(particle,KineticEnergy,1,0);
|
||||
G4double XelPiN = FTFxsManager->
|
||||
GetElasticElementCrossSection( PionMinus,KineticEnergy,1,0);
|
||||
|
||||
Xtotal = ( NumberOfTargetProtons * XtotPiP +
|
||||
NumberOfTargetNeutrons * XtotPiN ) / NumberOfTargetNucleons;
|
||||
Xelastic = ( NumberOfTargetProtons * XelPiP +
|
||||
NumberOfTargetNeutrons * XelPiN ) / NumberOfTargetNucleons;
|
||||
Xannihilation = 0.;
|
||||
Xtotal/=millibarn;
|
||||
Xelastic/=millibarn;
|
||||
}
|
||||
else if( PDGcode == -211 ) //------Projectile is PionMinus -------
|
||||
else if( ProjectilePDGcode == -211 ) //------Projectile is PionMinus -------
|
||||
{
|
||||
G4double XtotPiP = 33.0 + 14.0 *std::pow(Plab,-1.36) + 0.456*sqrLogPlab - 4.03*LogPlab;
|
||||
G4double XtotPiN = 16.4 + 19.3 *std::pow(Plab,-0.42) + 0.19 *sqrLogPlab - 0.0 *LogPlab;
|
||||
G4double XtotPiP = FTFxsManager->
|
||||
GetTotalElementCrossSection( particle,KineticEnergy,1,0);
|
||||
G4ParticleDefinition* PionPlus=G4PionPlus::PionPlus();
|
||||
G4double XtotPiN = FTFxsManager->
|
||||
GetTotalElementCrossSection( PionPlus,KineticEnergy,1,0);
|
||||
|
||||
G4double XelPiP = 1.76 + 11.2*std::pow(Plab,-0.64) + 0.043*sqrLogPlab - 0.0 *LogPlab;
|
||||
G4double XelPiN = 0.0 + 11.4*std::pow(Plab,-0.40) + 0.079*sqrLogPlab - 0.0 *LogPlab;
|
||||
G4double XelPiP = FTFxsManager->
|
||||
GetElasticElementCrossSection(particle,KineticEnergy,1,0);
|
||||
G4double XelPiN = FTFxsManager->
|
||||
GetElasticElementCrossSection( PionPlus,KineticEnergy,1,0);
|
||||
|
||||
Xtotal = ( NumberOfTargetProtons * XtotPiP +
|
||||
NumberOfTargetNeutrons * XtotPiN ) / NumberOfTargetNucleons;
|
||||
Xelastic = ( NumberOfTargetProtons * XelPiP +
|
||||
NumberOfTargetNeutrons * XelPiN ) / NumberOfTargetNucleons;
|
||||
Xannihilation = 0.;
|
||||
Xtotal/=millibarn;
|
||||
Xelastic/=millibarn;
|
||||
}
|
||||
|
||||
else if( PDGcode == 111 ) //------Projectile is PionZero -------
|
||||
else if( ProjectilePDGcode == 111 ) //------Projectile is PionZero -------
|
||||
{
|
||||
G4double XtotPiP =(16.4 + 19.3 *std::pow(Plab,-0.42) + 0.19 *sqrLogPlab - 0.0 *LogPlab + //Pi+
|
||||
33.0 + 14.0 *std::pow(Plab,-1.36) + 0.456*sqrLogPlab - 4.03*LogPlab)/2; //Pi-
|
||||
G4ParticleDefinition* PionPlus=G4PionPlus::PionPlus();
|
||||
G4double XtotPipP= FTFxsManager->
|
||||
GetTotalElementCrossSection( PionPlus,KineticEnergy,1,0);
|
||||
|
||||
G4double XtotPiN =(33.0 + 14.0 *std::pow(Plab,-1.36) + 0.456*sqrLogPlab - 4.03*LogPlab + //Pi+
|
||||
16.4 + 19.3 *std::pow(Plab,-0.42) + 0.19 *sqrLogPlab - 0.0 *LogPlab)/2; //Pi-
|
||||
G4ParticleDefinition* PionMinus=G4PionMinus::PionMinus();
|
||||
G4double XtotPimP= FTFxsManager->
|
||||
GetTotalElementCrossSection( PionMinus,KineticEnergy,1,0);
|
||||
|
||||
G4double XelPiP =( 0.0 + 11.4*std::pow(Plab,-0.40) + 0.079*sqrLogPlab - 0.0 *LogPlab + //Pi+
|
||||
1.76 + 11.2*std::pow(Plab,-0.64) + 0.043*sqrLogPlab - 0.0 *LogPlab)/2; //Pi-
|
||||
G4double XelPiN =( 1.76 + 11.2*std::pow(Plab,-0.64) + 0.043*sqrLogPlab - 0.0 *LogPlab + //Pi+
|
||||
0.0 + 11.4*std::pow(Plab,-0.40) + 0.079*sqrLogPlab - 0.0 *LogPlab)/2; //Pi-
|
||||
G4double XelPipP = FTFxsManager->
|
||||
GetElasticElementCrossSection( PionPlus,KineticEnergy,1,0);
|
||||
G4double XelPimP = FTFxsManager->
|
||||
GetElasticElementCrossSection( PionMinus,KineticEnergy,1,0);
|
||||
|
||||
G4double XtotPiP= (XtotPipP + XtotPimP)/2.;
|
||||
G4double XtotPiN=XtotPiP;
|
||||
G4double XelPiP = (XelPipP + XelPimP )/2.;
|
||||
G4double XelPiN = XelPiP;
|
||||
|
||||
Xtotal = ( NumberOfTargetProtons * XtotPiP +
|
||||
NumberOfTargetNeutrons * XtotPiN ) / NumberOfTargetNucleons;
|
||||
Xelastic = ( NumberOfTargetProtons * XelPiP +
|
||||
NumberOfTargetNeutrons * XelPiN ) / NumberOfTargetNucleons;
|
||||
}
|
||||
else if( PDGcode == 321 ) //------Projectile is KaonPlus -------
|
||||
{
|
||||
G4double XtotKP = 18.1 + 0. *std::pow(Plab, 0. ) + 0.26 *sqrLogPlab - 1.0 *LogPlab;
|
||||
G4double XtotKN = 18.7 + 0. *std::pow(Plab, 0. ) + 0.21 *sqrLogPlab - 0.89*LogPlab;
|
||||
Xannihilation = 0.;
|
||||
|
||||
G4double XelKP = 5.0 + 8.1*std::pow(Plab,-1.8 ) + 0.16 *sqrLogPlab - 1.3 *LogPlab;
|
||||
G4double XelKN = 7.3 + 0. *std::pow(Plab,-0. ) + 0.29 *sqrLogPlab - 2.4 *LogPlab;
|
||||
Xtotal/=millibarn;
|
||||
Xelastic/=millibarn;
|
||||
}
|
||||
else if( ProjectilePDGcode == 321 ) //------Projectile is KaonPlus -------
|
||||
{
|
||||
G4double XtotKP = FTFxsManager->
|
||||
GetTotalElementCrossSection( particle,KineticEnergy,1,0);
|
||||
|
||||
G4ParticleDefinition* KaonMinus=G4KaonMinus::KaonMinus();
|
||||
G4double XtotKN = FTFxsManager->
|
||||
GetTotalElementCrossSection( KaonMinus,KineticEnergy,1,0);
|
||||
|
||||
G4double XelKP = FTFxsManager->
|
||||
GetElasticElementCrossSection(particle,KineticEnergy,1,0);
|
||||
G4double XelKN = FTFxsManager->
|
||||
GetElasticElementCrossSection( KaonMinus,KineticEnergy,1,0);
|
||||
|
||||
Xtotal = ( NumberOfTargetProtons * XtotKP +
|
||||
NumberOfTargetNeutrons * XtotKN ) / NumberOfTargetNucleons;
|
||||
Xelastic = ( NumberOfTargetProtons * XelKP +
|
||||
NumberOfTargetNeutrons * XelKN ) / NumberOfTargetNucleons;
|
||||
}
|
||||
else if( PDGcode ==-321 ) //------Projectile is KaonMinus ------
|
||||
{
|
||||
G4double XtotKP = 32.1 + 0. *std::pow(Plab, 0. ) + 0.66 *sqrLogPlab - 5.6 *LogPlab;
|
||||
G4double XtotKN = 25.2 + 0. *std::pow(Plab, 0. ) + 0.38 *sqrLogPlab - 2.9 *LogPlab;
|
||||
Xannihilation = 0.;
|
||||
|
||||
G4double XelKP = 7.3 + 0. *std::pow(Plab,-0. ) + 0.29 *sqrLogPlab - 2.4 *LogPlab;
|
||||
G4double XelKN = 5.0 + 8.1*std::pow(Plab,-1.8 ) + 0.16 *sqrLogPlab - 1.3 *LogPlab;
|
||||
Xtotal/=millibarn;
|
||||
Xelastic/=millibarn;
|
||||
}
|
||||
else if( ProjectilePDGcode ==-321 ) //------Projectile is KaonMinus ------
|
||||
{
|
||||
G4double XtotKP = FTFxsManager->
|
||||
GetTotalElementCrossSection( particle,KineticEnergy,1,0);
|
||||
|
||||
G4ParticleDefinition* KaonPlus=G4KaonPlus::KaonPlus();
|
||||
G4double XtotKN = FTFxsManager->
|
||||
GetTotalElementCrossSection( KaonPlus,KineticEnergy,1,0);
|
||||
|
||||
G4double XelKP = FTFxsManager->
|
||||
GetElasticElementCrossSection(particle,KineticEnergy,1,0);
|
||||
|
||||
G4double XelKN = FTFxsManager->
|
||||
GetElasticElementCrossSection(KaonPlus,KineticEnergy,1,0);
|
||||
|
||||
Xtotal = ( NumberOfTargetProtons * XtotKP +
|
||||
NumberOfTargetNeutrons * XtotKN ) / NumberOfTargetNucleons;
|
||||
Xelastic = ( NumberOfTargetProtons * XelKP +
|
||||
NumberOfTargetNeutrons * XelKN ) / NumberOfTargetNucleons;
|
||||
Xannihilation = 0.;
|
||||
|
||||
Xtotal/=millibarn;
|
||||
Xelastic/=millibarn;
|
||||
}
|
||||
else if((PDGcode == 311) || (PDGcode == 130) || (PDGcode == 310))//Projectile is KaonZero
|
||||
else if((ProjectilePDGcode == 311) ||
|
||||
(ProjectilePDGcode == 130) ||
|
||||
(ProjectilePDGcode == 310)) //Projectile is KaonZero
|
||||
{
|
||||
G4double XtotKP =( 18.1 + 0. *std::pow(Plab, 0. ) + 0.26 *sqrLogPlab - 1.0 *LogPlab + //K+
|
||||
32.1 + 0. *std::pow(Plab, 0. ) + 0.66 *sqrLogPlab - 5.6 *LogPlab)/2; //K-
|
||||
G4double XtotKN =( 18.7 + 0. *std::pow(Plab, 0. ) + 0.21 *sqrLogPlab - 0.89*LogPlab + //K+
|
||||
25.2 + 0. *std::pow(Plab, 0. ) + 0.38 *sqrLogPlab - 2.9 *LogPlab)/2; //K-
|
||||
G4ParticleDefinition* KaonPlus=G4KaonPlus::KaonPlus();
|
||||
G4double XtotKpP= FTFxsManager->
|
||||
GetTotalElementCrossSection( KaonPlus,KineticEnergy,1,0);
|
||||
|
||||
G4ParticleDefinition* KaonMinus=G4KaonMinus::KaonMinus();
|
||||
G4double XtotKmP= FTFxsManager->
|
||||
GetTotalElementCrossSection( KaonMinus,KineticEnergy,1,0);
|
||||
|
||||
G4double XelKpP = FTFxsManager->
|
||||
GetElasticElementCrossSection( KaonPlus,KineticEnergy,1,0);
|
||||
G4double XelKmP = FTFxsManager->
|
||||
GetElasticElementCrossSection( KaonMinus,KineticEnergy,1,0);
|
||||
|
||||
G4double XtotKP=(XtotKpP+XtotKmP)/2.;
|
||||
G4double XtotKN=XtotKP;
|
||||
G4double XelKP =(XelKpP +XelKmP )/2.;
|
||||
G4double XelKN =XelKP;
|
||||
|
||||
G4double XelKP =( 5.0 + 8.1*std::pow(Plab,-1.8 ) + 0.16 *sqrLogPlab - 1.3 *LogPlab + //K+
|
||||
7.3 + 0. *std::pow(Plab,-0. ) + 0.29 *sqrLogPlab - 2.4 *LogPlab)/2; //K-
|
||||
G4double XelKN =( 7.3 + 0. *std::pow(Plab,-0. ) + 0.29 *sqrLogPlab - 2.4 *LogPlab + //K+
|
||||
5.0 + 8.1*std::pow(Plab,-1.8 ) + 0.16 *sqrLogPlab - 1.3 *LogPlab)/2; //K-
|
||||
Xtotal = ( NumberOfTargetProtons * XtotKP +
|
||||
NumberOfTargetNeutrons * XtotKN ) / NumberOfTargetNucleons;
|
||||
Xelastic = ( NumberOfTargetProtons * XelKP +
|
||||
NumberOfTargetNeutrons * XelKN ) / NumberOfTargetNucleons;
|
||||
Xannihilation = 0.;
|
||||
|
||||
Xtotal/=millibarn;
|
||||
Xelastic/=millibarn;
|
||||
}
|
||||
else //------Projectile is undefined, Nucleon assumed
|
||||
{
|
||||
G4double XtotPP = 48.0 + 0. *std::pow(Plab, 0. ) + 0.522*sqrLogPlab - 4.51*LogPlab;
|
||||
G4double XtotPN = 47.3 + 0. *std::pow(Plab, 0. ) + 0.513*sqrLogPlab - 4.27*LogPlab;
|
||||
G4ParticleDefinition* Proton=G4Proton::Proton();
|
||||
G4double XtotPP = FTFxsManager->
|
||||
GetTotalElementCrossSection( Proton,KineticEnergy,1,0);
|
||||
|
||||
G4double XelPP = 11.9 + 26.9*std::pow(Plab,-1.21) + 0.169*sqrLogPlab - 1.85*LogPlab;
|
||||
G4double XelPN = 11.9 + 26.9*std::pow(Plab,-1.21) + 0.169*sqrLogPlab - 1.85*LogPlab;
|
||||
G4ParticleDefinition* Neutron=G4Neutron::Neutron();
|
||||
G4double XtotPN = FTFxsManager->
|
||||
GetTotalElementCrossSection( Neutron,KineticEnergy,1,0);
|
||||
|
||||
G4double XelPP = FTFxsManager->
|
||||
GetElasticElementCrossSection(Proton,KineticEnergy,1,0);
|
||||
G4double XelPN = FTFxsManager->
|
||||
GetElasticElementCrossSection( Neutron,KineticEnergy,1,0);
|
||||
|
||||
Xtotal = ( NumberOfTargetProtons * XtotPP +
|
||||
NumberOfTargetNeutrons * XtotPN ) / NumberOfTargetNucleons;
|
||||
Xelastic = ( NumberOfTargetProtons * XelPP +
|
||||
NumberOfTargetNeutrons * XelPN ) / NumberOfTargetNucleons;
|
||||
Xannihilation = 0.;
|
||||
|
||||
Xtotal/=millibarn;
|
||||
Xelastic/=millibarn;
|
||||
};
|
||||
|
||||
// Xtotal and Xelastic in mb
|
||||
|
||||
// For Pi- P interactions only!
|
||||
if(std::abs(Plab-1.4) < 0.05) {Xtotal=3.500599e+01; Xelastic= 1.150032e+01;}
|
||||
if(std::abs(Plab-1.5) < 0.05) {Xtotal=3.450591e+01; Xelastic= 1.050038e+01;}
|
||||
if(std::abs(Plab-1.6) < 0.05) {Xtotal=3.430576e+01; Xelastic= 9.800433e+00;}
|
||||
if(std::abs(Plab-1.7) < 0.05) {Xtotal=3.455560e+01; Xelastic= 9.300436e+00;}
|
||||
if(std::abs(Plab-1.8) < 0.05) {Xtotal=3.480545e+01; Xelastic= 8.800438e+00;}
|
||||
if(std::abs(Plab-2.0) < 0.05) {Xtotal=3.570503e+01; Xelastic= 8.200370e+00;}
|
||||
if(std::abs(Plab-2.2) < 0.05) {Xtotal=3.530495e+01; Xelastic= 7.800362e+00;}
|
||||
if(std::abs(Plab-2.5) < 0.05) {Xtotal=3.410484e+01; Xelastic= 7.350320e+00;}
|
||||
if(std::abs(Plab-2.75) < 0.05){Xtotal=3.280479e+01; Xelastic= 7.050273e+00;}
|
||||
if(std::abs(Plab-3.0) < 0.05) {Xtotal=3.180473e+01; Xelastic= 6.800258e+00;}
|
||||
if(std::abs(Plab-4.0) < 0.05) {Xtotal=2.910441e+01; Xelastic= 6.100229e+00;}
|
||||
if(std::abs(Plab-5.0) < 0.05) {Xtotal=2.820372e+01; Xelastic= 5.700275e+00;}
|
||||
if(std::abs(Plab-6.0) < 0.05) {Xtotal=2.760367e+01; Xelastic= 5.400255e+00;}
|
||||
if(std::abs(Plab-7.0) < 0.05) {Xtotal=2.725366e+01; Xelastic= 5.150256e+00;}
|
||||
if(std::abs(Plab-8.0) < 0.05) {Xtotal=2.690365e+01; Xelastic= 4.900258e+00;}
|
||||
if(std::abs(Plab-10.0) < 0.05){Xtotal=2.660342e+01; Xelastic= 4.600237e+00;}
|
||||
if(std::abs(Plab-12.0) < 0.05){Xtotal=2.632341e+01; Xelastic= 4.480229e+00;}
|
||||
if(std::abs(Plab-14.0) < 0.05){Xtotal=2.604340e+01; Xelastic= 4.360221e+00;}
|
||||
if(std::abs(Plab-20.0) < 0.05){Xtotal=2.520337e+01; Xelastic= 4.000197e+00;}
|
||||
if(std::abs(Plab-30.0) < 0.05){Xtotal=2.505334e+01; Xelastic= 3.912679e+00;}
|
||||
//
|
||||
//----------- Geometrical parameters ------------------------------------------------
|
||||
SetTotalCrossSection(Xtotal);
|
||||
SetElastisCrossSection(Xelastic);
|
||||
SetInelasticCrossSection(Xtotal-Xelastic);
|
||||
|
||||
//G4cout<<"Plab Xtotal, Xelastic Xinel "<<Plab<<" "<<Xtotal<<" "<<Xelastic<<Xtotal-Xelastic)<<G4endl;
|
||||
/*
|
||||
G4cout<<"Plab Xtotal, Xelastic Xinel Xftf "<<Plab<<" "<<Xtotal<<" "<<Xelastic<<" "<<Xtotal-Xelastic<<" "<<Xtotal-Xelastic-Xannihilation<<G4endl;
|
||||
if(Xtotal-Xelastic != 0.)
|
||||
{
|
||||
G4cout<<"Plab Xelastic/Xtotal, Xann/Xin "<<Plab<<" "<<Xelastic/Xtotal<<" "<<Xannihilation/
|
||||
(Xtotal-Xelastic)<<G4endl;
|
||||
} else
|
||||
{
|
||||
G4cout<<"Plab Xelastic/Xtotal, Xann "<<Plab<<" "<<Xelastic/Xtotal<<" "<<
|
||||
Xannihilation<<G4endl;
|
||||
}
|
||||
//G4int Uzhi; G4cin>>Uzhi;
|
||||
*/
|
||||
// // Interactions with elastic and inelastic collisions
|
||||
SetProbabilityOfElasticScatt(Xtotal, Xelastic);
|
||||
SetRadiusOfHNinteractions2(Xtotal/pi/10.);
|
||||
|
||||
if(Xtotal-Xelastic == 0.)
|
||||
{
|
||||
SetProbabilityOfAnnihilation(0.);
|
||||
} else
|
||||
{SetProbabilityOfAnnihilation(Xannihilation/(Xtotal-Xelastic));}
|
||||
//
|
||||
/* //==== No elastic scattering ============================
|
||||
SetProbabilityOfElasticScatt(Xtotal, 0.);
|
||||
SetRadiusOfHNinteractions2((Xtotal-Xelastic)/pi/10.);
|
||||
*/ //=======================================================
|
||||
//SetProbabilityOfElasticScatt(Xtotal, 0.);
|
||||
// //==== No elastic scattering ============================
|
||||
// SetProbabilityOfElasticScatt(Xtotal, 0.);
|
||||
// SetRadiusOfHNinteractions2((Xtotal-Xelastic)/pi/10.);
|
||||
// SetProbabilityOfAnnihilation(1.);
|
||||
// SetProbabilityOfAnnihilation(0.);
|
||||
// //=======================================================
|
||||
|
||||
//-----------------------------------------------------------------------------------
|
||||
|
||||
SetSlope( Xtotal*Xtotal/16./pi/Xelastic/0.3894 ); // Slope parameter of elastic scattering
|
||||
// (GeV/c)^(-2))
|
||||
//G4cout<<"Slope "<<GetSlope()<<G4endl;
|
||||
//-----------------------------------------------------------------------------------
|
||||
SetGamma0( GetSlope()*Xtotal/10./2./pi );
|
||||
|
||||
@@ -250,9 +494,11 @@ if(std::abs(Plab-30.0) < 0.05){Xtotal=2.505334e+01; Xelastic= 3.912679e+00;}
|
||||
// Gaussian parametrization of
|
||||
// elastic scattering amplitude assumed
|
||||
SetAvaragePt2ofElasticScattering(1./(Xtotal*Xtotal/16./pi/Xelastic/0.3894)*GeV*GeV);
|
||||
|
||||
//G4cout<<"AvaragePt2ofElasticScattering "<<GetAvaragePt2ofElasticScattering()<<G4endl;
|
||||
//----------- Parameters of excitations ---------------------------------------------
|
||||
if( PDGcode > 1000 ) //------Projectile is baryon --------
|
||||
|
||||
//G4cout<<"Param ProjectilePDGcode "<<ProjectilePDGcode<<G4endl;
|
||||
if( ProjectilePDGcode > 1000 ) //------Projectile is baryon --------
|
||||
{
|
||||
SetMagQuarkExchange(1.84);//(3.63);
|
||||
SetSlopeQuarkExchange(0.7);//(1.2);
|
||||
@@ -262,7 +508,8 @@ if(std::abs(Plab-30.0) < 0.05){Xtotal=2.505334e+01; Xelastic= 3.912679e+00;}
|
||||
|
||||
SetProjMinDiffMass(1.16); // GeV
|
||||
SetProjMinNonDiffMass(1.16); // GeV
|
||||
SetProbabilityOfProjDiff(0.805*std::exp(-0.35*Ylab));// 0.5
|
||||
//G4cout<<"Param Get Min Dif "<<GetProjMinNonDiffMass()<<G4endl;
|
||||
SetProbabilityOfProjDiff(0.805*std::exp(-0.35*Ylab));// 0.5 0.805
|
||||
|
||||
SetTarMinDiffMass(1.16); // GeV
|
||||
SetTarMinNonDiffMass(1.16); // GeV
|
||||
@@ -270,27 +517,30 @@ if(std::abs(Plab-30.0) < 0.05){Xtotal=2.505334e+01; Xelastic= 3.912679e+00;}
|
||||
|
||||
SetAveragePt2(0.15); // 0.15 GeV^2
|
||||
}
|
||||
if( PDGcode < -1000 ) //------Projectile is anti_baryon --------
|
||||
else if( ProjectilePDGcode < -1000 ) //------Projectile is anti_baryon --------
|
||||
{
|
||||
SetMagQuarkExchange(0.);
|
||||
SetSlopeQuarkExchange(0.);
|
||||
SetDeltaProbAtQuarkExchange(0.);
|
||||
SetProbOfSameQuarkExchange(0.);
|
||||
|
||||
SetProjMinDiffMass(1.16); // GeV
|
||||
SetProjMinNonDiffMass(1.16); // GeV
|
||||
SetProjMinDiffMass(ProjectileMass+0.22); // GeV
|
||||
SetProjMinNonDiffMass(ProjectileMass+0.22); // GeV
|
||||
SetProbabilityOfProjDiff(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));// 0.5
|
||||
|
||||
//SetProbabilityOfProjDiff(0.5);
|
||||
//G4cout<<"PrDif "<<GetProbabilityOfProjDiff()<<" "<<1.-2.*GetProbabilityOfProjDiff()<<G4endl;
|
||||
//G4int Uzhi; G4cin>>Uzhi;
|
||||
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
|
||||
}
|
||||
else if( absPDGcode == 211 || PDGcode == 111) //------Projectile is Pion -----------
|
||||
else if( ProjectileabsPDGcode == 211 ||
|
||||
ProjectilePDGcode == 111) //------Projectile is Pion -----------
|
||||
{
|
||||
SetMagQuarkExchange(240.);
|
||||
SetSlopeQuarkExchange(2.);
|
||||
SetSlopeQuarkExchange(2.); // 2.
|
||||
SetDeltaProbAtQuarkExchange(0.56); //(0.35);
|
||||
|
||||
SetProjMinDiffMass(0.5); // GeV
|
||||
@@ -303,44 +553,49 @@ if(std::abs(Plab-30.0) < 0.05){Xtotal=2.505334e+01; Xelastic= 3.912679e+00;}
|
||||
// SetProbabilityOfTarDiff(2.6*std::exp(-0.46*Ylab));
|
||||
SetProbabilityOfTarDiff(0.8*std::exp(-0.6*(Ylab-3.)));
|
||||
|
||||
SetAveragePt2(0.3); // GeV^2
|
||||
SetAveragePt2(0.15); // GeV^2 7 June 2011
|
||||
}
|
||||
else if( (absPDGcode == 321) || (PDGcode == 311) ||
|
||||
(PDGcode == 130) || (PDGcode == 310)) //Projectile is Kaon
|
||||
else if( (ProjectileabsPDGcode == 321) ||
|
||||
(ProjectileabsPDGcode == 311) ||
|
||||
(ProjectilePDGcode == 130) ||
|
||||
(ProjectilePDGcode == 310)) //Projectile is Kaon
|
||||
{
|
||||
// Must be corrected, taken from PiN
|
||||
SetMagQuarkExchange(120.);
|
||||
SetSlopeQuarkExchange(2.0);
|
||||
SetMagQuarkExchange(40.);
|
||||
SetSlopeQuarkExchange(2.25);
|
||||
SetDeltaProbAtQuarkExchange(0.6);
|
||||
//SetMagQuarkExchange(0.);
|
||||
//SetSlopeQuarkExchange(0.);
|
||||
//SetDeltaProbAtQuarkExchange(0.);
|
||||
|
||||
SetProjMinDiffMass(0.7); // GeV 1.1
|
||||
SetProjMinNonDiffMass(0.7); // GeV
|
||||
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.);
|
||||
|
||||
SetTarMinDiffMass(1.1); // GeV
|
||||
SetTarMinNonDiffMass(1.1); // GeV
|
||||
SetProbabilityOfTarDiff(0.85*std::pow(s/GeV/GeV,-0.5)); // 40/32 X-dif/X-inel
|
||||
SetProbabilityOfTarDiff(0.45*std::pow(s/GeV/GeV,-0.5)); // 40/32 X-dif/X-inel
|
||||
|
||||
SetAveragePt2(0.3); // GeV^2
|
||||
SetAveragePt2(0.15); // GeV^2 7 June 2011
|
||||
}
|
||||
else //------Projectile is undefined,
|
||||
//------Nucleon assumed
|
||||
{
|
||||
SetMagQuarkExchange(3.5);
|
||||
SetSlopeQuarkExchange(1.0);
|
||||
SetDeltaProbAtQuarkExchange(0.1);
|
||||
SetMagQuarkExchange(1.85); // 7 June 2011
|
||||
SetSlopeQuarkExchange(0.7); // 7 June 2011
|
||||
SetDeltaProbAtQuarkExchange(0.); // 7 June 2011
|
||||
|
||||
SetProjMinDiffMass((particle->GetPDGMass()+160.*MeV)/GeV);
|
||||
SetProjMinNonDiffMass((particle->GetPDGMass()+160.*MeV)/GeV);
|
||||
SetProbabilityOfProjDiff(0.95*std::pow(s/GeV/GeV,-0.35)); // 40/32 X-dif/X-inel
|
||||
SetProjMinDiffMass((940.+160.*MeV)/GeV); // particle->GetPDGMass()
|
||||
SetProjMinNonDiffMass((940.+160.*MeV)/GeV); // particle->GetPDGMass()
|
||||
SetProbabilityOfProjDiff(0.805*std::pow(s/GeV/GeV,-0.35)); // 40/32 X-dif/X-inel
|
||||
|
||||
SetTarMinDiffMass(1.1); // GeV
|
||||
SetTarMinNonDiffMass(1.1); // GeV
|
||||
SetProbabilityOfTarDiff(0.95*std::pow(s/GeV/GeV,-0.35)); // 40/32 X-dif/X-inel
|
||||
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.3); // GeV^2
|
||||
SetAveragePt2(0.15); // GeV^2
|
||||
}
|
||||
|
||||
//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
|
||||
@@ -349,48 +604,63 @@ if(std::abs(Plab-30.0) < 0.05){Xtotal=2.505334e+01; Xelastic= 3.912679e+00;}
|
||||
|
||||
// --------- Set parameters of nuclear destruction--------------------
|
||||
|
||||
if( absPDGcode < 1000 )
|
||||
if( ProjectileabsPDGcode < 1000 ) // Meson projectile
|
||||
{
|
||||
SetMaxNumberOfCollisions(1000.,1.); //(Plab,2.); //3.); ##############################
|
||||
SetMaxNumberOfCollisions(Plab,2.); //3.); ##############################
|
||||
SetCofNuclearDestruction(1.*std::exp(4.*(Ylab-2.1))/
|
||||
(1.+std::exp(4.*(Ylab-2.1)))); //0.62 1.0
|
||||
|
||||
// SetCofNuclearDestruction(0.); //1.0); // for meson projectile
|
||||
// SetCofNuclearDestruction(1.*std::exp(4.*(Ylab-2.1))/(1.+std::exp(4.*(Ylab-2.1))));
|
||||
//G4cout<<Ylab<<" "<<0.62*std::exp(4.*(Ylab-4.5))/(1.+std::exp(4.*(Ylab-4.5)))<<G4endl;
|
||||
//G4int Uzhi; G4cin>>Uzhi;
|
||||
SetR2ofNuclearDestruction(1.5*fermi*fermi);
|
||||
|
||||
// SetMaxNumberOfCollisions(Plab,2.); //4.); // ##############################
|
||||
|
||||
SetCofNuclearDestruction(1.*std::exp(4.*(Ylab-2.1))/(1.+std::exp(4.*(Ylab-2.1)))); //0.62 1.0
|
||||
//------------------------------------------
|
||||
// SetDofNuclearDestruction(0.4);
|
||||
// SetPt2ofNuclearDestruction(0.17*GeV*GeV);
|
||||
// SetMaxPt2ofNuclearDestruction(1.0*GeV*GeV);
|
||||
|
||||
// SetExcitationEnergyPerWoundedNucleon(100*MeV);
|
||||
SetDofNuclearDestruction(0.4);
|
||||
SetPt2ofNuclearDestruction((0.035+
|
||||
0.04*std::exp(4.*(Ylab-2.5))/(1.+std::exp(4.*(Ylab-2.5))))*GeV*GeV); //0.09
|
||||
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);
|
||||
} else // for baryon projectile
|
||||
} else if( ProjectilePDGcode < -1000 ) // for anti-baryon projectile
|
||||
{
|
||||
SetMaxNumberOfCollisions(Plab,2.); //4.); // ##############################
|
||||
//G4cout<<"Nucl destruct Anti Bar"<<G4endl;
|
||||
|
||||
SetCofNuclearDestruction(1.*std::exp(4.*(Ylab-2.1))/(1.+std::exp(4.*(Ylab-2.1)))); //0.62 1.0
|
||||
//G4cout<<Ylab<<" "<<0.62*std::exp(4.*(Ylab-2.1))/(1.+std::exp(4.*(Ylab-2.1)))<<G4endl;
|
||||
//G4int Uzhi; G4cin>>Uzhi;
|
||||
SetMaxNumberOfCollisions(Plab,2.); //3.); ##############################
|
||||
SetCofNuclearDestruction(1.*std::exp(4.*(Ylab-2.1))/
|
||||
(1.+std::exp(4.*(Ylab-2.1)))); //0.62 1.0
|
||||
|
||||
SetR2ofNuclearDestruction(1.5*fermi*fermi);
|
||||
|
||||
SetDofNuclearDestruction(0.4);
|
||||
SetPt2ofNuclearDestruction((0.035+
|
||||
0.04*std::exp(4.*(Ylab-2.5))/(1.+std::exp(4.*(Ylab-2.5))))*GeV*GeV); //0.09
|
||||
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);
|
||||
|
||||
if(Plab < 2.) // 2 GeV/c
|
||||
{ // For slow anti-baryon we have to garanty putting on mass-shell
|
||||
SetCofNuclearDestruction(0.);
|
||||
SetR2ofNuclearDestruction(1.5*fermi*fermi);
|
||||
SetDofNuclearDestruction(0.01);
|
||||
SetPt2ofNuclearDestruction(0.035*GeV*GeV);
|
||||
SetMaxPt2ofNuclearDestruction(0.04*GeV*GeV);
|
||||
// SetExcitationEnergyPerWoundedNucleon(0.); // ?????
|
||||
}
|
||||
} else // Projectile baryon assumed
|
||||
{
|
||||
SetMaxNumberOfCollisions(Plab,2.); //3.); ##############################
|
||||
SetCofNuclearDestruction(1.*std::exp(4.*(Ylab-2.1))/
|
||||
(1.+std::exp(4.*(Ylab-2.1)))); //0.62 1.0
|
||||
|
||||
SetR2ofNuclearDestruction(1.5*fermi*fermi);
|
||||
|
||||
SetDofNuclearDestruction(0.4);
|
||||
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);
|
||||
}
|
||||
|
||||
SetR2ofNuclearDestruction(1.5*fermi*fermi);
|
||||
|
||||
//SetCofNuclearDestruction(0.47*std::exp(2.*(Ylab-2.5))/(1.+std::exp(2.*(Ylab-2.5))));
|
||||
//SetPt2ofNuclearDestruction((0.035+0.1*std::exp(4.*(Ylab-3.))/(1.+std::exp(4.*(Ylab-3.))))*GeV*GeV);
|
||||
|
||||
@@ -412,11 +682,14 @@ if(std::abs(Plab-30.0) < 0.05){Xtotal=2.505334e+01; Xelastic= 3.912679e+00;}
|
||||
//SetAveragePt2(0.3); //(0.15);
|
||||
//SetAvaragePt2ofElasticScattering(0.);
|
||||
|
||||
//SetMaxNumberOfCollisions(4.*(Plab+0.01),Plab); //6.); // ##############################
|
||||
//SetCofNuclearDestruction(0.2); //(0.4);
|
||||
//SetMaxNumberOfCollisions(Plab,6.); //(4.*(Plab+0.01),Plab); //6.); // ##########
|
||||
//SetAveragePt2(0.15);
|
||||
//G4cout<<"Cnd "<<GetCofNuclearDestruction()<<G4endl;
|
||||
//SetCofNuclearDestruction(0.4);// (0.2); //(0.4);
|
||||
//SetExcitationEnergyPerWoundedNucleon(0.*MeV); //(75.*MeV);
|
||||
//SetDofNuclearDestruction(0.4); //(0.4);
|
||||
//SetPt2ofNuclearDestruction(0.1*GeV*GeV); //(0.168*GeV*GeV);
|
||||
|
||||
//SetDofNuclearDestruction(0.);
|
||||
//SetPt2ofNuclearDestruction(0.*GeV*GeV); //(0.168*GeV*GeV);
|
||||
//G4cout<<"Pt2 "<<GetPt2ofNuclearDestruction()/GeV/GeV<<G4endl;
|
||||
//G4int Uzhi; G4cin>>Uzhi;
|
||||
}
|
||||
//**********************************************************************************************
|
||||
|
||||
+169
-34
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4FTFParticipants.cc,v 1.17 2010/09/20 15:50:46 vuzhinsk Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
// $Id: G4FTFParticipants.cc,v 1.18 2010/12/07 10:42:40 vuzhinsk Exp $
|
||||
// GEANT4 tag $Name: $
|
||||
//
|
||||
// ------------------------------------------------------------
|
||||
// GEANT 4 class implementation file
|
||||
@@ -35,6 +35,8 @@
|
||||
// class finding colliding particles in FTFPartonStringModel
|
||||
// Changed in a part by V. Uzhinsky in oder to put in correcpondence
|
||||
// with original FRITIOF mode. November - December 2006.
|
||||
// Ajusted for (anti) nucleus - nucleus interactions by V. Uzhinsky.
|
||||
// (February 2011)
|
||||
// ------------------------------------------------------------
|
||||
|
||||
#include "G4FTFParameters.hh" // Uzhi 29.03.08
|
||||
@@ -43,66 +45,90 @@
|
||||
#include "G4VSplitableHadron.hh"
|
||||
#include "Randomize.hh"
|
||||
#include <utility> // Uzhi 29.03.08
|
||||
|
||||
#include "G4ios.hh"
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
// Class G4FTFParticipants
|
||||
|
||||
G4FTFParticipants::G4FTFParticipants()
|
||||
{
|
||||
theProjectileNucleus=0;
|
||||
}
|
||||
|
||||
G4FTFParticipants::G4FTFParticipants(const G4FTFParticipants &): G4VParticipants()
|
||||
{
|
||||
G4Exception("G4FTFParticipants::G4FTFParticipants()","HAD_FTF_001",
|
||||
FatalException," Must not use copy ctor()");
|
||||
}
|
||||
|
||||
|
||||
G4FTFParticipants::~G4FTFParticipants()
|
||||
{
|
||||
if ( theProjectileNucleus != NULL ) delete theProjectileNucleus;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
//const G4FTFParticipants & G4FTFParticipants::operator=(const G4FTFParticipants &right)
|
||||
//{}
|
||||
void G4FTFParticipants::SetProjectileNucleus(G4V3DNucleus * aNucleus)
|
||||
{
|
||||
if (theProjectileNucleus) delete theProjectileNucleus;
|
||||
|
||||
theProjectileNucleus = aNucleus;
|
||||
}
|
||||
|
||||
G4V3DNucleus * G4FTFParticipants::GetProjectileNucleus()
|
||||
{
|
||||
return theProjectileNucleus;
|
||||
}
|
||||
|
||||
//int G4FTFParticipants::operator==(const G4FTFParticipants &right) const
|
||||
//{}
|
||||
|
||||
//int G4FTFParticipants::operator!=(const G4FTFParticipants &right) const
|
||||
//{}
|
||||
|
||||
void G4FTFParticipants::InitProjectileNucleus(G4int theA, G4int theZ)
|
||||
{
|
||||
if ( theProjectileNucleus == NULL ) theProjectileNucleus = new G4Fancy3DNucleus();
|
||||
theProjectileNucleus->Init(theA, theZ);
|
||||
theProjectileNucleus->SortNucleonsDecZ();
|
||||
}
|
||||
//-------------------------------------------------------------------------
|
||||
void G4FTFParticipants::GetList(const G4ReactionProduct &thePrimary,
|
||||
G4FTFParameters *theParameters)
|
||||
{
|
||||
|
||||
{
|
||||
//G4cout<<"Participants::GetList"<<G4endl;
|
||||
//G4cout<<"thePrimary "<<thePrimary.GetMomentum()<<G4endl;
|
||||
StartLoop(); // reset Loop over Interactions
|
||||
|
||||
for(unsigned int i=0; i<theInteractions.size(); i++) delete theInteractions[i];
|
||||
theInteractions.clear();
|
||||
|
||||
G4double deltaxy=2 * fermi; // Extra nuclear radius
|
||||
//G4cout<<"theProjectileNucleus "<<theProjectileNucleus<<G4endl;
|
||||
if(theProjectileNucleus == 0)
|
||||
{ // Hadron-nucleus or anti-baryon-nucleus interactions
|
||||
//G4cout<<"Hadron-nucleus or anti-baryon-nucleus interactions"<<G4endl;
|
||||
|
||||
G4VSplitableHadron * primarySplitable=new G4DiffractiveSplitableHadron(thePrimary);
|
||||
G4double impactX(0.), impactY(0.);
|
||||
|
||||
G4double xyradius;
|
||||
xyradius =theNucleus->GetOuterRadius() + deltaxy; // Impact parameter sampling
|
||||
// radius
|
||||
G4VSplitableHadron * primarySplitable=new G4DiffractiveSplitableHadron(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 )
|
||||
{
|
||||
std::pair<G4double, G4double> theImpactParameter;
|
||||
theImpactParameter = theNucleus->ChooseImpactXandY(xyradius);
|
||||
G4double impactX = theImpactParameter.first;
|
||||
G4double impactY = theImpactParameter.second;
|
||||
while ( theInteractions.size() == 0 )
|
||||
{
|
||||
std::pair<G4double, G4double> theImpactParameter;
|
||||
theImpactParameter = theNucleus->ChooseImpactXandY(xyradius);
|
||||
impactX = theImpactParameter.first;
|
||||
impactY = theImpactParameter.second;
|
||||
|
||||
G4ThreeVector thePosition(impactX, impactY, -DBL_MAX);
|
||||
primarySplitable->SetPosition(thePosition);
|
||||
G4ThreeVector thePosition(impactX, impactY, -DBL_MAX);
|
||||
primarySplitable->SetPosition(thePosition);
|
||||
|
||||
theNucleus->StartLoop();
|
||||
G4Nucleon * nucleon;
|
||||
theNucleus->StartLoop();
|
||||
G4Nucleon * nucleon;
|
||||
|
||||
while ( (nucleon=theNucleus->GetNextNucleon()) )
|
||||
{
|
||||
G4int TrN(0);
|
||||
while ( (nucleon=theNucleus->GetNextNucleon()) )
|
||||
{
|
||||
G4double impact2= sqr(impactX - nucleon->GetPosition().x()) +
|
||||
sqr(impactY - nucleon->GetPosition().y());
|
||||
|
||||
@@ -117,23 +143,132 @@ void G4FTFParticipants::GetList(const G4ReactionProduct &thePrimary,
|
||||
targetSplitable= new G4DiffractiveSplitableHadron(*nucleon);
|
||||
nucleon->Hit(targetSplitable);
|
||||
nucleon->SetBindingEnergy(3.*nucleon->GetBindingEnergy());
|
||||
//G4cout<<" Part nucl "<<TrN<<" "<<nucleon->Get4Momentum()<<G4endl;
|
||||
//G4cout<<" Part nucl "<<G4endl;
|
||||
targetSplitable->SetStatus(1); // It takes part in the interaction
|
||||
}
|
||||
G4InteractionContent * aInteraction =
|
||||
new G4InteractionContent(primarySplitable);
|
||||
aInteraction->SetTarget(targetSplitable);
|
||||
aInteraction->SetTargetNucleon(nucleon); // Uzhi 16.07.09
|
||||
aInteraction->SetStatus(1); // Uzhi Feb26
|
||||
theInteractions.push_back(aInteraction);
|
||||
}
|
||||
}
|
||||
TrN++;
|
||||
}
|
||||
} // end of while ( theInteractions.size() == 0 )
|
||||
|
||||
// G4cout << "Number of Hit nucleons " << theInteractions.size()<<G4endl; // entries()
|
||||
// G4cout << "Number of Hit nucleons " << theInteractions.size()
|
||||
// << "\t" << impactX/fermi << "\t"<<impactY/fermi
|
||||
// << "\t" << std::sqrt(sqr(impactX)+sqr(impactY))/fermi <<G4endl;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
return;
|
||||
} // end of if(theProjectileNucleus == 0)
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Projectile and target are nuclei
|
||||
//-------------------------------------------------------------------
|
||||
//VU G4VSplitableHadron * primarySplitable=new G4DiffractiveSplitableHadron(thePrimary);
|
||||
//G4cout<<"Prim in Part "<<primarySplitable->Get4Momentum()<<G4endl;
|
||||
//G4cout<<"Projectile and target are nuclei"<<G4endl;
|
||||
//G4cout<<thePrimary.GetMomentum()<<G4endl;
|
||||
//G4cout<<"Part Pr Tr "<<theProjectileNucleus<<" "<<theNucleus<<G4endl;
|
||||
|
||||
|
||||
G4double xyradius;
|
||||
xyradius =theProjectileNucleus->GetOuterRadius() + // Impact parameter sampling
|
||||
theNucleus->GetOuterRadius() + deltaxy;
|
||||
|
||||
G4double impactX(0.), impactY(0.);
|
||||
|
||||
while ( theInteractions.size() == 0 )
|
||||
{
|
||||
//G4cout<<"New interaction list"<<G4endl;
|
||||
std::pair<G4double, G4double> theImpactParameter;
|
||||
theImpactParameter = theNucleus->ChooseImpactXandY(xyradius);
|
||||
impactX = theImpactParameter.first;
|
||||
impactY = theImpactParameter.second;
|
||||
//G4cout<<"B "<<std::sqrt(sqr(impactX)+sqr(impactY))/fermi<<G4endl;
|
||||
|
||||
G4ThreeVector thePosition(impactX, impactY, -DBL_MAX);
|
||||
//VU primarySplitable->SetPosition(thePosition);
|
||||
|
||||
theProjectileNucleus->StartLoop();
|
||||
G4Nucleon * ProjectileNucleon;
|
||||
G4int PrNuclN(0);
|
||||
|
||||
while ( (ProjectileNucleon=theProjectileNucleus->GetNextNucleon()) )
|
||||
{
|
||||
G4VSplitableHadron * ProjectileSplitable=0;
|
||||
//G4cout<<G4endl<<"Prj N mom "<<ProjectileNucleon->Get4Momentum()<<"-------------"<<G4endl;
|
||||
theNucleus->StartLoop();
|
||||
G4Nucleon * TargetNucleon;
|
||||
|
||||
G4int TrNuclN(0);
|
||||
while ( (TargetNucleon=theNucleus->GetNextNucleon()) )
|
||||
{
|
||||
//G4cout<<"Trg N mom "<<TargetNucleon->Get4Momentum()<<G4endl;
|
||||
G4double impact2=
|
||||
sqr(impactX+ProjectileNucleon->GetPosition().x()-TargetNucleon->GetPosition().x())+
|
||||
sqr(impactY+ProjectileNucleon->GetPosition().y()-TargetNucleon->GetPosition().y());
|
||||
|
||||
G4VSplitableHadron * TargetSplitable=0;
|
||||
|
||||
if ( theParameters->GetProbabilityOfInteraction(impact2/fermi/fermi)
|
||||
> G4UniformRand() )
|
||||
{ // An Interaction has happend!
|
||||
//G4cout<<"An Interaction has happend"<<G4endl;
|
||||
//G4cout<<"PrN TrN "<<PrNuclN<<" "<<TrNuclN<<" "<<ProjectileNucleon->GetPosition().z()/fermi<<" "<<TargetNucleon->GetPosition().z()/fermi<<" "<<ProjectileNucleon->GetPosition().z()/fermi + TargetNucleon->GetPosition().z()/fermi <<G4endl;
|
||||
|
||||
if ( ! ProjectileNucleon->AreYouHit() )
|
||||
{ // Projectile nucleon was not involved until now.
|
||||
ProjectileSplitable= new G4DiffractiveSplitableHadron(*ProjectileNucleon);
|
||||
ProjectileNucleon->Hit(ProjectileSplitable);
|
||||
ProjectileNucleon->SetBindingEnergy(3.*ProjectileNucleon->GetBindingEnergy());
|
||||
ProjectileSplitable->SetStatus(1); // It takes part in the interaction
|
||||
}
|
||||
else
|
||||
{ // Projectile nucleon was involved before.
|
||||
ProjectileSplitable=ProjectileNucleon->GetSplitableHadron();
|
||||
} // End of if ( ! Projectileucleon->AreYouHit() )
|
||||
|
||||
if ( ! TargetNucleon->AreYouHit() )
|
||||
{ // Target nucleon was not involved until now
|
||||
TargetSplitable= new G4DiffractiveSplitableHadron(*TargetNucleon);
|
||||
TargetNucleon->Hit(TargetSplitable);
|
||||
TargetNucleon->SetBindingEnergy(3.*ProjectileNucleon->GetBindingEnergy());
|
||||
TargetSplitable->SetStatus(1); // It takes part in the interaction
|
||||
}
|
||||
else
|
||||
{ // Target nucleon was involved before.
|
||||
TargetSplitable=TargetNucleon->GetSplitableHadron();
|
||||
} // End of if ( ! TargetNeucleon->AreYouHit() )
|
||||
|
||||
G4InteractionContent * anInteraction =
|
||||
new G4InteractionContent(ProjectileSplitable);
|
||||
anInteraction->SetTarget(TargetSplitable);
|
||||
anInteraction->SetTargetNucleon(TargetNucleon);
|
||||
anInteraction->SetStatus(1); // Uzhi Feb26
|
||||
// anInteraction->SetInteractionTime(ProjectileNucleon->GetPosition().z()+
|
||||
// TargetNucleon->GetPosition().z());
|
||||
//G4cout<<"Z's pr tr "<<ProjectileNucleon->GetPosition().z()/fermi<<" "<<TargetNucleon->GetPosition().z()/fermi<<" "<<ProjectileNucleon->GetPosition().z()/fermi + TargetNucleon->GetPosition().z()/fermi <<G4endl;
|
||||
theInteractions.push_back(anInteraction);
|
||||
//G4cout<<"Ppr tr "<<ProjectileSplitable<<" "<<TargetSplitable<<G4endl;
|
||||
} // End of An Interaction has happend!
|
||||
TrNuclN++;
|
||||
} // End of while ( (TargetNucleon=theNucleus->GetNextNucleon()) )
|
||||
PrNuclN++;
|
||||
} // End of while ( (ProjectileNucleon=theProjectileNucleus->GetNextNucleon()) )
|
||||
} // end of while ( theInteractions.size() == 0 )
|
||||
|
||||
//std::sort(theInteractions.begin(),theInteractions.end()); // ????
|
||||
|
||||
// G4cout << "Number of primary collisions " << theInteractions.size()
|
||||
// << "\t" << impactX/fermi << "\t"<<impactY/fermi
|
||||
// << "\t" << std::sqrt(sqr(impactX)+sqr(impactY))/fermi <<G4endl;
|
||||
//G4int Uzhi; G4cin >> Uzhi;
|
||||
return;
|
||||
}
|
||||
//--------------------------------------------------------------
|
||||
|
||||
// Implementation (private) methods
|
||||
|
||||
Reference in New Issue
Block a user