Import Geant4 9.4.0 source tree
This commit is contained in:
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4BGGNucleonElasticXS.hh,v 1.5 2009/11/19 11:41:30 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4BGGNucleonElasticXS.hh,v 1.6 2010/10/12 06:02:09 dennis Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -54,8 +54,8 @@
|
||||
#include "G4VCrossSectionDataSet.hh"
|
||||
#include "G4ParticleDefinition.hh"
|
||||
#include "G4Element.hh"
|
||||
#include "G4HadTmpUtil.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
class G4GlauberGribovCrossSection;
|
||||
class G4NucleonNuclearCrossSection;
|
||||
@@ -73,15 +73,15 @@ public:
|
||||
G4bool IsApplicable(const G4DynamicParticle*, const G4Element*);
|
||||
|
||||
virtual
|
||||
G4bool IsZAApplicable(const G4DynamicParticle*, G4double Z, G4double A);
|
||||
G4bool IsIsoApplicable(const G4DynamicParticle*, G4int Z, G4int A);
|
||||
|
||||
virtual
|
||||
G4double GetCrossSection(const G4DynamicParticle*,
|
||||
const G4Element*, G4double aTemperature = 0.);
|
||||
|
||||
virtual
|
||||
G4double GetIsoZACrossSection(const G4DynamicParticle*, G4double /*Z*/,
|
||||
G4double /*A*/, G4double aTemperature = 0.);
|
||||
G4double GetZandACrossSection(const G4DynamicParticle*, G4int /*Z*/,
|
||||
G4int /*A*/, G4double aTemperature = 0.);
|
||||
|
||||
virtual
|
||||
void BuildPhysicsTable(const G4ParticleDefinition&);
|
||||
@@ -93,7 +93,7 @@ private:
|
||||
|
||||
void Initialise();
|
||||
|
||||
G4double CoulombFactor(G4double kinEnergy, G4double A);
|
||||
G4double CoulombFactor(G4double kinEnergy, G4int A);
|
||||
|
||||
G4double fGlauberEnergy;
|
||||
G4double fLowEnergy;
|
||||
@@ -108,36 +108,32 @@ private:
|
||||
G4bool isInitialized;
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline
|
||||
G4bool G4BGGNucleonElasticXS::IsApplicable(const G4DynamicParticle*,
|
||||
const G4Element*)
|
||||
{
|
||||
return true;
|
||||
// return IsZAApplicable(dp, elm->GetZ(), elm->GetN());
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline
|
||||
G4bool G4BGGNucleonElasticXS::IsZAApplicable(const G4DynamicParticle*,
|
||||
G4double /*Z*/, G4double/* A*/)
|
||||
G4bool G4BGGNucleonElasticXS::IsIsoApplicable(const G4DynamicParticle*,
|
||||
G4int /*Z*/, G4int/* A*/)
|
||||
{
|
||||
return true;
|
||||
// return (dp->GetDefinition() == particle);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline
|
||||
G4double G4BGGNucleonElasticXS::GetCrossSection(const G4DynamicParticle* dp,
|
||||
const G4Element* elm,
|
||||
G4double temp)
|
||||
{
|
||||
return GetIsoZACrossSection(dp, elm->GetZ(), elm->GetN(), temp);
|
||||
// return GetIsoZACrossSection(dp, elm->GetZ(), elm->GetN(), temp);
|
||||
G4int Z = G4lrint(elm->GetZ());
|
||||
G4int N = G4lrint(elm->GetN());
|
||||
return GetZandACrossSection(dp, Z, N, temp);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#endif
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4BGGNucleonInelasticXS.hh,v 1.6 2009/11/19 11:44:46 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4BGGNucleonInelasticXS.hh,v 1.7 2010/10/12 06:02:28 dennis Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -54,8 +54,8 @@
|
||||
#include "G4VCrossSectionDataSet.hh"
|
||||
#include "G4ParticleDefinition.hh"
|
||||
#include "G4Element.hh"
|
||||
#include "G4HadTmpUtil.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
class G4GlauberGribovCrossSection;
|
||||
class G4NucleonNuclearCrossSection;
|
||||
@@ -73,15 +73,15 @@ public:
|
||||
G4bool IsApplicable(const G4DynamicParticle*, const G4Element*);
|
||||
|
||||
virtual
|
||||
G4bool IsZAApplicable(const G4DynamicParticle*, G4double Z, G4double A);
|
||||
G4bool IsIsoApplicable(const G4DynamicParticle*, G4int Z, G4int A);
|
||||
|
||||
virtual
|
||||
G4double GetCrossSection(const G4DynamicParticle*,
|
||||
const G4Element*, G4double aTemperature = 0.);
|
||||
|
||||
virtual
|
||||
G4double GetIsoZACrossSection(const G4DynamicParticle*, G4double /*Z*/,
|
||||
G4double /*A*/, G4double aTemperature = 0.);
|
||||
G4double GetZandACrossSection(const G4DynamicParticle*, G4int /*Z*/,
|
||||
G4int /*A*/, G4double aTemperature = 0.);
|
||||
|
||||
virtual
|
||||
void BuildPhysicsTable(const G4ParticleDefinition&);
|
||||
@@ -93,7 +93,7 @@ private:
|
||||
|
||||
void Initialise();
|
||||
|
||||
G4double CoulombFactor(G4double kinEnergy, G4double A);
|
||||
G4double CoulombFactor(G4double kinEnergy, G4int A);
|
||||
|
||||
G4double fGlauberEnergy;
|
||||
G4double fLowEnergy;
|
||||
@@ -108,36 +108,32 @@ private:
|
||||
G4bool isInitialized;
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline
|
||||
G4bool G4BGGNucleonInelasticXS::IsApplicable(const G4DynamicParticle*,
|
||||
const G4Element*)
|
||||
{
|
||||
return true;
|
||||
// return IsZAApplicable(dp, elm->GetZ(), elm->GetN());
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline
|
||||
G4bool G4BGGNucleonInelasticXS::IsZAApplicable(const G4DynamicParticle*,
|
||||
G4double /*Z*/, G4double/* A*/)
|
||||
G4bool G4BGGNucleonInelasticXS::IsIsoApplicable(const G4DynamicParticle*,
|
||||
G4int /*Z*/, G4int/* A*/)
|
||||
{
|
||||
return false;
|
||||
// return (dp->GetDefinition() == particle);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline
|
||||
G4double G4BGGNucleonInelasticXS::GetCrossSection(const G4DynamicParticle* dp,
|
||||
const G4Element* elm,
|
||||
G4double temp)
|
||||
{
|
||||
return GetIsoZACrossSection(dp, elm->GetZ(), elm->GetN(), temp);
|
||||
G4int Z = G4lrint(elm->GetZ());
|
||||
G4int N = G4lrint(elm->GetN());
|
||||
return GetZandACrossSection(dp, Z, N, temp);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#endif
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4BGGPionElasticXS.hh,v 1.5 2009/11/19 11:46:13 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4BGGPionElasticXS.hh,v 1.7 2010/10/20 09:07:38 stesting Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -54,8 +54,8 @@
|
||||
#include "G4VCrossSectionDataSet.hh"
|
||||
#include "G4ParticleDefinition.hh"
|
||||
#include "G4Element.hh"
|
||||
#include "G4HadTmpUtil.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
class G4GlauberGribovCrossSection;
|
||||
class G4UPiNuclearCrossSection;
|
||||
@@ -72,16 +72,23 @@ public:
|
||||
virtual
|
||||
G4bool IsApplicable(const G4DynamicParticle*, const G4Element*);
|
||||
|
||||
// virtual
|
||||
// G4bool IsZAApplicable(const G4DynamicParticle*, G4double Z, G4double A);
|
||||
|
||||
virtual
|
||||
G4bool IsZAApplicable(const G4DynamicParticle*, G4double Z, G4double A);
|
||||
G4bool IsIsoApplicable(const G4DynamicParticle*, G4int Z, G4int A);
|
||||
|
||||
virtual
|
||||
G4double GetCrossSection(const G4DynamicParticle*,
|
||||
const G4Element*, G4double aTemperature = 0.);
|
||||
|
||||
// virtual
|
||||
// G4double GetIsoZACrossSection(const G4DynamicParticle*, G4double /*Z*/,
|
||||
// G4double /*A*/, G4double aTemperature = 0.);
|
||||
|
||||
virtual
|
||||
G4double GetIsoZACrossSection(const G4DynamicParticle*, G4double /*Z*/,
|
||||
G4double /*A*/, G4double aTemperature = 0.);
|
||||
G4double GetZandACrossSection(const G4DynamicParticle*, G4int /*Z*/,
|
||||
G4int /*A*/, G4double aTemperature = 0.);
|
||||
|
||||
virtual
|
||||
void BuildPhysicsTable(const G4ParticleDefinition&);
|
||||
@@ -93,7 +100,8 @@ private:
|
||||
|
||||
void Initialise();
|
||||
|
||||
G4double CoulombFactor(G4double kinEnergy, G4double A);
|
||||
// G4double CoulombFactor(G4double kinEnergy, G4double A);
|
||||
G4double CoulombFactor(G4double kinEnergy, G4int A);
|
||||
|
||||
G4double fGlauberEnergy;
|
||||
G4double fLowEnergy;
|
||||
@@ -115,29 +123,29 @@ G4bool G4BGGPionElasticXS::IsApplicable(const G4DynamicParticle*,
|
||||
const G4Element*)
|
||||
{
|
||||
return true;
|
||||
//return IsZAApplicable(dp, elm->GetZ(), elm->GetN());
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
//inline
|
||||
//G4bool G4BGGPionElasticXS::IsZAApplicable(const G4DynamicParticle*,
|
||||
// G4double /*Z*/, G4double/* A*/)
|
||||
|
||||
inline
|
||||
G4bool G4BGGPionElasticXS::IsZAApplicable(const G4DynamicParticle*,
|
||||
G4double /*Z*/, G4double/* A*/)
|
||||
G4bool G4BGGPionElasticXS::IsIsoApplicable(const G4DynamicParticle*,
|
||||
G4int /*Z*/, G4int/* A*/)
|
||||
{
|
||||
return false;
|
||||
// return (dp->GetDefinition() == particle);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline
|
||||
inline
|
||||
G4double G4BGGPionElasticXS::GetCrossSection(const G4DynamicParticle* dp,
|
||||
const G4Element* elm,
|
||||
G4double temp)
|
||||
{
|
||||
return GetIsoZACrossSection(dp, elm->GetZ(), elm->GetN(), temp);
|
||||
// return GetIsoZACrossSection(dp, elm->GetZ(), elm->GetN(), temp);
|
||||
G4int Z = G4lrint(elm->GetZ());
|
||||
G4int N = G4lrint(elm->GetN());
|
||||
return GetZandACrossSection(dp, Z, N, temp);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#endif
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4BGGPionInelasticXS.hh,v 1.5 2009/11/19 11:47:19 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4BGGPionInelasticXS.hh,v 1.6 2010/10/12 06:04:02 dennis Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -54,8 +54,8 @@
|
||||
#include "G4VCrossSectionDataSet.hh"
|
||||
#include "G4ParticleDefinition.hh"
|
||||
#include "G4Element.hh"
|
||||
#include "G4HadTmpUtil.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
class G4GlauberGribovCrossSection;
|
||||
class G4UPiNuclearCrossSection;
|
||||
@@ -72,16 +72,23 @@ public:
|
||||
virtual
|
||||
G4bool IsApplicable(const G4DynamicParticle*, const G4Element*);
|
||||
|
||||
// virtual
|
||||
// G4bool IsZAApplicable(const G4DynamicParticle*, G4double Z, G4double A);
|
||||
|
||||
virtual
|
||||
G4bool IsZAApplicable(const G4DynamicParticle*, G4double Z, G4double A);
|
||||
G4bool IsIsoApplicable(const G4DynamicParticle*, G4int Z, G4int A);
|
||||
|
||||
virtual
|
||||
G4double GetCrossSection(const G4DynamicParticle*,
|
||||
const G4Element*, G4double aTemperature = 0.);
|
||||
|
||||
// virtual
|
||||
// G4double GetIsoZACrossSection(const G4DynamicParticle*, G4double /*Z*/,
|
||||
// G4double /*A*/, G4double aTemperature = 0.);
|
||||
|
||||
virtual
|
||||
G4double GetIsoZACrossSection(const G4DynamicParticle*, G4double /*Z*/,
|
||||
G4double /*A*/, G4double aTemperature = 0.);
|
||||
G4double GetZandACrossSection(const G4DynamicParticle*, G4int /*Z*/,
|
||||
G4int /*A*/, G4double aTemperature = 0.);
|
||||
|
||||
virtual
|
||||
void BuildPhysicsTable(const G4ParticleDefinition&);
|
||||
@@ -93,7 +100,7 @@ private:
|
||||
|
||||
void Initialise();
|
||||
|
||||
G4double CoulombFactor(G4double kinEnergy, G4double A);
|
||||
G4double CoulombFactor(G4double kinEnergy, G4int A);
|
||||
|
||||
G4double fGlauberEnergy;
|
||||
G4double fLowEnergy;
|
||||
@@ -108,36 +115,32 @@ private:
|
||||
G4bool isInitialized;
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline
|
||||
G4bool G4BGGPionInelasticXS::IsApplicable(const G4DynamicParticle*,
|
||||
const G4Element*)
|
||||
{
|
||||
return true;
|
||||
// return IsZAApplicable(dp, elm->GetZ(), elm->GetN());
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline
|
||||
G4bool G4BGGPionInelasticXS::IsZAApplicable(const G4DynamicParticle*,
|
||||
G4double /*Z*/, G4double/* A*/)
|
||||
G4bool G4BGGPionInelasticXS::IsIsoApplicable(const G4DynamicParticle*,
|
||||
G4int /*Z*/, G4int/* A*/)
|
||||
{
|
||||
return false;
|
||||
// return (dp->GetDefinition() == particle);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline
|
||||
G4double G4BGGPionInelasticXS::GetCrossSection(const G4DynamicParticle* dp,
|
||||
const G4Element* elm,
|
||||
G4double temp)
|
||||
{
|
||||
return GetIsoZACrossSection(dp, elm->GetZ(), elm->GetN(), temp);
|
||||
// return GetIsoZACrossSection(dp, elm->GetZ(), elm->GetN(), temp);
|
||||
G4int Z = G4lrint(elm->GetZ());
|
||||
G4int N = G4lrint(elm->GetN());
|
||||
return GetZandACrossSection(dp, Z, N, temp);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,131 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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 anti-nucleon and anti-nucleus interactions with nuclei
|
||||
// based on Glauber approach, V. Grishine formulaes for
|
||||
// interpolations (ref. V.M.Grichine, Eur.Phys.J., C62(2009) 399;
|
||||
// NIM, B267 (2009) 2460) and our parametrization of hadron-nucleon
|
||||
// cross-sections
|
||||
//
|
||||
//
|
||||
// Created by A.Galoyan and V. Uzhinsky, 18.11.2010
|
||||
|
||||
|
||||
#ifndef G4ComponentAntiNuclNuclearXS_h
|
||||
#define G4ComponentAntiNuclNuclearXS_h
|
||||
|
||||
#include <CLHEP/Units/PhysicalConstants.h> // pi, fermi,..
|
||||
|
||||
#include "globals.hh"
|
||||
#include "G4Proton.hh"
|
||||
#include "G4AntiProton.hh"
|
||||
#include "G4AntiNeutron.hh"
|
||||
#include "G4AntiDeuteron.hh"
|
||||
#include "G4AntiHe3.hh"
|
||||
#include "G4AntiTriton.hh"
|
||||
#include "G4AntiAlpha.hh"
|
||||
#include "G4Nucleus.hh"
|
||||
|
||||
#include "G4VComponentCrossSection.hh"
|
||||
|
||||
class G4ParticleDefinition;
|
||||
|
||||
class G4ComponentAntiNuclNuclearXS : public G4VComponentCrossSection
|
||||
{
|
||||
public:
|
||||
|
||||
G4ComponentAntiNuclNuclearXS ();
|
||||
virtual ~G4ComponentAntiNuclNuclearXS ();
|
||||
|
||||
virtual
|
||||
G4double GetTotalZandACrossSection(const G4ParticleDefinition* aParticle,
|
||||
G4double kinEnergy,
|
||||
G4int Z, G4int A);
|
||||
|
||||
virtual
|
||||
G4double ComputeTotalCrossSection(const G4ParticleDefinition* aParticle,
|
||||
G4double kinEnergy,
|
||||
G4int Z, G4double A);
|
||||
|
||||
virtual
|
||||
G4double GetInelasticZandACrossSection(const G4ParticleDefinition* aParticle,
|
||||
G4double kinEnergy,
|
||||
G4int Z, G4int A);
|
||||
|
||||
virtual
|
||||
G4double ComputeInelasticCrossSection(const G4ParticleDefinition* aParticle,
|
||||
G4double kinEnergy,
|
||||
G4int Z, G4double A);
|
||||
|
||||
virtual
|
||||
G4double ComputeElasticCrossSection(const G4ParticleDefinition* aParticle,
|
||||
G4double kinEnergy,
|
||||
G4int Z, G4double A);
|
||||
|
||||
virtual
|
||||
G4double GetElasticZandACrossSection(const G4ParticleDefinition* aParticle,
|
||||
G4double kinEnergy,
|
||||
G4int Z, G4int A);
|
||||
|
||||
virtual
|
||||
void BuildPhysicsTable(const G4ParticleDefinition&)
|
||||
{}
|
||||
|
||||
virtual
|
||||
void DumpPhysicsTable(const G4ParticleDefinition&)
|
||||
{}
|
||||
|
||||
// Method for calculation of Anti-Hadron Nucleon Total Cross-section
|
||||
G4double GetAntiHadronNucleonTotCrSc(const G4ParticleDefinition* aParticle, G4double kinEnergy);
|
||||
|
||||
|
||||
// Method for calculation of Anti-Hadron Nucleon Elastic Cross-section
|
||||
G4double GetAntiHadronNucleonElCrSc(const G4ParticleDefinition* aParticle, G4double kinEnergy);
|
||||
|
||||
|
||||
private:
|
||||
|
||||
const G4double fUpperLimit;
|
||||
const G4double fLowerLimit;
|
||||
G4double fRadiusEff; // Effective Radius for AntiNucleus
|
||||
G4double fRadiusNN2; // Sqr of radius of NN collision
|
||||
|
||||
G4double fTotalXsc, fElasticXsc, fInelasticXsc;
|
||||
G4double fAntiHadronNucleonTotXsc, fAntiHadronNucleonElXsc;
|
||||
G4double Elab, S, SqrtS ;
|
||||
G4double Mn, b0, b2, SqrtS0, S0, R0; //parameters for AntiHadron-Nucleon Xsc
|
||||
|
||||
G4ParticleDefinition* theAProton;
|
||||
G4ParticleDefinition* theANeutron;
|
||||
G4ParticleDefinition* theADeuteron;
|
||||
G4ParticleDefinition* theATriton;
|
||||
G4ParticleDefinition* theAAlpha;
|
||||
G4ParticleDefinition* theAHe3;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4CrossSectionDataStore.hh,v 1.14 2009/01/24 11:54:47 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4CrossSectionDataStore.hh,v 1.15 2010/04/29 14:46:08 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04-beta-01 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -76,6 +76,9 @@ public:
|
||||
G4double GetCrossSection(const G4DynamicParticle*,
|
||||
G4double Z, G4double A, G4double aTemperature);
|
||||
|
||||
G4double GetCrossSection(const G4DynamicParticle*,
|
||||
G4int Z, G4int A, G4double aTemperature);
|
||||
|
||||
// to replace GetMicroscopicCrossSection
|
||||
G4double GetCrossSection(const G4DynamicParticle*, const G4Material*);
|
||||
|
||||
|
||||
@@ -0,0 +1,95 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4CrossSectionElastic.hh,v 1.2 2010/11/19 11:12:11 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
// GEANT4 Class header file
|
||||
//
|
||||
//
|
||||
// File name: G4CrossSectionElastic
|
||||
//
|
||||
// Author: Vladimir Ivanchenko
|
||||
//
|
||||
// Creation date: 19.11.2010
|
||||
// Modifications:
|
||||
//
|
||||
// Class Description:
|
||||
//
|
||||
// Wrapper for elastic cross section build from a component
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
|
||||
#ifndef G4CrossSectionElastic_h
|
||||
#define G4CrossSectionElastic_h 1
|
||||
|
||||
#include "globals.hh"
|
||||
#include "G4VCrossSectionDataSet.hh"
|
||||
|
||||
class G4ParticleDefinition;
|
||||
class G4VComponentCrossSection;
|
||||
|
||||
class G4CrossSectionElastic : public G4VCrossSectionDataSet
|
||||
{
|
||||
public:
|
||||
|
||||
G4CrossSectionElastic(const G4ParticleDefinition*, G4VComponentCrossSection*,
|
||||
G4int zmin = 0, G4int zmax = 256,
|
||||
G4double Emin = 0.0, G4double Emax = DBL_MAX);
|
||||
|
||||
virtual ~G4CrossSectionElastic();
|
||||
|
||||
virtual
|
||||
G4bool IsApplicable(const G4DynamicParticle*, const G4Element*);
|
||||
|
||||
virtual
|
||||
G4bool IsIsoApplicable(const G4DynamicParticle*, G4int Z, G4int A);
|
||||
|
||||
virtual
|
||||
G4double GetCrossSection(const G4DynamicParticle*,
|
||||
const G4Element*, G4double aTemperature = 0.);
|
||||
|
||||
virtual
|
||||
G4double GetZandACrossSection(const G4DynamicParticle*, G4int /*Z*/,
|
||||
G4int /*A*/, G4double aTemperature = 0.);
|
||||
|
||||
inline const G4ParticleDefinition* GetParticle() const { return particle; }
|
||||
|
||||
private:
|
||||
|
||||
G4CrossSectionElastic & operator=(const G4CrossSectionElastic &right);
|
||||
G4CrossSectionElastic(const G4CrossSectionElastic&);
|
||||
|
||||
const G4ParticleDefinition* particle;
|
||||
G4VComponentCrossSection* component;
|
||||
G4int Zmin;
|
||||
G4int Zmax;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,95 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4CrossSectionInelastic.hh,v 1.2 2010/11/19 11:12:11 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
// GEANT4 Class header file
|
||||
//
|
||||
//
|
||||
// File name: G4CrossSectionInelastic
|
||||
//
|
||||
// Author: Vladimir Ivanchenko
|
||||
//
|
||||
// Creation date: 19.11.2010
|
||||
// Modifications:
|
||||
//
|
||||
// Class Description:
|
||||
//
|
||||
// Wrapper for inelastic cross section build from a component
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
|
||||
#ifndef G4CrossSectionInelastic_h
|
||||
#define G4CrossSectionInelastic_h 1
|
||||
|
||||
#include "globals.hh"
|
||||
#include "G4VCrossSectionDataSet.hh"
|
||||
|
||||
class G4ParticleDefinition;
|
||||
class G4VComponentCrossSection;
|
||||
|
||||
class G4CrossSectionInelastic : public G4VCrossSectionDataSet
|
||||
{
|
||||
public:
|
||||
|
||||
G4CrossSectionInelastic(const G4ParticleDefinition*, G4VComponentCrossSection*,
|
||||
G4int zmin = 0, G4int zmax = 256,
|
||||
G4double Emin = 0.0, G4double Emax = DBL_MAX);
|
||||
|
||||
virtual ~G4CrossSectionInelastic();
|
||||
|
||||
virtual
|
||||
G4bool IsApplicable(const G4DynamicParticle*, const G4Element*);
|
||||
|
||||
virtual
|
||||
G4bool IsIsoApplicable(const G4DynamicParticle*, G4int Z, G4int A);
|
||||
|
||||
virtual
|
||||
G4double GetCrossSection(const G4DynamicParticle*,
|
||||
const G4Element*, G4double aTemperature = 0.);
|
||||
|
||||
virtual
|
||||
G4double GetZandACrossSection(const G4DynamicParticle*, G4int /*Z*/,
|
||||
G4int /*A*/, G4double aTemperature = 0.);
|
||||
|
||||
inline const G4ParticleDefinition* GetParticle() const { return particle; }
|
||||
|
||||
private:
|
||||
|
||||
G4CrossSectionInelastic & operator=(const G4CrossSectionInelastic &right);
|
||||
G4CrossSectionInelastic(const G4CrossSectionInelastic&);
|
||||
|
||||
const G4ParticleDefinition* particle;
|
||||
G4VComponentCrossSection* component;
|
||||
G4int Zmin;
|
||||
G4int Zmax;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,92 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4CrossSectionPairGG.hh,v 1.3 2010/11/18 11:01:01 gunter Exp $
|
||||
// $ GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
// Class G4CrossSectionPairGG
|
||||
//
|
||||
// Extend a cross section to higher energies using
|
||||
// G4GlauberGribovCrossSection at high energies.
|
||||
// Smoothly join cross section sets by scaling GG at a given
|
||||
// transition energy to match the given low energy cross section.
|
||||
//
|
||||
// Author: Gunter Folger
|
||||
// November 2010
|
||||
//
|
||||
#ifndef G4CrossSectionPairGG_h
|
||||
#define G4CrossSectionPairGG_h
|
||||
|
||||
#include "globals.hh"
|
||||
#include "G4VCrossSectionDataSet.hh"
|
||||
#include "G4ParticleDefinition.hh"
|
||||
#include "G4GlauberGribovCrossSection.hh"
|
||||
#include <valarray>
|
||||
|
||||
class G4CrossSectionPairGG : public G4VCrossSectionDataSet
|
||||
{
|
||||
private:
|
||||
G4CrossSectionPairGG();
|
||||
G4CrossSectionPairGG(const G4CrossSectionPairGG&);
|
||||
G4CrossSectionPairGG& operator=(const G4CrossSectionPairGG&);
|
||||
|
||||
public:
|
||||
|
||||
G4CrossSectionPairGG(G4VCrossSectionDataSet * low,
|
||||
// G4VCrossSectionDataSet * high,
|
||||
G4double Etransit);
|
||||
|
||||
virtual ~G4CrossSectionPairGG();
|
||||
|
||||
G4bool IsApplicable(const G4DynamicParticle* particle, const G4Element* element)
|
||||
{ return IsIsoApplicable(particle, G4lrint(element->GetZ()), G4lrint(element->GetN())); }
|
||||
|
||||
G4bool IsIsoApplicable(const G4DynamicParticle*, G4int Z, G4int N);
|
||||
|
||||
G4double GetCrossSection(const G4DynamicParticle* particle,
|
||||
const G4Element* element,
|
||||
G4double temperature)
|
||||
{ return GetZandACrossSection(particle, G4lrint(element->GetZ()),
|
||||
G4lrint(element->GetN()), temperature); }
|
||||
|
||||
G4double GetZandACrossSection(const G4DynamicParticle*, G4int Z,
|
||||
G4int A, G4double aTemperature = 0.);
|
||||
|
||||
|
||||
void BuildPhysicsTable(const G4ParticleDefinition&);
|
||||
void DumpPhysicsTable(const G4ParticleDefinition&);
|
||||
|
||||
private:
|
||||
G4VCrossSectionDataSet * theLowX;
|
||||
// G4VCrossSectionDataSet * theHighX;
|
||||
G4GlauberGribovCrossSection * theHighX;
|
||||
G4double ETransition;
|
||||
typedef std::valarray<G4double> XS_factors;
|
||||
typedef std::pair<G4ParticleDefinition *, XS_factors > ParticleXScale;
|
||||
std::vector<ParticleXScale> scale_factors;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -78,14 +78,13 @@ class G4EMDissociationCrossSection : public G4VCrossSectionDataSet
|
||||
|
||||
virtual G4bool IsApplicable (const G4DynamicParticle*, const G4Element*);
|
||||
|
||||
virtual G4bool IsZAApplicable(const G4DynamicParticle*, G4double ZZ,
|
||||
G4double AA);
|
||||
virtual G4bool IsIsoApplicable(const G4DynamicParticle*, G4int ZZ, G4int AA);
|
||||
|
||||
virtual G4double GetCrossSection (const G4DynamicParticle *,
|
||||
const G4Element *, G4double);
|
||||
|
||||
virtual G4double GetIsoZACrossSection(const G4DynamicParticle*,
|
||||
G4double ZZ, G4double AA,
|
||||
virtual G4double GetZandACrossSection(const G4DynamicParticle*,
|
||||
G4int ZZ, G4int AA,
|
||||
G4double temperature);
|
||||
|
||||
G4PhysicsFreeVector *GetCrossSectionForProjectile
|
||||
@@ -109,6 +108,5 @@ class G4EMDissociationCrossSection : public G4VCrossSectionDataSet
|
||||
G4double epsilon;
|
||||
G4double xd;
|
||||
};
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
#endif
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
//
|
||||
// GEANT4 physics class: G4ElectroNuclearCrossSection -- header file
|
||||
@@ -54,15 +54,17 @@ public:
|
||||
|
||||
G4bool IsApplicable(const G4DynamicParticle* aParticle, const G4Element* )
|
||||
{
|
||||
return IsZAApplicable(aParticle, 0., 0.);
|
||||
return IsIsoApplicable(aParticle, 0, 0);
|
||||
}
|
||||
|
||||
G4bool IsZAApplicable(const G4DynamicParticle* aParticle, G4double /*ZZ*/,
|
||||
G4double /*AA*/)
|
||||
G4bool IsIsoApplicable(const G4DynamicParticle* aParticle,
|
||||
G4int /*ZZ*/, G4int /*AA*/)
|
||||
{
|
||||
G4bool result = false;
|
||||
if( aParticle->GetDefinition()==G4Electron::ElectronDefinition()) result = true;
|
||||
if( aParticle->GetDefinition()==G4Positron::PositronDefinition()) result = true;
|
||||
if (aParticle->GetDefinition() == G4Electron::ElectronDefinition())
|
||||
result = true;
|
||||
if (aParticle->GetDefinition() == G4Positron::PositronDefinition())
|
||||
result = true;
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -70,9 +72,8 @@ public:
|
||||
G4double GetCrossSection(const G4DynamicParticle* aParticle,
|
||||
const G4Element* anElement, G4double T=0.);
|
||||
|
||||
G4double GetIsoZACrossSection(const G4DynamicParticle* aParticle,
|
||||
G4double ZZ, G4double AA, G4double T=0.);
|
||||
|
||||
G4double GetZandACrossSection(const G4DynamicParticle* aParticle,
|
||||
G4int ZZ, G4int AA, G4double T=0.);
|
||||
|
||||
G4double GetEquivalentPhotonEnergy();
|
||||
|
||||
@@ -86,7 +87,7 @@ public:
|
||||
|
||||
private:
|
||||
G4int GetFunctions(G4double a, G4double* x, G4double* y, G4double* z);
|
||||
//G4double LinearFit(G4double X, G4int N, const G4double* XN, const G4double* YN);
|
||||
|
||||
G4double ThresholdEnergy(G4int Z, G4int N);
|
||||
G4double HighEnergyJ1(G4double lE);
|
||||
G4double HighEnergyJ2(G4double lE);
|
||||
@@ -110,33 +111,46 @@ private:
|
||||
static G4double lastG; // Last value of gamma=lnE-ln(me)
|
||||
static G4double lastH; // Last value of the High energy A-dependence
|
||||
|
||||
static std::vector <G4double*> J1; // Vector of pointers to the J1 tabulated functions
|
||||
static std::vector <G4double*> J2; // Vector of pointers to the J2 tabulated functions
|
||||
static std::vector <G4double*> J3; // Vector of pointers to the J3 tabulated functions
|
||||
// Vector of pointers to the J1 tabulated functions
|
||||
static std::vector <G4double*> J1;
|
||||
|
||||
// Vector of pointers to the J2 tabulated functions
|
||||
static std::vector <G4double*> J2;
|
||||
|
||||
// Vector of pointers to the J3 tabulated functions
|
||||
static std::vector <G4double*> J3;
|
||||
};
|
||||
|
||||
inline G4double G4ElectroNuclearCrossSection::DFun(G4double x)// Parametrization of the PhotoNucCS
|
||||
|
||||
inline G4double
|
||||
G4ElectroNuclearCrossSection::DFun(G4double x)
|
||||
{
|
||||
static const G4double shd=1.0734; // HE PomShadowing(D)
|
||||
static const G4double poc=0.0375; // HE Pomeron coefficient
|
||||
static const G4double pos=16.5; // HE Pomeron shift
|
||||
static const G4double reg=.11; // HE Reggeon slope
|
||||
static const G4double mel=0.5109989; // Mass of an electron in MeV
|
||||
static const G4double lmel=std::log(mel); // Log of an electron mass
|
||||
G4double y=std::exp(x-lastG-lmel); // y for the x
|
||||
G4double flux=lastG*(2.-y*(2.-y))-1.; // flux factor
|
||||
// Parametrization of the PhotoNucCS
|
||||
static const G4double shd=1.0734; // HE PomShadowing(D)
|
||||
static const G4double poc=0.0375; // HE Pomeron coefficient
|
||||
static const G4double pos=16.5; // HE Pomeron shift
|
||||
static const G4double reg=.11; // HE Reggeon slope
|
||||
static const G4double mel=0.5109989; // Mass of an electron in MeV
|
||||
static const G4double lmel=std::log(mel); // Log of an electron mass
|
||||
G4double y=std::exp(x-lastG-lmel); // y for the x
|
||||
G4double flux=lastG*(2.-y*(2.-y))-1.; // flux factor
|
||||
return (poc*(x-pos)+shd*std::exp(-reg*x))*flux;
|
||||
}
|
||||
|
||||
inline G4double G4ElectroNuclearCrossSection::Fun(G4double x) // Integrated PhoNuc cross section
|
||||
|
||||
inline G4double
|
||||
G4ElectroNuclearCrossSection::Fun(G4double x)
|
||||
{
|
||||
// Integrated PhoNuc cross section
|
||||
G4double dlg1=lastG+lastG-1.;
|
||||
G4double lgoe=lastG/lastE;
|
||||
G4double HE2=HighEnergyJ2(x);
|
||||
return dlg1*HighEnergyJ1(x)-lgoe*(HE2+HE2-HighEnergyJ3(x)/lastE);
|
||||
}
|
||||
|
||||
inline G4double G4ElectroNuclearCrossSection::HighEnergyJ1(G4double lEn)
|
||||
|
||||
inline G4double
|
||||
G4ElectroNuclearCrossSection::HighEnergyJ1(G4double lEn)
|
||||
{
|
||||
static const G4double le=std::log(50000.); // std::log(E0)
|
||||
static const G4double le2=le*le; // std::log(E0)^2
|
||||
@@ -149,7 +163,9 @@ inline G4double G4ElectroNuclearCrossSection::HighEnergyJ1(G4double lEn)
|
||||
return ha*(lEn*lEn-le2)-ab*(lEn-le)-cd*(std::exp(-d*lEn)-ele);
|
||||
}
|
||||
|
||||
inline G4double G4ElectroNuclearCrossSection::HighEnergyJ2(G4double lEn)
|
||||
|
||||
inline G4double
|
||||
G4ElectroNuclearCrossSection::HighEnergyJ2(G4double lEn)
|
||||
{
|
||||
static const G4double e=50000.; // E0
|
||||
static const G4double le=std::log(e); // std::log(E0)
|
||||
@@ -163,7 +179,9 @@ inline G4double G4ElectroNuclearCrossSection::HighEnergyJ2(G4double lEn)
|
||||
return a*((lEn-1.)*En-le1)-ab*(En-e)+cd*(std::exp(d*lEn)-ele);
|
||||
}
|
||||
|
||||
inline G4double G4ElectroNuclearCrossSection::HighEnergyJ3(G4double lEn)
|
||||
|
||||
inline G4double
|
||||
G4ElectroNuclearCrossSection::HighEnergyJ3(G4double lEn)
|
||||
{
|
||||
static const G4double e=50000.; // E0
|
||||
static const G4double le=std::log(e); // std::log(E0)
|
||||
|
||||
@@ -30,9 +30,6 @@
|
||||
// the framework of simplified Glauber-Gribov approach
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
// 24.11.08 V. Grichine - first implementation based on G4GlauberGribovCrossSection
|
||||
//
|
||||
//
|
||||
@@ -59,7 +56,7 @@ public:
|
||||
G4bool IsApplicable(const G4DynamicParticle* aDP, const G4Element*);
|
||||
|
||||
virtual
|
||||
G4bool IsZAApplicable(const G4DynamicParticle* aDP, G4double Z, G4double A);
|
||||
G4bool IsIsoApplicable(const G4DynamicParticle* aDP, G4int Z, G4int A);
|
||||
|
||||
virtual
|
||||
G4double GetCrossSection(const G4DynamicParticle*,
|
||||
@@ -67,12 +64,12 @@ public:
|
||||
G4double aTemperature = 0.0);
|
||||
|
||||
virtual
|
||||
G4double GetIsoZACrossSection(const G4DynamicParticle*,
|
||||
G4double Z, G4double A,
|
||||
G4double GetZandACrossSection(const G4DynamicParticle*,
|
||||
G4int Z, G4int A,
|
||||
G4double aTemperature = 0.0);
|
||||
|
||||
G4double GetCoulombBarier(const G4DynamicParticle*,
|
||||
G4double Z, G4double A, G4double pR, G4double tR);
|
||||
G4double Z, G4double A, G4double pR, G4double tR);
|
||||
|
||||
virtual
|
||||
void BuildPhysicsTable(const G4ParticleDefinition&)
|
||||
@@ -86,27 +83,18 @@ public:
|
||||
G4double GetRatioQE(const G4DynamicParticle*, G4double At, G4double Zt);
|
||||
|
||||
G4double GetHadronNucleonXsc(const G4DynamicParticle*, const G4Element*);
|
||||
G4double GetHadronNucleonXsc(const G4DynamicParticle*, G4double At, G4double Zt);
|
||||
G4double GetHadronNucleonXsc(const G4DynamicParticle*, G4int At, G4int Zt);
|
||||
|
||||
G4double GetHadronNucleonXscPDG(const G4DynamicParticle*, const G4Element*);
|
||||
G4double GetHadronNucleonXscPDG(const G4DynamicParticle*, G4double At, G4double Zt);
|
||||
|
||||
// G4double GetHadronNucleonXscNS(const G4DynamicParticle*, const G4Element*);
|
||||
// G4double GetHadronNucleonXscNS(const G4DynamicParticle*,G4double At, G4double Zt);
|
||||
|
||||
G4double GetHadronNucleonXscPDG(const G4DynamicParticle*, G4int At, G4int Zt);
|
||||
G4double GetHadronNucleonXscNS(G4ParticleDefinition*,G4double pTkin, G4ParticleDefinition*);
|
||||
|
||||
// G4double GetHNinelasticXsc(const G4DynamicParticle*, const G4Element*);
|
||||
// G4double GetHNinelasticXsc(const G4DynamicParticle*, G4double At, G4double Zt);
|
||||
|
||||
G4double GetHNinelasticXscVU(const G4DynamicParticle*, G4double At, G4double Zt);
|
||||
|
||||
G4double CalculateEcmValue ( const G4double , const G4double , const G4double );
|
||||
|
||||
G4double GetHNinelasticXscVU(const G4DynamicParticle*, G4int At, G4int Zt);
|
||||
G4double CalculateEcmValue(const G4double, const G4double, const G4double);
|
||||
G4double CalcMandelstamS( const G4double , const G4double , const G4double );
|
||||
|
||||
G4double GetElasticGlauberGribov(const G4DynamicParticle*,G4double Z, G4double A);
|
||||
G4double GetInelasticGlauberGribov(const G4DynamicParticle*,G4double Z, G4double A);
|
||||
G4double GetElasticGlauberGribov(const G4DynamicParticle*,G4int Z, G4int A);
|
||||
G4double GetInelasticGlauberGribov(const G4DynamicParticle*,G4int Z, G4int A);
|
||||
|
||||
G4double GetTotalGlauberGribovXsc() { return fTotalXsc; };
|
||||
G4double GetElasticGlauberGribovXsc() { return fElasticXsc; };
|
||||
@@ -117,12 +105,10 @@ public:
|
||||
|
||||
G4double GetNucleusRadius(const G4DynamicParticle*, const G4Element*);
|
||||
|
||||
|
||||
G4double GetNucleusRadius(G4double At);
|
||||
G4double GetNucleusRadiusGG(G4double At);
|
||||
G4double GetNucleusRadiusDE(G4double At);
|
||||
|
||||
|
||||
inline void SetEnergyLowerLimit(G4double E ){fLowerLimit=E;};
|
||||
|
||||
private:
|
||||
@@ -143,24 +129,22 @@ private:
|
||||
//
|
||||
// Inlines
|
||||
|
||||
inline
|
||||
G4double G4GGNuclNuclCrossSection::GetElasticGlauberGribov(
|
||||
const G4DynamicParticle* dp, G4double Z, G4double A)
|
||||
inline G4double
|
||||
G4GGNuclNuclCrossSection::GetElasticGlauberGribov(const G4DynamicParticle* dp,
|
||||
G4int Z, G4int A)
|
||||
{
|
||||
GetIsoZACrossSection(dp, Z, A);
|
||||
GetZandACrossSection(dp, Z, A);
|
||||
return fElasticXsc;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////
|
||||
|
||||
inline
|
||||
G4double G4GGNuclNuclCrossSection::GetInelasticGlauberGribov(
|
||||
const G4DynamicParticle* dp, G4double Z, G4double A)
|
||||
inline G4double
|
||||
G4GGNuclNuclCrossSection::GetInelasticGlauberGribov(const G4DynamicParticle* dp,
|
||||
G4int Z, G4int A)
|
||||
{
|
||||
GetIsoZACrossSection(dp, Z, A);
|
||||
GetZandACrossSection(dp, Z, A);
|
||||
return fInelasticXsc;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -90,14 +90,14 @@ class G4GeneralSpaceNNCrossSection : public G4VCrossSectionDataSet
|
||||
virtual G4bool IsApplicable(const G4DynamicParticle* theProjectile,
|
||||
const G4Element* theTarget);
|
||||
|
||||
virtual G4bool IsZAApplicable(const G4DynamicParticle* theProjectile,
|
||||
G4double ZZ, G4double AA);
|
||||
virtual G4bool IsIsoApplicable(const G4DynamicParticle* theProjectile,
|
||||
G4int ZZ, G4int AA);
|
||||
|
||||
virtual G4double GetCrossSection(const G4DynamicParticle* theProjectile,
|
||||
const G4Element* theTarget, G4double theTemperature);
|
||||
|
||||
virtual G4double GetIsoZACrossSection(const G4DynamicParticle* theProjectile,
|
||||
G4double ZZ, G4double AA, G4double theTemperature);
|
||||
virtual G4double GetZandACrossSection(const G4DynamicParticle* theProjectile,
|
||||
G4int ZZ, G4int AA, G4double theTemperature);
|
||||
|
||||
virtual void BuildPhysicsTable(const G4ParticleDefinition&)
|
||||
{;}
|
||||
@@ -113,6 +113,5 @@ class G4GeneralSpaceNNCrossSection : public G4VCrossSectionDataSet
|
||||
G4TripathiCrossSection *TripathiGeneral;
|
||||
G4IonsShenCrossSection *Shen;
|
||||
};
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
#endif
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
#include "globals.hh"
|
||||
#include "G4Proton.hh"
|
||||
#include "G4Nucleus.hh"
|
||||
#include "G4HadTmpUtil.hh"
|
||||
|
||||
#include "G4VCrossSectionDataSet.hh"
|
||||
|
||||
@@ -62,7 +63,7 @@ public:
|
||||
G4bool IsApplicable(const G4DynamicParticle* aDP, const G4Element*);
|
||||
|
||||
virtual
|
||||
G4bool IsZAApplicable(const G4DynamicParticle* aDP, G4double Z, G4double A);
|
||||
G4bool IsIsoApplicable(const G4DynamicParticle* aDP, G4int Z, G4int A);
|
||||
|
||||
virtual
|
||||
G4double GetCrossSection(const G4DynamicParticle*,
|
||||
@@ -70,9 +71,9 @@ public:
|
||||
G4double aTemperature = 0.0);
|
||||
|
||||
virtual
|
||||
G4double GetIsoZACrossSection(const G4DynamicParticle*,
|
||||
G4double Z, G4double A,
|
||||
G4double aTemperature = 0.0);
|
||||
G4double GetZandACrossSection(const G4DynamicParticle*,
|
||||
G4int Z, G4int A,
|
||||
G4double aTemperature = 0.0);
|
||||
|
||||
virtual
|
||||
void BuildPhysicsTable(const G4ParticleDefinition&)
|
||||
@@ -82,28 +83,28 @@ public:
|
||||
void DumpPhysicsTable(const G4ParticleDefinition&)
|
||||
{G4cout << "G4GlauberGribovCrossSection: uses Glauber-Gribov formula"<<G4endl;}
|
||||
|
||||
G4double GetRatioSD(const G4DynamicParticle*, G4double At, G4double Zt);
|
||||
G4double GetRatioQE(const G4DynamicParticle*, G4double At, G4double Zt);
|
||||
G4double GetRatioSD(const G4DynamicParticle*, G4int At, G4int Zt);
|
||||
G4double GetRatioQE(const G4DynamicParticle*, G4int At, G4int Zt);
|
||||
|
||||
G4double GetHadronNucleonXsc(const G4DynamicParticle*, const G4Element*);
|
||||
G4double GetHadronNucleonXsc(const G4DynamicParticle*, G4double At, G4double Zt);
|
||||
G4double GetHadronNucleonXsc(const G4DynamicParticle*, G4int At, G4int Zt);
|
||||
|
||||
G4double GetHadronNucleonXscPDG(const G4DynamicParticle*, const G4Element*);
|
||||
G4double GetHadronNucleonXscPDG(const G4DynamicParticle*, G4double At, G4double Zt);
|
||||
G4double GetHadronNucleonXscPDG(const G4DynamicParticle*, G4int At, G4int Zt);
|
||||
|
||||
G4double GetHadronNucleonXscNS(const G4DynamicParticle*, const G4Element*);
|
||||
G4double GetHadronNucleonXscNS(const G4DynamicParticle*,G4double At, G4double Zt);
|
||||
G4double GetHadronNucleonXscNS(const G4DynamicParticle*, G4int At, G4int Zt);
|
||||
|
||||
G4double GetHNinelasticXsc(const G4DynamicParticle*, const G4Element*);
|
||||
G4double GetHNinelasticXsc(const G4DynamicParticle*, G4double At, G4double Zt);
|
||||
G4double GetHNinelasticXscVU(const G4DynamicParticle*, G4double At, G4double Zt);
|
||||
G4double GetHNinelasticXsc(const G4DynamicParticle*, G4int At, G4int Zt);
|
||||
G4double GetHNinelasticXscVU(const G4DynamicParticle*, G4int At, G4int Zt);
|
||||
|
||||
G4double CalculateEcmValue ( const G4double , const G4double , const G4double );
|
||||
|
||||
G4double CalcMandelstamS( const G4double , const G4double , const G4double );
|
||||
|
||||
G4double GetElasticGlauberGribov(const G4DynamicParticle*,G4double Z, G4double A);
|
||||
G4double GetInelasticGlauberGribov(const G4DynamicParticle*,G4double Z, G4double A);
|
||||
G4double GetElasticGlauberGribov(const G4DynamicParticle*, G4int Z, G4int A);
|
||||
G4double GetInelasticGlauberGribov(const G4DynamicParticle*, G4int Z, G4int A);
|
||||
|
||||
G4double GetTotalGlauberGribovXsc() { return fTotalXsc; };
|
||||
G4double GetElasticGlauberGribovXsc() { return fElasticXsc; };
|
||||
@@ -113,10 +114,10 @@ public:
|
||||
G4double GetRadiusConst() { return fRadiusConst; };
|
||||
|
||||
G4double GetNucleusRadius(const G4DynamicParticle*, const G4Element*);
|
||||
G4double GetNucleusRadius(G4double At);
|
||||
G4double GetNucleusRadius(G4int At);
|
||||
|
||||
inline G4double GetParticleBarCorTot( const G4ParticleDefinition* theParticle, G4double Z );
|
||||
inline G4double GetParticleBarCorIn( const G4ParticleDefinition* theParticle, G4double Z );
|
||||
inline G4double GetParticleBarCorTot(const G4ParticleDefinition* theParticle, G4int Z);
|
||||
inline G4double GetParticleBarCorIn(const G4ParticleDefinition* theParticle, G4int Z);
|
||||
|
||||
inline void SetEnergyLowerLimit(G4double E ){fLowerLimit=E;};
|
||||
|
||||
@@ -179,20 +180,22 @@ private:
|
||||
// Inlines
|
||||
|
||||
inline
|
||||
G4double G4GlauberGribovCrossSection::GetElasticGlauberGribov(
|
||||
const G4DynamicParticle* dp, G4double Z, G4double A)
|
||||
G4double
|
||||
G4GlauberGribovCrossSection::GetElasticGlauberGribov(const G4DynamicParticle* dp,
|
||||
G4int Z, G4int A)
|
||||
{
|
||||
GetIsoZACrossSection(dp, Z, A);
|
||||
GetZandACrossSection(dp, Z, A);
|
||||
return fElasticXsc;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////
|
||||
|
||||
inline
|
||||
G4double G4GlauberGribovCrossSection::GetInelasticGlauberGribov(
|
||||
const G4DynamicParticle* dp, G4double Z, G4double A)
|
||||
G4double
|
||||
G4GlauberGribovCrossSection::GetInelasticGlauberGribov(const G4DynamicParticle* dp,
|
||||
G4int Z, G4int A)
|
||||
{
|
||||
GetIsoZACrossSection(dp, Z, A);
|
||||
GetZandACrossSection(dp, Z, A);
|
||||
return fInelasticXsc;
|
||||
}
|
||||
|
||||
@@ -203,16 +206,14 @@ G4double G4GlauberGribovCrossSection::GetInelasticGlauberGribov(
|
||||
|
||||
|
||||
inline G4double G4GlauberGribovCrossSection::GetParticleBarCorTot(
|
||||
const G4ParticleDefinition* theParticle, G4double Z )
|
||||
const G4ParticleDefinition* theParticle, G4int Z)
|
||||
{
|
||||
G4int iZ = G4int(Z);
|
||||
|
||||
if( iZ >= 2 && iZ <= 92)
|
||||
if(Z >= 2 && Z <= 92)
|
||||
{
|
||||
if( theParticle == theProton ) return fProtonBarCorrectionTot[iZ];
|
||||
else if( theParticle == theNeutron) return fNeutronBarCorrectionTot[iZ];
|
||||
else if( theParticle == thePiPlus ) return fPionPlusBarCorrectionTot[iZ];
|
||||
else if( theParticle == thePiMinus) return fPionMinusBarCorrectionTot[iZ];
|
||||
if( theParticle == theProton ) return fProtonBarCorrectionTot[Z];
|
||||
else if( theParticle == theNeutron) return fNeutronBarCorrectionTot[Z];
|
||||
else if( theParticle == thePiPlus ) return fPionPlusBarCorrectionTot[Z];
|
||||
else if( theParticle == thePiMinus) return fPionMinusBarCorrectionTot[Z];
|
||||
else return 1.0;
|
||||
}
|
||||
else return 1.0;
|
||||
@@ -225,16 +226,14 @@ inline G4double G4GlauberGribovCrossSection::GetParticleBarCorTot(
|
||||
|
||||
|
||||
inline G4double G4GlauberGribovCrossSection::GetParticleBarCorIn(
|
||||
const G4ParticleDefinition* theParticle, G4double Z )
|
||||
const G4ParticleDefinition* theParticle, G4int Z)
|
||||
{
|
||||
G4int iZ = G4int(Z);
|
||||
|
||||
if( iZ >= 2 && iZ <= 92)
|
||||
if(Z >= 2 && Z <= 92)
|
||||
{
|
||||
if( theParticle == theProton ) return fProtonBarCorrectionIn[iZ];
|
||||
else if( theParticle == theNeutron) return fNeutronBarCorrectionIn[iZ];
|
||||
else if( theParticle == thePiPlus ) return fPionPlusBarCorrectionIn[iZ];
|
||||
else if( theParticle == thePiMinus) return fPionMinusBarCorrectionIn[iZ];
|
||||
if( theParticle == theProton ) return fProtonBarCorrectionIn[Z];
|
||||
else if( theParticle == theNeutron) return fNeutronBarCorrectionIn[Z];
|
||||
else if( theParticle == thePiPlus ) return fPionPlusBarCorrectionIn[Z];
|
||||
else if( theParticle == thePiMinus) return fPionMinusBarCorrectionIn[Z];
|
||||
else return 1.0;
|
||||
}
|
||||
else return 1.0;
|
||||
|
||||
@@ -24,7 +24,6 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
//
|
||||
// GEANT4 physics class: G4HadronCaptureDataSet -- header file
|
||||
// F.W. Jones, TRIUMF, 19-MAY-98
|
||||
//
|
||||
@@ -63,8 +62,8 @@ public:
|
||||
return theHadronCrossSections->IsApplicable(aParticle, anElement);
|
||||
}
|
||||
|
||||
G4bool IsZAApplicable(const G4DynamicParticle* aParticle,
|
||||
G4double ZZ, G4double AA)
|
||||
G4bool IsIsoApplicable(const G4DynamicParticle* aParticle,
|
||||
G4int ZZ, G4int AA)
|
||||
{
|
||||
return theHadronCrossSections->IsApplicable(aParticle, ZZ, AA);
|
||||
}
|
||||
@@ -76,9 +75,8 @@ public:
|
||||
anElement);
|
||||
}
|
||||
|
||||
G4double GetIsoZACrossSection(const G4DynamicParticle* aParticle,
|
||||
G4double ZZ, G4double AA,
|
||||
G4double /*aTemperature*/)
|
||||
G4double GetZandACrossSection(const G4DynamicParticle* aParticle,
|
||||
G4int ZZ, G4int AA, G4double /*aTemperature*/)
|
||||
{
|
||||
return theHadronCrossSections->GetCaptureCrossSection(aParticle, ZZ, AA);
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
//
|
||||
// GEANT4 Hadron physics class -- header file
|
||||
@@ -54,7 +54,7 @@
|
||||
#include "G4Element.hh"
|
||||
#include "G4VProcess.hh"
|
||||
#include "G4DynamicParticle.hh"
|
||||
//#include "G4ParticleTypes.hh"
|
||||
#include "G4HadTmpUtil.hh"
|
||||
#include "G4PionPlus.hh"
|
||||
#include "G4PionZero.hh"
|
||||
#include "G4PionMinus.hh"
|
||||
@@ -83,7 +83,6 @@
|
||||
#include "G4AntiXiMinus.hh"
|
||||
#include "G4OmegaMinus.hh"
|
||||
#include "G4AntiOmegaMinus.hh"
|
||||
//#include "G4LPhysicsFreeVector.hh"
|
||||
|
||||
|
||||
enum { TSIZE=41, NPARTS=35, NELAB=17, NCNLW=15, NFISS=21 };
|
||||
@@ -92,13 +91,13 @@ class G4HadronCrossSections
|
||||
{
|
||||
public:
|
||||
|
||||
G4HadronCrossSections() : prevParticleDefinition(0), verboseLevel(0)
|
||||
{
|
||||
}
|
||||
G4HadronCrossSections()
|
||||
: prevParticleDefinition(0), prevElement(0), lastEkx(0.),
|
||||
lastEkxPower(0.), verboseLevel(0)
|
||||
{}
|
||||
|
||||
~G4HadronCrossSections()
|
||||
{
|
||||
}
|
||||
{}
|
||||
|
||||
static G4HadronCrossSections* Instance()
|
||||
{
|
||||
@@ -121,33 +120,35 @@ public:
|
||||
G4double GetElasticCrossSection(const G4DynamicParticle*, const G4Element*);
|
||||
|
||||
G4double GetElasticCrossSection(const G4DynamicParticle*,
|
||||
G4double /*ZZ*/, G4double /*AA*/);
|
||||
G4int /*ZZ*/, G4int /*AA*/);
|
||||
|
||||
G4double GetInelasticCrossSection(const G4DynamicParticle*,
|
||||
const G4Element*);
|
||||
|
||||
G4double GetInelasticCrossSection(const G4DynamicParticle*,
|
||||
G4double /*ZZ*/, G4double /*AA*/);
|
||||
G4int /*ZZ*/, G4int /*AA*/);
|
||||
|
||||
G4double GetCaptureCrossSection(const G4DynamicParticle* aParticle,
|
||||
const G4Element* anElement)
|
||||
{
|
||||
return GetCaptureCrossSection(aParticle, anElement->GetZ(),
|
||||
anElement->GetN());
|
||||
G4int Z = G4lrint(anElement->GetZ());
|
||||
G4int A = G4lrint(anElement->GetN());
|
||||
return GetCaptureCrossSection(aParticle, Z, A);
|
||||
}
|
||||
|
||||
G4double GetCaptureCrossSection(const G4DynamicParticle*,
|
||||
G4double /*ZZ*/, G4double /*AA*/);
|
||||
G4int /*ZZ*/, G4int /*AA*/);
|
||||
|
||||
G4double GetFissionCrossSection(const G4DynamicParticle* aParticle,
|
||||
const G4Element* anElement)
|
||||
{
|
||||
return GetFissionCrossSection(aParticle, anElement->GetZ(),
|
||||
anElement->GetN());
|
||||
G4int Z = G4lrint(anElement->GetZ());
|
||||
G4int A = G4lrint(anElement->GetN());
|
||||
return GetFissionCrossSection(aParticle, Z, A);
|
||||
}
|
||||
|
||||
G4double GetFissionCrossSection(const G4DynamicParticle*,
|
||||
G4double /*ZZ*/, G4double /*AA*/);
|
||||
G4int /*ZZ*/, G4int /*AA*/);
|
||||
|
||||
|
||||
static void SetCorrectInelasticNearZero(G4bool value)
|
||||
@@ -175,7 +176,7 @@ private:
|
||||
G4int GetParticleCode(const G4DynamicParticle*);
|
||||
|
||||
void CalcScatteringCrossSections(const G4DynamicParticle*,
|
||||
G4double /*ZZ*/, G4double /*AA*/);
|
||||
G4int /*ZZ*/, G4int /*AA*/);
|
||||
|
||||
static G4HadronCrossSections* theInstance;
|
||||
|
||||
@@ -183,6 +184,7 @@ private:
|
||||
G4ParticleDefinition* prevParticleDefinition;
|
||||
G4Element* prevElement;
|
||||
G4double prevKineticEnergy;
|
||||
G4double lastEkx, lastEkxPower;
|
||||
|
||||
static G4bool correctInelasticNearZero;
|
||||
|
||||
@@ -196,7 +198,6 @@ private:
|
||||
static G4float csel[NPARTS][TSIZE];
|
||||
static G4float csin[NPARTS][TSIZE];
|
||||
|
||||
|
||||
static G4float cspiel[3][TSIZE];
|
||||
static G4float cspiin[3][TSIZE];
|
||||
|
||||
|
||||
@@ -62,8 +62,8 @@ public:
|
||||
return theHadronCrossSections->IsApplicable(aParticle, anElement);
|
||||
}
|
||||
|
||||
G4bool IsZAApplicable(const G4DynamicParticle* aParticle,
|
||||
G4double ZZ, G4double AA)
|
||||
G4bool IsIsoApplicable(const G4DynamicParticle* aParticle,
|
||||
G4int ZZ, G4int AA)
|
||||
{
|
||||
return theHadronCrossSections->IsApplicable(aParticle, ZZ, AA);
|
||||
}
|
||||
@@ -76,9 +76,9 @@ public:
|
||||
anElement);
|
||||
}
|
||||
|
||||
G4double GetIsoZACrossSection(const G4DynamicParticle* aParticle,
|
||||
G4double ZZ, G4double AA,
|
||||
G4double /*aTemperature*/)
|
||||
G4double GetZandACrossSection(const G4DynamicParticle* aParticle,
|
||||
G4int ZZ, G4int AA,
|
||||
G4double /*aTemperature*/)
|
||||
{
|
||||
return theHadronCrossSections->GetElasticCrossSection(aParticle, ZZ, AA);
|
||||
}
|
||||
|
||||
@@ -61,8 +61,8 @@ public:
|
||||
return theHadronCrossSections->IsApplicable(aParticle, anElement);
|
||||
}
|
||||
|
||||
G4bool IsZAApplicable(const G4DynamicParticle* aParticle,
|
||||
G4double ZZ, G4double AA)
|
||||
G4bool IsIsoApplicable(const G4DynamicParticle* aParticle,
|
||||
G4int ZZ, G4int AA)
|
||||
{
|
||||
return theHadronCrossSections->IsApplicable(aParticle, ZZ, AA);
|
||||
}
|
||||
@@ -75,9 +75,9 @@ public:
|
||||
anElement);
|
||||
}
|
||||
|
||||
G4double GetIsoZACrossSection(const G4DynamicParticle* aParticle,
|
||||
G4double ZZ, G4double AA,
|
||||
G4double /*aTemperature*/)
|
||||
G4double GetZandACrossSection(const G4DynamicParticle* aParticle,
|
||||
G4int ZZ, G4int AA,
|
||||
G4double /*aTemperature*/)
|
||||
{
|
||||
return theHadronCrossSections->GetFissionCrossSection(aParticle, ZZ, AA);
|
||||
}
|
||||
|
||||
@@ -62,8 +62,8 @@ public:
|
||||
}
|
||||
|
||||
|
||||
G4bool IsZAApplicable(const G4DynamicParticle* aParticle,
|
||||
G4double ZZ, G4double AA)
|
||||
G4bool IsIsoApplicable(const G4DynamicParticle* aParticle,
|
||||
G4int ZZ, G4int AA)
|
||||
{
|
||||
return theHadronCrossSections->IsApplicable(aParticle, ZZ, AA);
|
||||
}
|
||||
@@ -76,9 +76,9 @@ public:
|
||||
anElement);
|
||||
}
|
||||
|
||||
G4double GetIsoZACrossSection(const G4DynamicParticle* aParticle,
|
||||
G4double ZZ, G4double AA,
|
||||
G4double /*aTemperature*/)
|
||||
G4double GetZandACrossSection(const G4DynamicParticle* aParticle,
|
||||
G4int ZZ, G4int AA,
|
||||
G4double /*aTemperature*/)
|
||||
{
|
||||
return theHadronCrossSections->GetInelasticCrossSection(aParticle, ZZ, AA);
|
||||
}
|
||||
|
||||
@@ -30,8 +30,6 @@
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
// 14.03.07 V. Grichine - first implementation
|
||||
//
|
||||
//
|
||||
@@ -58,7 +56,7 @@ public:
|
||||
G4bool IsApplicable(const G4DynamicParticle* aDP, const G4Element*);
|
||||
|
||||
virtual
|
||||
G4bool IsZAApplicable(const G4DynamicParticle* aDP, G4double Z, G4double A);
|
||||
G4bool IsIsoApplicable(const G4DynamicParticle* aDP, G4int Z, G4int A);
|
||||
|
||||
virtual
|
||||
void DumpPhysicsTable(const G4ParticleDefinition&)
|
||||
|
||||
@@ -23,70 +23,71 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
#ifndef G4IonProtonCrossSection_h
|
||||
#define G4IonProtonCrossSection_h
|
||||
|
||||
#include "globals.hh"
|
||||
#include "G4Proton.hh"
|
||||
// Class Description
|
||||
// $Id: G4IonProtonCrossSection.hh,v 1.12 2010/10/15 21:05:10 dennis Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
// GEANT4 Class header file
|
||||
//
|
||||
// File name: G4IonProtonCrossSection
|
||||
//
|
||||
//
|
||||
// Cross-sections for ion proton scattering up to 20 GeV, getting the low
|
||||
// energy threshold behaviour right.
|
||||
// H.P. Wellisch (TRIUMF), D. Axen (British Columbia U.). 1996.
|
||||
// Published in Phys.Rev.C54:1329-1332,1996
|
||||
// Class Description - End
|
||||
//
|
||||
// Original by H.P.Wellisch 28 June 2001
|
||||
//
|
||||
// Modifications:
|
||||
// 30-07-2010 V.Ivanchenko move virtual methods to source,
|
||||
// add constructor and destructor,
|
||||
// make G4ProtonInelasticCrossSection class member,
|
||||
// fix bug in kinematics
|
||||
//
|
||||
|
||||
#ifndef G4IonProtonCrossSection_h
|
||||
#define G4IonProtonCrossSection_h 1
|
||||
|
||||
#include "G4VCrossSectionDataSet.hh"
|
||||
#include "G4ProtonInelasticCrossSection.hh"
|
||||
#include "globals.hh"
|
||||
|
||||
class G4ProtonInelasticCrossSection;
|
||||
|
||||
class G4IonProtonCrossSection : public G4VCrossSectionDataSet
|
||||
{
|
||||
public:
|
||||
public:
|
||||
|
||||
virtual
|
||||
G4bool IsZAApplicable(const G4DynamicParticle* aPart, G4double /*ZZ*/,
|
||||
G4double AA)
|
||||
{
|
||||
G4bool result = false;
|
||||
if((AA < 1.1) &&
|
||||
( aPart->GetKineticEnergy()/aPart->GetDefinition()
|
||||
->GetBaryonNumber() < 20*GeV &&
|
||||
aPart->GetDefinition()->GetBaryonNumber() > 4)
|
||||
) result = true;
|
||||
return result;
|
||||
}
|
||||
G4IonProtonCrossSection();
|
||||
|
||||
virtual
|
||||
G4bool IsApplicable(const G4DynamicParticle* aPart, const G4Element* anEle)
|
||||
{
|
||||
return IsZAApplicable(aPart, 0., anEle->GetN());
|
||||
}
|
||||
virtual ~G4IonProtonCrossSection();
|
||||
|
||||
virtual
|
||||
G4double GetCrossSection(const G4DynamicParticle* aPart,
|
||||
const G4Element*, G4double )
|
||||
{
|
||||
return GetIsoZACrossSection(aPart, 0., 0., 0.);
|
||||
}
|
||||
virtual
|
||||
G4bool IsApplicable(const G4DynamicParticle* aPart, const G4Element* anEle);
|
||||
|
||||
virtual
|
||||
G4double GetIsoZACrossSection(const G4DynamicParticle* aPart,
|
||||
G4double /*ZZ*/, G4double /*AA*/,
|
||||
G4double /*temperature*/)
|
||||
{
|
||||
G4ProtonInelasticCrossSection theForward;
|
||||
return theForward.GetCrossSection(aPart->GetKineticEnergy(),
|
||||
aPart->GetDefinition()->GetBaryonNumber(),
|
||||
aPart->GetDefinition()->GetPDGCharge());
|
||||
}
|
||||
virtual
|
||||
G4bool IsIsoApplicable(const G4DynamicParticle* aPart,
|
||||
G4int Z, G4int A);
|
||||
|
||||
virtual
|
||||
G4double GetCrossSection(const G4DynamicParticle* aPart,
|
||||
const G4Element*, G4double);
|
||||
|
||||
virtual
|
||||
G4double GetZandACrossSection(const G4DynamicParticle* aPart,
|
||||
G4int Z=1, G4int A=1, G4double T=0.);
|
||||
|
||||
virtual
|
||||
void BuildPhysicsTable(const G4ParticleDefinition&)
|
||||
{}
|
||||
virtual void BuildPhysicsTable(const G4ParticleDefinition&);
|
||||
|
||||
virtual
|
||||
void DumpPhysicsTable(const G4ParticleDefinition&)
|
||||
{G4cout << "G4IonProtonCrossSection: uses formula"<<G4endl;}
|
||||
virtual void DumpPhysicsTable(const G4ParticleDefinition&);
|
||||
|
||||
private: // Without Description
|
||||
|
||||
G4IonProtonCrossSection & operator=(const G4IonProtonCrossSection &right);
|
||||
G4IonProtonCrossSection(const G4IonProtonCrossSection&);
|
||||
|
||||
G4ProtonInelasticCrossSection* theForward;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -56,12 +56,13 @@ class G4IonsKoxCrossSection : public G4VCrossSectionDataSet
|
||||
virtual
|
||||
G4bool IsApplicable(const G4DynamicParticle* aDP, const G4Element*)
|
||||
{
|
||||
return IsZAApplicable(aDP, 0., 0.);
|
||||
return IsIsoApplicable(aDP, 0, 0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
virtual
|
||||
G4bool IsZAApplicable(const G4DynamicParticle* aDP, G4double /*ZZ*/,
|
||||
G4double /*AA*/)
|
||||
G4bool IsIsoApplicable(const G4DynamicParticle* aDP,
|
||||
G4int /*ZZ*/, G4int /*AA*/)
|
||||
{
|
||||
G4int baryonNumber = aDP->GetDefinition()->GetBaryonNumber();
|
||||
G4double kineticEnergy = aDP->GetKineticEnergy();
|
||||
@@ -70,13 +71,15 @@ class G4IonsKoxCrossSection : public G4VCrossSectionDataSet
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
virtual
|
||||
G4double GetCrossSection(const G4DynamicParticle*,
|
||||
const G4Element*, G4double aTemperature);
|
||||
|
||||
|
||||
virtual
|
||||
G4double GetIsoZACrossSection(const G4DynamicParticle*, G4double ZZ,
|
||||
G4double AA, G4double aTemperature);
|
||||
G4double GetZandACrossSection(const G4DynamicParticle*, G4int ZZ,
|
||||
G4int AA, G4double aTemperature);
|
||||
|
||||
virtual
|
||||
void BuildPhysicsTable(const G4ParticleDefinition&)
|
||||
|
||||
@@ -60,18 +60,18 @@ class G4IonsShenCrossSection : public G4VCrossSectionDataSet
|
||||
virtual
|
||||
G4bool IsApplicable(const G4DynamicParticle* aDP, const G4Element*)
|
||||
{
|
||||
return IsZAApplicable(aDP, 0., 0.);
|
||||
return IsIsoApplicable(aDP, 0, 0);
|
||||
}
|
||||
|
||||
virtual
|
||||
G4bool IsZAApplicable(const G4DynamicParticle* aDP,
|
||||
G4double /*ZZ*/, G4double /*AA*/)
|
||||
G4bool IsIsoApplicable(const G4DynamicParticle* aDP,
|
||||
G4int /*ZZ*/, G4int /*AA*/)
|
||||
{
|
||||
G4int baryonNumber = aDP->GetDefinition()->GetBaryonNumber();
|
||||
G4double kineticEnergy = aDP->GetKineticEnergy();
|
||||
if ( kineticEnergy / baryonNumber <= upperLimit )
|
||||
return true;
|
||||
return false;
|
||||
G4int baryonNumber = aDP->GetDefinition()->GetBaryonNumber();
|
||||
G4double kineticEnergy = aDP->GetKineticEnergy();
|
||||
if ( kineticEnergy / baryonNumber <= upperLimit )
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -80,8 +80,8 @@ class G4IonsShenCrossSection : public G4VCrossSectionDataSet
|
||||
const G4Element*, G4double aTemperature);
|
||||
|
||||
virtual
|
||||
G4double GetIsoZACrossSection(const G4DynamicParticle*, G4double ZZ,
|
||||
G4double AA, G4double aTemperature);
|
||||
G4double GetZandACrossSection(const G4DynamicParticle*, G4int ZZ,
|
||||
G4int AA, G4double aTemperature);
|
||||
|
||||
virtual
|
||||
void BuildPhysicsTable(const G4ParticleDefinition&)
|
||||
@@ -96,8 +96,8 @@ class G4IonsShenCrossSection : public G4VCrossSectionDataSet
|
||||
const G4double lowerLimit;
|
||||
const G4double r0;
|
||||
|
||||
G4double calEcmValue ( const G4double , const G4double , const G4double );
|
||||
G4double calCeValue ( const G4double );
|
||||
G4double calEcmValue(const G4double, const G4double, const G4double);
|
||||
G4double calCeValue(const G4double);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -53,12 +53,12 @@ class G4IonsSihverCrossSection : public G4VCrossSectionDataSet
|
||||
virtual
|
||||
G4bool IsApplicable(const G4DynamicParticle* aDP, const G4Element*)
|
||||
{
|
||||
return IsZAApplicable(aDP, 0., 0.);
|
||||
return IsIsoApplicable(aDP, 0, 0);
|
||||
}
|
||||
|
||||
virtual
|
||||
G4bool IsZAApplicable(const G4DynamicParticle* aDP, G4double /*ZZ*/,
|
||||
G4double /*AA*/)
|
||||
G4bool IsIsoApplicable(const G4DynamicParticle* aDP, G4int /*ZZ*/,
|
||||
G4int /*AA*/)
|
||||
{
|
||||
G4int BaryonNumber = aDP->GetDefinition()->GetBaryonNumber();
|
||||
G4double KineticEnergy = aDP->GetKineticEnergy();
|
||||
@@ -72,8 +72,8 @@ class G4IonsSihverCrossSection : public G4VCrossSectionDataSet
|
||||
const G4Element*, G4double aTemperature);
|
||||
|
||||
virtual
|
||||
G4double GetIsoZACrossSection(const G4DynamicParticle*, G4double ZZ,
|
||||
G4double AA, G4double aTemperature);
|
||||
G4double GetZandACrossSection(const G4DynamicParticle*, G4int ZZ,
|
||||
G4int AA, G4double aTemperature);
|
||||
|
||||
virtual
|
||||
void BuildPhysicsTable(const G4ParticleDefinition&)
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4NeutronCaptureXS.hh,v 1.1 2009/11/12 00:36:01 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4NeutronCaptureXS.hh,v 1.4 2010/10/15 22:32:40 dennis Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -37,13 +37,18 @@
|
||||
//
|
||||
// Modifications:
|
||||
//
|
||||
|
||||
|
||||
// Class Description:
|
||||
// This is a base class for neutron radiative capture cross section based on
|
||||
// data files from G4NEUTRONXSDATA data set
|
||||
// Class Description - End
|
||||
|
||||
#ifndef G4NeutronCaptureXS_h
|
||||
#define G4NeutronCaptureXS_h 1
|
||||
|
||||
#include "G4VCrossSectionDataSet.hh"
|
||||
#include "globals.hh"
|
||||
#include <vector>
|
||||
|
||||
class G4DynamicParticle;
|
||||
class G4ParticleDefinition;
|
||||
@@ -54,18 +59,15 @@ class G4NeutronCaptureXS : public G4VCrossSectionDataSet
|
||||
{
|
||||
public: // With Description
|
||||
|
||||
G4int Z;
|
||||
G4NeutronCaptureXS();
|
||||
|
||||
virtual ~G4NeutronCaptureXS();
|
||||
|
||||
// The following methods need to be implemented for each new data set.
|
||||
virtual
|
||||
G4bool IsApplicable(const G4DynamicParticle*, const G4Element*);
|
||||
|
||||
virtual
|
||||
G4bool IsZAApplicable(const G4DynamicParticle*,
|
||||
G4double /*Z*/, G4double /*A*/);
|
||||
G4bool IsIsoApplicable(const G4DynamicParticle*, G4int /*Z*/, G4int /*A*/);
|
||||
|
||||
virtual
|
||||
G4double GetCrossSection(const G4DynamicParticle*,
|
||||
@@ -78,27 +80,16 @@ public: // With Description
|
||||
virtual
|
||||
void DumpPhysicsTable(const G4ParticleDefinition&);
|
||||
|
||||
|
||||
public: // Without Description
|
||||
|
||||
inline void SetVerboseLevel(G4int value)
|
||||
{
|
||||
verboseLevel = value;
|
||||
}
|
||||
inline G4int GetVerboseLevel()
|
||||
{
|
||||
return verboseLevel;
|
||||
}
|
||||
|
||||
private: // Without Description
|
||||
private:
|
||||
|
||||
void Initialise(G4int Z, const char* = 0);
|
||||
|
||||
G4NeutronCaptureXS & operator=(const G4NeutronCaptureXS &right);
|
||||
G4NeutronCaptureXS(const G4NeutronCaptureXS&);
|
||||
|
||||
G4double emax;
|
||||
G4PhysicsVector* data[93];
|
||||
G4double emax;
|
||||
G4int maxZ;
|
||||
std::vector<G4PhysicsVector*> data;
|
||||
|
||||
G4bool isInitialized;
|
||||
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4NeutronElasticXS.hh,v 1.3 2009/11/19 11:51:46 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4NeutronElasticXS.hh,v 1.6 2010/10/15 22:32:55 dennis Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -38,35 +38,38 @@
|
||||
// Modifications:
|
||||
//
|
||||
|
||||
// Class Description:
|
||||
// This is a base class for neutron elastic hadronic cross section based on
|
||||
// data files from G4NEUTRONXSDATA data set
|
||||
// Class Description - End
|
||||
|
||||
#ifndef G4NeutronElasticXS_h
|
||||
#define G4NeutronElasticXS_h 1
|
||||
|
||||
#include "G4VCrossSectionDataSet.hh"
|
||||
#include "globals.hh"
|
||||
#include <vector>
|
||||
|
||||
class G4DynamicParticle;
|
||||
class G4ParticleDefinition;
|
||||
class G4Element;
|
||||
class G4PhysicsVector;
|
||||
class G4GlauberGribovCrossSection;
|
||||
class G4HadronNucleonXsc;
|
||||
|
||||
class G4NeutronElasticXS : public G4VCrossSectionDataSet
|
||||
{
|
||||
public: // With Description
|
||||
|
||||
G4int Z;
|
||||
G4NeutronElasticXS();
|
||||
|
||||
virtual ~G4NeutronElasticXS();
|
||||
|
||||
// The following methods need to be implemented for each new data set.
|
||||
virtual
|
||||
G4bool IsApplicable(const G4DynamicParticle*, const G4Element*);
|
||||
|
||||
virtual
|
||||
G4bool IsZAApplicable(const G4DynamicParticle*,
|
||||
G4double /*Z*/, G4double /*A*/);
|
||||
G4bool IsIsoApplicable(const G4DynamicParticle*, G4int /*Z*/, G4int /*A*/);
|
||||
|
||||
virtual
|
||||
G4double GetCrossSection(const G4DynamicParticle*,
|
||||
@@ -79,18 +82,7 @@ public: // With Description
|
||||
virtual
|
||||
void DumpPhysicsTable(const G4ParticleDefinition&);
|
||||
|
||||
public: // Without Description
|
||||
|
||||
inline void SetVerboseLevel(G4int value)
|
||||
{
|
||||
verboseLevel = value;
|
||||
}
|
||||
inline G4int GetVerboseLevel()
|
||||
{
|
||||
return verboseLevel;
|
||||
}
|
||||
|
||||
private: // Without Description
|
||||
private:
|
||||
|
||||
void Initialise(G4int Z, G4DynamicParticle* dp = 0, const char* = 0);
|
||||
|
||||
@@ -98,9 +90,13 @@ private: // Without Description
|
||||
G4NeutronElasticXS(const G4NeutronElasticXS&);
|
||||
|
||||
G4GlauberGribovCrossSection* ggXsection;
|
||||
G4HadronNucleonXsc* fNucleon;
|
||||
|
||||
G4PhysicsVector* data[93];
|
||||
G4double coeff[93];
|
||||
const G4ParticleDefinition* proton;
|
||||
|
||||
std::vector<G4PhysicsVector*> data;
|
||||
std::vector<G4double> coeff;
|
||||
G4int maxZ;
|
||||
|
||||
G4bool isInitialized;
|
||||
|
||||
|
||||
@@ -57,8 +57,8 @@ class G4NeutronInelasticCrossSection : public G4VCrossSectionDataSet
|
||||
return result;
|
||||
}
|
||||
|
||||
G4bool IsZAApplicable(const G4DynamicParticle* aPart,
|
||||
G4double ZZ, G4double /*AA*/)
|
||||
G4bool IsIsoApplicable(const G4DynamicParticle* aPart,
|
||||
G4int ZZ, G4int /*AA*/)
|
||||
{
|
||||
G4bool result = false;
|
||||
if(( aPart->GetDefinition() == G4Neutron::Neutron()) &&
|
||||
@@ -73,15 +73,16 @@ class G4NeutronInelasticCrossSection : public G4VCrossSectionDataSet
|
||||
G4double GetCrossSection(const G4DynamicParticle*,
|
||||
const G4Element*, G4double aTemperature);
|
||||
|
||||
G4double GetIsoZACrossSection(const G4DynamicParticle* aParticle,
|
||||
G4double ZZ, G4double AA,
|
||||
G4double GetZandACrossSection(const G4DynamicParticle* aParticle,
|
||||
G4int ZZ, G4int AA,
|
||||
G4double /*aTemperature*/)
|
||||
{
|
||||
return GetCrossSection(aParticle->GetKineticEnergy(), AA, ZZ);
|
||||
}
|
||||
|
||||
|
||||
G4double GetCrossSection(G4double anEnergy, G4double anA, G4double aZ);
|
||||
G4double GetCrossSection(G4double anEnergy, G4int anA, G4int aZ);
|
||||
|
||||
|
||||
virtual
|
||||
void BuildPhysicsTable(const G4ParticleDefinition&)
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4NeutronInelasticXS.hh,v 1.3 2009/11/19 11:52:27 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4NeutronInelasticXS.hh,v 1.6 2010/10/15 22:33:22 dennis Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -37,40 +37,42 @@
|
||||
//
|
||||
// Modifications:
|
||||
//
|
||||
|
||||
|
||||
// Class Description:
|
||||
// This is a base class for neutron inelastic hadronic cross section based on
|
||||
// data files from G4NEUTRONXSDATA data set
|
||||
// Class Description - End
|
||||
|
||||
#ifndef G4NeutronInelasticXS_h
|
||||
#define G4NeutronInelasticXS_h 1
|
||||
|
||||
#include "G4VCrossSectionDataSet.hh"
|
||||
#include "globals.hh"
|
||||
#include <vector>
|
||||
|
||||
class G4DynamicParticle;
|
||||
class G4ParticleDefinition;
|
||||
class G4Element;
|
||||
class G4PhysicsVector;
|
||||
class G4GlauberGribovCrossSection;
|
||||
class G4HadronNucleonXsc;
|
||||
|
||||
class G4NeutronInelasticXS : public G4VCrossSectionDataSet
|
||||
{
|
||||
public: // With Description
|
||||
public:
|
||||
|
||||
G4int Z;
|
||||
G4NeutronInelasticXS();
|
||||
|
||||
virtual ~G4NeutronInelasticXS();
|
||||
|
||||
// The following methods need to be implemented for each new data set.
|
||||
virtual
|
||||
G4bool IsApplicable(const G4DynamicParticle*, const G4Element*);
|
||||
|
||||
virtual
|
||||
G4bool IsZAApplicable(const G4DynamicParticle*,
|
||||
G4double /*Z*/, G4double /*A*/);
|
||||
G4bool IsIsoApplicable(const G4DynamicParticle*, G4int /*Z*/, G4int /*A*/);
|
||||
|
||||
virtual
|
||||
G4double GetCrossSection(const G4DynamicParticle*,
|
||||
const G4Element*,
|
||||
G4double GetCrossSection(const G4DynamicParticle*, const G4Element*,
|
||||
G4double aTemperature = 0.);
|
||||
|
||||
virtual
|
||||
@@ -79,18 +81,7 @@ public: // With Description
|
||||
virtual
|
||||
void DumpPhysicsTable(const G4ParticleDefinition&);
|
||||
|
||||
public: // Without Description
|
||||
|
||||
inline void SetVerboseLevel(G4int value)
|
||||
{
|
||||
verboseLevel = value;
|
||||
}
|
||||
inline G4int GetVerboseLevel()
|
||||
{
|
||||
return verboseLevel;
|
||||
}
|
||||
|
||||
private: // Without Description
|
||||
private:
|
||||
|
||||
void Initialise(G4int Z, G4DynamicParticle* dp = 0, const char* = 0);
|
||||
|
||||
@@ -98,9 +89,13 @@ private: // Without Description
|
||||
G4NeutronInelasticXS(const G4NeutronInelasticXS&);
|
||||
|
||||
G4GlauberGribovCrossSection* ggXsection;
|
||||
G4HadronNucleonXsc* fNucleon;
|
||||
|
||||
G4PhysicsVector* data[93];
|
||||
G4double coeff[93];
|
||||
const G4ParticleDefinition* proton;
|
||||
|
||||
std::vector<G4PhysicsVector*> data;
|
||||
std::vector<G4double> coeff;
|
||||
G4int maxZ;
|
||||
|
||||
G4bool isInitialized;
|
||||
|
||||
|
||||
@@ -51,19 +51,21 @@ public:
|
||||
G4NucleonNuclearCrossSection();
|
||||
virtual ~G4NucleonNuclearCrossSection();
|
||||
|
||||
virtual G4bool IsApplicable(const G4DynamicParticle* aParticle, const G4Element* anElement);
|
||||
virtual G4bool IsApplicable(const G4DynamicParticle* aParticle,
|
||||
const G4Element* anElement);
|
||||
|
||||
virtual G4bool IsZAApplicable(const G4DynamicParticle* aParticle, G4double Z, G4double A);
|
||||
virtual G4bool IsIsoApplicable(const G4DynamicParticle* aParticle,
|
||||
G4int Z, G4int A);
|
||||
|
||||
G4double GetCrossSection(const G4DynamicParticle* aParticle,
|
||||
const G4Element* anElement,
|
||||
G4double T=0.);
|
||||
|
||||
G4double GetIsoZACrossSection(const G4DynamicParticle* aParticle,
|
||||
G4double ZZ, G4double AA, G4double T=0. );
|
||||
G4double GetZandACrossSection(const G4DynamicParticle* aParticle,
|
||||
G4int ZZ, G4int AA, G4double T=0. );
|
||||
|
||||
G4double GetElasticCrossSection(const G4DynamicParticle* aParticle,
|
||||
G4double ZZ, G4double AA);
|
||||
G4int ZZ, G4int AA);
|
||||
|
||||
G4double GetTotalXsc() { return fTotalXsc; };
|
||||
G4double GetElasticXsc(){ return fElasticXsc; };
|
||||
@@ -189,9 +191,9 @@ std::vector< G4PiData* > thePimData;
|
||||
|
||||
inline
|
||||
G4double G4NucleonNuclearCrossSection::GetElasticCrossSection(
|
||||
const G4DynamicParticle* dp, G4double ZZ, G4double AA)
|
||||
const G4DynamicParticle* dp, G4int ZZ, G4int AA)
|
||||
{
|
||||
GetIsoZACrossSection(dp, ZZ, AA);
|
||||
GetZandACrossSection(dp, ZZ, AA);
|
||||
return fElasticXsc;
|
||||
}
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
//
|
||||
// GEANT4 physics class: G4PhotoNuclearCrossSection -- header file
|
||||
@@ -52,11 +52,11 @@ public:
|
||||
|
||||
G4bool IsApplicable(const G4DynamicParticle* particle, const G4Element* )
|
||||
{
|
||||
return IsZAApplicable(particle, 0, 0);
|
||||
return IsIsoApplicable(particle, 0, 0);
|
||||
}
|
||||
|
||||
G4bool IsZAApplicable(const G4DynamicParticle* particle,
|
||||
G4double /*ZZ*/, G4double /*AA*/)
|
||||
G4bool IsIsoApplicable(const G4DynamicParticle* particle,
|
||||
G4int /*ZZ*/, G4int /*AA*/)
|
||||
{
|
||||
G4bool result = false;
|
||||
if( particle->GetDefinition()->GetPDGEncoding()==22) result = true;
|
||||
@@ -67,9 +67,9 @@ public:
|
||||
G4double GetCrossSection(const G4DynamicParticle* particle,
|
||||
const G4Element* element, G4double temp = 0.);
|
||||
|
||||
G4double GetIsoZACrossSection(const G4DynamicParticle* particle,
|
||||
G4double ZZ, G4double AA,
|
||||
G4double /*aTemperature*/);
|
||||
|
||||
G4double GetZandACrossSection(const G4DynamicParticle* particle,
|
||||
G4int ZZ, G4int AA, G4double /*aTemperature*/);
|
||||
|
||||
|
||||
void BuildPhysicsTable(const G4ParticleDefinition&) {}
|
||||
@@ -77,12 +77,15 @@ public:
|
||||
void DumpPhysicsTable(const G4ParticleDefinition&) {}
|
||||
|
||||
private:
|
||||
G4int GetFunctions(G4double a, G4double* y, G4double* z);
|
||||
G4double EquLinearFit(G4double X, G4int N,const G4double X0,const G4double XD, const G4double* Y);
|
||||
|
||||
G4int GetFunctions(G4double a, G4double* y, G4double* z);
|
||||
G4double EquLinearFit(G4double X, G4int N, const G4double X0,
|
||||
const G4double XD, const G4double* Y);
|
||||
G4double ThresholdEnergy(G4int Z, G4int N);
|
||||
|
||||
// Body
|
||||
private:
|
||||
|
||||
static G4int lastN; // The last N of calculated nucleus
|
||||
static G4int lastZ; // The last Z of calculated nucleus
|
||||
static G4double lastSig; // Last value of the Cross Section
|
||||
@@ -92,8 +95,11 @@ private:
|
||||
static G4double lastTH; // Last value of the Energy Threshold (A-dependent)
|
||||
static G4double lastSP; // Last value of the ShadowingPomeron (A-dependent)
|
||||
|
||||
static std::vector <G4double*> GDR; // Vector of pointers to the GDRPhotonuclearCrossSection
|
||||
static std::vector <G4double*> HEN; // Vector of pointers to the HighEnPhotonuclearCrossSect
|
||||
// Vector of pointers to the GDRPhotonuclearCrossSection
|
||||
static std::vector <G4double*> GDR;
|
||||
|
||||
// Vector of pointers to the HighEnPhotonuclearCrossSect
|
||||
static std::vector <G4double*> HEN;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -41,7 +41,8 @@ class G4PiNuclearCrossSection : public G4VCrossSectionDataSet
|
||||
G4PiNuclearCrossSection();
|
||||
virtual ~G4PiNuclearCrossSection();
|
||||
|
||||
G4bool IsApplicable(const G4DynamicParticle* aParticle, const G4Element* anElement)
|
||||
G4bool IsApplicable(const G4DynamicParticle* aParticle,
|
||||
const G4Element* anElement)
|
||||
{
|
||||
G4bool result = false;
|
||||
if(aParticle->GetDefinition() == G4PionMinus::PionMinus()) result=true;
|
||||
@@ -51,31 +52,33 @@ class G4PiNuclearCrossSection : public G4VCrossSectionDataSet
|
||||
return result;
|
||||
}
|
||||
|
||||
G4bool IsZAApplicable(const G4DynamicParticle* particle,
|
||||
G4double ZZ, G4double /*AA*/)
|
||||
G4bool
|
||||
IsIsoApplicable(const G4DynamicParticle* particle, G4int ZZ, G4int /*AA*/)
|
||||
{
|
||||
G4bool result = false;
|
||||
if(particle->GetDefinition() == G4PionMinus::PionMinus()) result=true;
|
||||
if(particle->GetDefinition() == G4PionPlus::PionPlus()) result=true;
|
||||
if(G4lrint(ZZ) == 1) result = false;
|
||||
if(ZZ == 1) result = false;
|
||||
if(particle->GetKineticEnergy() > 99.9*TeV) result=false;
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
G4double GetCrossSection(const G4DynamicParticle* particle,
|
||||
const G4Element* element,
|
||||
G4double temperature)
|
||||
{
|
||||
return GetIsoZACrossSection(particle, element->GetZ(),
|
||||
element->GetN(), temperature);
|
||||
G4int Z = G4lrint(element->GetZ());
|
||||
G4int A = G4lrint(element->GetN());
|
||||
return GetZandACrossSection(particle, Z, A, temperature);
|
||||
}
|
||||
|
||||
G4double GetIsoZACrossSection(const G4DynamicParticle* aParticle,
|
||||
G4double ZZ, G4double AA,
|
||||
G4double GetZandACrossSection(const G4DynamicParticle* aParticle,
|
||||
G4int ZZ, G4int AA,
|
||||
G4double /*aTemperature*/);
|
||||
|
||||
G4double GetTotalXsc() { return fTotalXsc; };
|
||||
G4double GetElasticXsc(){ return fElasticXsc; };
|
||||
G4double GetTotalXsc() {return fTotalXsc;};
|
||||
G4double GetElasticXsc() {return fElasticXsc;};
|
||||
|
||||
|
||||
void BuildPhysicsTable(const G4ParticleDefinition&) {}
|
||||
|
||||
@@ -55,14 +55,15 @@ class G4ProtonInelasticCrossSection : public G4VCrossSectionDataSet
|
||||
G4bool IsApplicable(const G4DynamicParticle* aPart, const G4Element* aEle)
|
||||
{
|
||||
G4bool result = false;
|
||||
if(( aPart->GetDefinition()==G4Proton::Proton()) &&
|
||||
if ( (aPart->GetDefinition()==G4Proton::Proton()) &&
|
||||
( aPart->GetKineticEnergy()<100*TeV) ) result = true;
|
||||
if(aEle->GetZ()<3) result = false;
|
||||
return result;
|
||||
}
|
||||
|
||||
G4bool IsZAApplicable(const G4DynamicParticle* aParticle,
|
||||
G4double ZZ, G4double /*AA*/)
|
||||
|
||||
G4bool
|
||||
IsIsoApplicable(const G4DynamicParticle* aParticle, G4int ZZ, G4int /*AA*/)
|
||||
{
|
||||
G4bool result = false;
|
||||
if (( aParticle->GetDefinition() == G4Proton::Proton()) &&
|
||||
@@ -71,24 +72,28 @@ class G4ProtonInelasticCrossSection : public G4VCrossSectionDataSet
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
virtual
|
||||
G4double GetCrossSection(const G4DynamicParticle*,
|
||||
const G4Element*, G4double aTemperature);
|
||||
|
||||
|
||||
G4double GetIsoZACrossSection(const G4DynamicParticle* aParticle,
|
||||
G4double ZZ, G4double AA,
|
||||
G4double /*aTemperature*/)
|
||||
G4double
|
||||
GetZandACrossSection(const G4DynamicParticle* aParticle,
|
||||
G4int ZZ, G4int AA, G4double /*aTemperature*/)
|
||||
{
|
||||
return GetCrossSection(aParticle->GetKineticEnergy(), AA, ZZ);
|
||||
}
|
||||
|
||||
|
||||
G4double GetCrossSection(G4double anEnergy, G4double anA, G4double aZ);
|
||||
G4double GetCrossSection(G4double anEnergy, G4int anA, G4int aZ);
|
||||
|
||||
|
||||
virtual
|
||||
void BuildPhysicsTable(const G4ParticleDefinition&)
|
||||
{}
|
||||
|
||||
|
||||
virtual
|
||||
void DumpPhysicsTable(const G4ParticleDefinition&)
|
||||
{G4cout << "G4ProtonInelasticCrossSection: uses formula"<<G4endl;}
|
||||
|
||||
@@ -48,15 +48,15 @@ class G4TripathiCrossSection : public G4VCrossSectionDataSet
|
||||
virtual
|
||||
G4bool IsApplicable(const G4DynamicParticle* aPart, const G4Element*)
|
||||
{
|
||||
return IsZAApplicable(aPart, 0., 0.);
|
||||
return IsIsoApplicable(aPart, 0, 0);
|
||||
}
|
||||
|
||||
virtual
|
||||
G4bool IsZAApplicable(const G4DynamicParticle* aPart, G4double /*ZZ*/,
|
||||
G4double /*AA*/)
|
||||
G4bool IsIsoApplicable(const G4DynamicParticle* aPart,
|
||||
G4int /*ZZ*/, G4int /*AA*/)
|
||||
{
|
||||
G4bool result = false;
|
||||
if(( aPart->GetDefinition()->GetBaryonNumber()>2.5) &&
|
||||
if ( (aPart->GetDefinition()->GetBaryonNumber()>2.5) &&
|
||||
( aPart->GetKineticEnergy()/aPart->GetDefinition()->GetBaryonNumber()<1*GeV) ) result = true;
|
||||
return result;
|
||||
}
|
||||
@@ -67,8 +67,8 @@ class G4TripathiCrossSection : public G4VCrossSectionDataSet
|
||||
const G4Element*, G4double aTemperature);
|
||||
|
||||
virtual
|
||||
G4double GetIsoZACrossSection(const G4DynamicParticle*, G4double ZZ,
|
||||
G4double AA, G4double aTemperature);
|
||||
G4double GetZandACrossSection(const G4DynamicParticle*, G4int ZZ,
|
||||
G4int AA, G4double aTemperature);
|
||||
|
||||
virtual
|
||||
void BuildPhysicsTable(const G4ParticleDefinition&)
|
||||
|
||||
@@ -85,15 +85,15 @@ class G4TripathiLightCrossSection : public G4VCrossSectionDataSet
|
||||
virtual G4bool IsApplicable(const G4DynamicParticle* theProjectile,
|
||||
const G4Element* theTarget);
|
||||
|
||||
virtual G4bool IsZAApplicable(const G4DynamicParticle* theProjectile,
|
||||
G4double ZZ, G4double AA);
|
||||
virtual G4bool IsIsoApplicable(const G4DynamicParticle* theProjectile,
|
||||
G4int ZZ, G4int AA);
|
||||
|
||||
virtual G4double GetCrossSection(const G4DynamicParticle* theProjectile,
|
||||
const G4Element* theTarget, G4double theTemperature);
|
||||
|
||||
virtual
|
||||
G4double GetIsoZACrossSection(const G4DynamicParticle* theProjectile,
|
||||
G4double ZZ, G4double AA,
|
||||
G4double GetZandACrossSection(const G4DynamicParticle* theProjectile,
|
||||
G4int ZZ, G4int AA,
|
||||
G4double theTemperature);
|
||||
|
||||
virtual void BuildPhysicsTable(const G4ParticleDefinition&)
|
||||
@@ -101,7 +101,7 @@ class G4TripathiLightCrossSection : public G4VCrossSectionDataSet
|
||||
|
||||
virtual void DumpPhysicsTable(const G4ParticleDefinition&)
|
||||
{G4cout << "G4TripathiLightCrossSection: uses formula"<<G4endl;}
|
||||
void SetLowEnergyCheck (G4bool);
|
||||
void SetLowEnergyCheck(G4bool);
|
||||
|
||||
private:
|
||||
G4WilsonRadius *theWilsonRadius;
|
||||
@@ -109,6 +109,5 @@ class G4TripathiLightCrossSection : public G4VCrossSectionDataSet
|
||||
G4double third;
|
||||
G4bool lowEnergyCheck;
|
||||
};
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
#endif
|
||||
|
||||
@@ -60,15 +60,15 @@ public:
|
||||
G4bool IsApplicable(const G4DynamicParticle*, const G4Element*);
|
||||
|
||||
virtual
|
||||
G4bool IsZAApplicable(const G4DynamicParticle*, G4double Z, G4double A);
|
||||
G4bool IsIsoApplicable(const G4DynamicParticle*, G4int Z, G4int A);
|
||||
|
||||
virtual
|
||||
G4double GetCrossSection(const G4DynamicParticle*,
|
||||
const G4Element*, G4double aTemperature = 0.);
|
||||
|
||||
virtual
|
||||
G4double GetIsoZACrossSection(const G4DynamicParticle*, G4double /*Z*/,
|
||||
G4double /*A*/, G4double aTemperature = 0.);
|
||||
G4double GetZandACrossSection(const G4DynamicParticle*, G4int /*Z*/,
|
||||
G4int /*A*/, G4double aTemperature = 0.);
|
||||
|
||||
virtual
|
||||
void BuildPhysicsTable(const G4ParticleDefinition&);
|
||||
|
||||
@@ -60,15 +60,15 @@ public:
|
||||
G4bool IsApplicable(const G4DynamicParticle*, const G4Element*);
|
||||
|
||||
virtual
|
||||
G4bool IsZAApplicable(const G4DynamicParticle*, G4double Z, G4double A);
|
||||
G4bool IsIsoApplicable(const G4DynamicParticle*, G4int Z, G4int A);
|
||||
|
||||
virtual
|
||||
G4double GetCrossSection(const G4DynamicParticle*,
|
||||
const G4Element*, G4double aTemperature = 0.);
|
||||
|
||||
virtual
|
||||
G4double GetIsoZACrossSection(const G4DynamicParticle*, G4double /*Z*/,
|
||||
G4double /*A*/, G4double aTemperature = 0.);
|
||||
G4double GetZandACrossSection(const G4DynamicParticle*, G4int /*Z*/,
|
||||
G4int /*A*/, G4double aTemperature = 0.);
|
||||
|
||||
virtual
|
||||
void BuildPhysicsTable(const G4ParticleDefinition&);
|
||||
@@ -89,8 +89,6 @@ private:
|
||||
G4UPiNuclearCrossSection* fUPi;
|
||||
G4HadronCrossSections* fGheisha;
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
#include "G4VCrossSectionDataSet.hh"
|
||||
#include "G4DynamicParticle.hh"
|
||||
#include "G4DataVector.hh"
|
||||
#include "G4HadTmpUtil.hh"
|
||||
#include "globals.hh"
|
||||
#include <vector>
|
||||
|
||||
@@ -56,28 +57,28 @@ public:
|
||||
const G4Element* anElement);
|
||||
|
||||
virtual
|
||||
G4bool IsZAApplicable(const G4DynamicParticle* aParticle,
|
||||
G4double Z, G4double A);
|
||||
G4bool IsIsoApplicable(const G4DynamicParticle* aParticle,
|
||||
G4int Z, G4int A);
|
||||
|
||||
virtual
|
||||
G4double GetCrossSection(const G4DynamicParticle* aParticle,
|
||||
const G4Element* anElement, G4double T=0.);
|
||||
|
||||
virtual
|
||||
G4double GetIsoZACrossSection(const G4DynamicParticle* aParticle,
|
||||
G4double Z, G4double A, G4double T=0.);
|
||||
G4double GetZandACrossSection(const G4DynamicParticle* aParticle,
|
||||
G4int Z, G4int A, G4double T=0.);
|
||||
|
||||
G4double GetElasticCrossSection(const G4DynamicParticle* aParticle,
|
||||
const G4Element* anElement);
|
||||
|
||||
G4double GetElasticCrossSection(const G4DynamicParticle* aParticle,
|
||||
G4double Z, G4double A);
|
||||
G4int Z, G4int A);
|
||||
|
||||
G4double GetInelasticCrossSection(const G4DynamicParticle* aParticle,
|
||||
const G4Element* anElement);
|
||||
|
||||
G4double GetInelasticCrossSection(const G4DynamicParticle* aParticle,
|
||||
G4double Z, G4double A);
|
||||
G4int Z, G4int A);
|
||||
|
||||
void BuildPhysicsTable(const G4ParticleDefinition&);
|
||||
|
||||
@@ -90,7 +91,7 @@ private:
|
||||
void AddDataSet(const G4String& p, const G4double* tot,
|
||||
const G4double* in, const G4double* e, G4int n);
|
||||
|
||||
G4double Interpolate(G4double Z, G4double A, G4double ekin,
|
||||
G4double Interpolate(G4int Z, G4int A, G4double ekin,
|
||||
G4PhysicsTable*);
|
||||
|
||||
G4int NZ;
|
||||
@@ -104,7 +105,7 @@ private:
|
||||
G4double aPower;
|
||||
G4double elow;
|
||||
G4double elowest;
|
||||
G4double APower[92];
|
||||
G4double APower[93];
|
||||
|
||||
const G4ParticleDefinition* piPlus;
|
||||
const G4ParticleDefinition* piMinus;
|
||||
@@ -114,28 +115,32 @@ inline G4bool G4UPiNuclearCrossSection::IsApplicable(
|
||||
const G4DynamicParticle* part,
|
||||
const G4Element* elm)
|
||||
{
|
||||
return IsZAApplicable(part, elm->GetZ(), elm->GetN());
|
||||
G4int Z = G4lrint(elm->GetZ());
|
||||
G4int A = G4lrint(elm->GetN());
|
||||
return IsIsoApplicable(part, Z, A);
|
||||
}
|
||||
|
||||
inline G4bool G4UPiNuclearCrossSection::IsZAApplicable(
|
||||
const G4DynamicParticle* part,
|
||||
G4double Z, G4double)
|
||||
inline G4bool
|
||||
G4UPiNuclearCrossSection::IsIsoApplicable(const G4DynamicParticle* part,
|
||||
G4int Z, G4int)
|
||||
{
|
||||
return ((part->GetDefinition() == piMinus ||
|
||||
part->GetDefinition() == piPlus) &&
|
||||
Z > 1.5);
|
||||
Z > 1);
|
||||
}
|
||||
|
||||
inline G4double G4UPiNuclearCrossSection::GetCrossSection(
|
||||
const G4DynamicParticle* dp,
|
||||
const G4Element* elm, G4double)
|
||||
{
|
||||
return GetInelasticCrossSection(dp, elm->GetZ(), elm->GetN());
|
||||
G4int Z = G4lrint(elm->GetZ());
|
||||
G4int A = G4lrint(elm->GetN());
|
||||
return GetInelasticCrossSection(dp, Z, A);
|
||||
}
|
||||
|
||||
inline G4double G4UPiNuclearCrossSection::GetIsoZACrossSection(
|
||||
const G4DynamicParticle* dp,
|
||||
G4double Z, G4double A, G4double)
|
||||
inline G4double
|
||||
G4UPiNuclearCrossSection::GetZandACrossSection(const G4DynamicParticle* dp,
|
||||
G4int Z, G4int A, G4double)
|
||||
{
|
||||
return GetInelasticCrossSection(dp, Z, A);
|
||||
}
|
||||
@@ -144,14 +149,18 @@ inline G4double G4UPiNuclearCrossSection::GetInelasticCrossSection(
|
||||
const G4DynamicParticle* dp,
|
||||
const G4Element* elm)
|
||||
{
|
||||
return GetInelasticCrossSection(dp, elm->GetZ(), elm->GetN());
|
||||
G4int Z = G4lrint(elm->GetZ());
|
||||
G4int A = G4lrint(elm->GetN());
|
||||
return GetInelasticCrossSection(dp, Z, A);
|
||||
}
|
||||
|
||||
inline G4double G4UPiNuclearCrossSection::GetElasticCrossSection(
|
||||
const G4DynamicParticle* dp,
|
||||
const G4Element* elm)
|
||||
{
|
||||
return GetElasticCrossSection(dp, elm->GetZ(), elm->GetN());
|
||||
G4int Z = G4lrint(elm->GetZ());
|
||||
G4int A = G4lrint(elm->GetN());
|
||||
return GetElasticCrossSection(dp, Z, A);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,205 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4VComponentCrossSection.hh,v 1.2 2010/10/24 13:04:21 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
// GEANT4 Class header file
|
||||
//
|
||||
//
|
||||
// File name: G4VComponentCrossSection
|
||||
//
|
||||
// Authors: G.Folger, V.Ivanchenko, D.Wright
|
||||
//
|
||||
// Modifications:
|
||||
//
|
||||
|
||||
//
|
||||
// Class Description
|
||||
// This is a base class for hadronic cross section data source
|
||||
// Class Description - End
|
||||
|
||||
#ifndef G4VComponentCrossSection_h
|
||||
#define G4VComponentCrossSection_h 1
|
||||
|
||||
#include "G4ParticleDefinition.hh"
|
||||
#include "G4Element.hh"
|
||||
#include "globals.hh"
|
||||
|
||||
class G4VComponentCrossSection
|
||||
{
|
||||
public: //with description
|
||||
|
||||
G4VComponentCrossSection(const G4String& nam = "");
|
||||
|
||||
virtual ~G4VComponentCrossSection();
|
||||
|
||||
inline
|
||||
G4double GetTotalCrossSection(const G4ParticleDefinition*,
|
||||
G4double kinEnergy,
|
||||
const G4Element*);
|
||||
|
||||
virtual
|
||||
G4double GetTotalZandACrossSection(const G4ParticleDefinition*,
|
||||
G4double kinEnergy,
|
||||
G4int /*Z*/, G4int /*N*/) = 0;
|
||||
|
||||
virtual
|
||||
G4double ComputeTotalCrossSection(const G4ParticleDefinition*,
|
||||
G4double kinEnergy,
|
||||
G4int /*Z*/, G4double /*N*/) = 0;
|
||||
|
||||
inline
|
||||
G4double GetInelasticCrossSection(const G4ParticleDefinition*,
|
||||
G4double kinEnergy,
|
||||
const G4Element*);
|
||||
|
||||
virtual
|
||||
G4double GetInelasticZandACrossSection(const G4ParticleDefinition*,
|
||||
G4double kinEnergy,
|
||||
G4int /*Z*/, G4int /*N*/) = 0;
|
||||
|
||||
virtual
|
||||
G4double ComputeInelasticCrossSection(const G4ParticleDefinition*,
|
||||
G4double kinEnergy,
|
||||
G4int /*Z*/, G4double /*N*/) = 0;
|
||||
|
||||
inline
|
||||
G4double GetElasticCrossSection(const G4ParticleDefinition*,
|
||||
G4double kinEnergy,
|
||||
const G4Element*);
|
||||
|
||||
virtual
|
||||
G4double GetElasticZandACrossSection(const G4ParticleDefinition*,
|
||||
G4double kinEnergy,
|
||||
G4int /*Z*/, G4int /*N*/) = 0;
|
||||
|
||||
virtual
|
||||
G4double ComputeElasticCrossSection(const G4ParticleDefinition*,
|
||||
G4double kinEnergy,
|
||||
G4int /*Z*/, G4double /*N*/) = 0;
|
||||
|
||||
virtual
|
||||
G4double ComputeQuasiElasticRatio(const G4ParticleDefinition*,
|
||||
G4double kinEnergy,
|
||||
G4int /*Z*/, G4int /*N*/);
|
||||
|
||||
virtual
|
||||
void BuildPhysicsTable(const G4ParticleDefinition&);
|
||||
|
||||
virtual
|
||||
void DumpPhysicsTable(const G4ParticleDefinition&);
|
||||
|
||||
public:
|
||||
|
||||
inline void SetVerboseLevel(G4int value);
|
||||
|
||||
inline G4int GetVerboseLevel() const;
|
||||
|
||||
inline G4double GetMinKinEnergy() const;
|
||||
|
||||
inline void SetMinKinEnergy(G4double value);
|
||||
|
||||
inline G4double GetMaxKinEnergy() const;
|
||||
|
||||
inline void SetMaxKinEnergy(G4double value);
|
||||
|
||||
inline const G4String& GetName() const;
|
||||
|
||||
private:
|
||||
|
||||
G4VComponentCrossSection & operator=(const G4VComponentCrossSection &right);
|
||||
G4VComponentCrossSection(const G4VComponentCrossSection&);
|
||||
|
||||
G4int verboseLevel;
|
||||
|
||||
G4double minKinEnergy;
|
||||
G4double maxKinEnergy;
|
||||
|
||||
const G4String name;
|
||||
};
|
||||
|
||||
inline G4double
|
||||
G4VComponentCrossSection::GetTotalCrossSection(const G4ParticleDefinition* p,
|
||||
G4double kinEnergy,
|
||||
const G4Element* elm)
|
||||
{
|
||||
return ComputeTotalCrossSection(p, kinEnergy, (G4int)elm->GetZ(), elm->GetN());
|
||||
}
|
||||
|
||||
inline G4double
|
||||
G4VComponentCrossSection::GetInelasticCrossSection(const G4ParticleDefinition* p,
|
||||
G4double kinEnergy,
|
||||
const G4Element* elm)
|
||||
{
|
||||
return ComputeInelasticCrossSection(p, kinEnergy, (G4int)elm->GetZ(), elm->GetN());
|
||||
}
|
||||
|
||||
inline G4double
|
||||
G4VComponentCrossSection::GetElasticCrossSection(const G4ParticleDefinition* p,
|
||||
G4double kinEnergy,
|
||||
const G4Element* elm)
|
||||
{
|
||||
return ComputeElasticCrossSection(p, kinEnergy, (G4int)elm->GetZ(), elm->GetN());
|
||||
}
|
||||
|
||||
inline void G4VComponentCrossSection::SetVerboseLevel(G4int value)
|
||||
{
|
||||
verboseLevel = value;
|
||||
}
|
||||
|
||||
inline G4int G4VComponentCrossSection::GetVerboseLevel() const
|
||||
{
|
||||
return verboseLevel;
|
||||
}
|
||||
|
||||
inline void G4VComponentCrossSection::SetMinKinEnergy(G4double value)
|
||||
{
|
||||
minKinEnergy = value;
|
||||
}
|
||||
|
||||
inline G4double G4VComponentCrossSection::GetMinKinEnergy() const
|
||||
{
|
||||
return minKinEnergy;
|
||||
}
|
||||
|
||||
inline void G4VComponentCrossSection::SetMaxKinEnergy(G4double value)
|
||||
{
|
||||
maxKinEnergy = value;
|
||||
}
|
||||
|
||||
inline G4double G4VComponentCrossSection::GetMaxKinEnergy() const
|
||||
{
|
||||
return maxKinEnergy;
|
||||
}
|
||||
|
||||
inline const G4String& G4VComponentCrossSection::GetName() const
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4VCrossSectionDataSet.hh,v 1.13 2009/01/24 11:54:47 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4VCrossSectionDataSet.hh,v 1.14 2010/07/05 13:39:11 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -37,6 +37,8 @@
|
||||
//
|
||||
// Modifications:
|
||||
// 23.01.2009 V.Ivanchenko move constructor and destructor to source
|
||||
// 05.07.2010 V.Ivanchenko added name, min and max energy limit and
|
||||
// corresponding access methods
|
||||
//
|
||||
|
||||
//
|
||||
@@ -57,7 +59,7 @@ class G4VCrossSectionDataSet
|
||||
{
|
||||
public: //with description
|
||||
|
||||
G4VCrossSectionDataSet();
|
||||
G4VCrossSectionDataSet(const G4String& nam = "");
|
||||
|
||||
virtual ~G4VCrossSectionDataSet();
|
||||
|
||||
@@ -68,6 +70,9 @@ public: //with description
|
||||
virtual
|
||||
G4bool IsZAApplicable(const G4DynamicParticle*, G4double /*Z*/, G4double /*A*/);
|
||||
|
||||
virtual
|
||||
G4bool IsIsoApplicable(const G4DynamicParticle*, G4int /*Z*/, G4int /*N*/);
|
||||
|
||||
virtual
|
||||
G4double GetCrossSection(const G4DynamicParticle*,
|
||||
const G4Element*,
|
||||
@@ -81,6 +86,10 @@ public: //with description
|
||||
G4double GetIsoZACrossSection(const G4DynamicParticle*, G4double /*Z*/,
|
||||
G4double /*A*/, G4double aTemperature = 0.);
|
||||
|
||||
virtual
|
||||
G4double GetZandACrossSection(const G4DynamicParticle*, G4int /*Z*/,
|
||||
G4int /*A*/, G4double aTemperature = 0.);
|
||||
|
||||
virtual
|
||||
void BuildPhysicsTable(const G4ParticleDefinition&) = 0;
|
||||
|
||||
@@ -89,19 +98,61 @@ public: //with description
|
||||
|
||||
public: // Without Description
|
||||
|
||||
inline void SetVerboseLevel(G4int value)
|
||||
{
|
||||
verboseLevel = value;
|
||||
}
|
||||
inline void SetVerboseLevel(G4int value);
|
||||
|
||||
inline G4int GetVerboseLevel()
|
||||
{
|
||||
return verboseLevel;
|
||||
}
|
||||
inline G4double GetMinKinEnergy() const;
|
||||
|
||||
inline void SetMinKinEnergy(G4double value);
|
||||
|
||||
inline G4double GetMaxKinEnergy() const;
|
||||
|
||||
inline void SetMaxKinEnergy(G4double value);
|
||||
|
||||
inline const G4String& GetName() const;
|
||||
|
||||
protected:
|
||||
|
||||
G4int verboseLevel;
|
||||
|
||||
private:
|
||||
|
||||
G4VCrossSectionDataSet & operator=(const G4VCrossSectionDataSet &right);
|
||||
G4VCrossSectionDataSet(const G4VCrossSectionDataSet&);
|
||||
|
||||
G4double minKinEnergy;
|
||||
G4double maxKinEnergy;
|
||||
|
||||
const G4String name;
|
||||
};
|
||||
|
||||
inline void G4VCrossSectionDataSet::SetVerboseLevel(G4int value)
|
||||
{
|
||||
verboseLevel = value;
|
||||
}
|
||||
|
||||
inline void G4VCrossSectionDataSet::SetMinKinEnergy(G4double value)
|
||||
{
|
||||
minKinEnergy = value;
|
||||
}
|
||||
|
||||
inline G4double G4VCrossSectionDataSet::GetMinKinEnergy() const
|
||||
{
|
||||
return minKinEnergy;
|
||||
}
|
||||
|
||||
inline void G4VCrossSectionDataSet::SetMaxKinEnergy(G4double value)
|
||||
{
|
||||
maxKinEnergy = value;
|
||||
}
|
||||
|
||||
inline G4double G4VCrossSectionDataSet::GetMaxKinEnergy() const
|
||||
{
|
||||
return maxKinEnergy;
|
||||
}
|
||||
|
||||
inline const G4String& G4VCrossSectionDataSet::GetName() const
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user