Import Geant4 10.1.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-10 12:08:39 +02:00
parent 286caacf06
commit c9b32a6c0a
5770 changed files with 1050949 additions and 367105 deletions
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4eeToHadronsMultiModel.cc 66241 2012-12-13 18:34:42Z gunter $
// $Id: G4eeToHadronsMultiModel.cc 82961 2014-07-21 09:20:49Z gcosmo $
//
// -------------------------------------------------------------------
//
@@ -57,77 +57,68 @@
#include "G4ee2KChargedModel.hh"
#include "G4eeCrossSections.hh"
#include "G4Vee2hadrons.hh"
#include "G4Positron.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
using namespace std;
G4eeToHadronsMultiModel::G4eeToHadronsMultiModel(G4int ver, const G4String& mname)
: G4VEmModel(mname),
G4eeToHadronsMultiModel::G4eeToHadronsMultiModel(G4int ver,
const G4String& mname) : G4VEmModel(mname),
csFactor(1.0),
nModels(0),
verbose(ver),
isInitialised(false)
{
thKineticEnergy = DBL_MAX;
maxKineticEnergy = 1.2*GeV;
maxKineticEnergy = 4.521*GeV; //crresponding to 10TeV in lab
fParticleChange = 0;
cross = 0;
delta = 1.0*MeV; //for bin width
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
G4eeToHadronsMultiModel::~G4eeToHadronsMultiModel()
{
G4int n = models.size();
if(n>0) {
for(G4int i=0; i<n; i++) {
delete models[i];
}
}
delete cross;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void G4eeToHadronsMultiModel::Initialise(const G4ParticleDefinition*,
const G4DataVector&)
const G4DataVector& cuts)
{
if(!isInitialised) {
isInitialised = true;
//G4cout<<"###Initialise in HadronMultiModel###"<<G4endl;
cross = new G4eeCrossSections();
G4eeToTwoPiModel* m2pi = new G4eeToTwoPiModel(cross);
m2pi->SetHighEnergy(maxKineticEnergy);
AddEEModel(m2pi);
G4eeToTwoPiModel* m2pi =
new G4eeToTwoPiModel(cross,maxKineticEnergy,delta);
AddEEModel(m2pi,cuts);
G4eeTo3PiModel* m3pi1 = new G4eeTo3PiModel(cross);
m3pi1->SetHighEnergy(0.95*GeV);
AddEEModel(m3pi1);
G4eeTo3PiModel* m3pi =
new G4eeTo3PiModel(cross,maxKineticEnergy,delta);
AddEEModel(m3pi,cuts);
G4eeTo3PiModel* m3pi2 = new G4eeTo3PiModel(cross);
m3pi2->SetLowEnergy(0.95*GeV);
m3pi2->SetHighEnergy(maxKineticEnergy);
AddEEModel(m3pi2);
G4ee2KChargedModel* m2kc =
new G4ee2KChargedModel(cross,maxKineticEnergy,delta);
AddEEModel(m2kc,cuts);
G4ee2KChargedModel* m2kc = new G4ee2KChargedModel(cross);
m2kc->SetHighEnergy(maxKineticEnergy);
AddEEModel(m2kc);
G4ee2KNeutralModel* m2kn =
new G4ee2KNeutralModel(cross,maxKineticEnergy,delta);
AddEEModel(m2kn,cuts);
G4ee2KNeutralModel* m2kn = new G4ee2KNeutralModel(cross);
m2kn->SetHighEnergy(maxKineticEnergy);
AddEEModel(m2kn);
G4eeToPGammaModel* mpg1 =
new G4eeToPGammaModel(cross,"pi0",maxKineticEnergy,delta);
AddEEModel(mpg1,cuts);
G4eeToPGammaModel* mpg1 = new G4eeToPGammaModel(cross,"pi0");
mpg1->SetLowEnergy(0.7*GeV);
mpg1->SetHighEnergy(maxKineticEnergy);
AddEEModel(mpg1);
G4eeToPGammaModel* mpg2 = new G4eeToPGammaModel(cross,"eta");
mpg2->SetLowEnergy(0.7*GeV);
mpg2->SetHighEnergy(maxKineticEnergy);
AddEEModel(mpg2);
G4eeToPGammaModel* mpg2 =
new G4eeToPGammaModel(cross,"eta",maxKineticEnergy,delta);
AddEEModel(mpg2,cuts);
nModels = models.size();
@@ -137,18 +128,22 @@ void G4eeToHadronsMultiModel::Initialise(const G4ParticleDefinition*,
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void G4eeToHadronsMultiModel::AddEEModel(G4Vee2hadrons* mod)
void G4eeToHadronsMultiModel::AddEEModel(G4Vee2hadrons* mod,
const G4DataVector& cuts)
{
G4eeToHadronsModel* model = new G4eeToHadronsModel(mod, verbose);
model->SetLowEnergyLimit(LowEnergyLimit());
model->SetHighEnergyLimit(HighEnergyLimit());
models.push_back(model);
G4double elow = mod->ThresholdEnergy();
G4double elow = mod->LowEnergy();
ekinMin.push_back(elow);
if(thKineticEnergy > elow) thKineticEnergy = elow;
ekinMax.push_back(mod->HighEnergy());
if(thKineticEnergy > elow) { thKineticEnergy = elow; }
ekinMax.push_back(mod->HighEnergy());
ekinPeak.push_back(mod->PeakEnergy());
cumSum.push_back(0.0);
const G4ParticleDefinition* positron = G4Positron::Positron();
model->Initialise(positron,cuts);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -177,18 +172,22 @@ G4double G4eeToHadronsMultiModel::ComputeCrossSectionPerAtom(
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void G4eeToHadronsMultiModel::SampleSecondaries(std::vector<G4DynamicParticle*>* newp,
const G4MaterialCutsCouple* couple,
const G4DynamicParticle* dp,
G4double, G4double)
void G4eeToHadronsMultiModel::SampleSecondaries(
std::vector<G4DynamicParticle*>* newp,
const G4MaterialCutsCouple* couple,
const G4DynamicParticle* dp,
G4double, G4double)
{
G4double kinEnergy = dp->GetKineticEnergy();
if (kinEnergy > thKineticEnergy) {
G4double energy = LabToCM(kinEnergy);
if (energy > thKineticEnergy) {
G4double q = cumSum[nModels-1]*G4UniformRand();
for(G4int i=0; i<nModels; i++) {
if(q <= cumSum[i]) {
(models[i])->SampleSecondaries(newp, couple,dp);
if(newp->size() > 0) fParticleChange->ProposeTrackStatus(fStopAndKill);
if(newp->size() > 0) {
fParticleChange->ProposeTrackStatus(fStopAndKill);
}
break;
}
}
@@ -216,9 +215,11 @@ void G4eeToHadronsMultiModel::SetCrossSecFactor(G4double fac)
{
if(fac > 1.0) {
csFactor = fac;
if(verbose > 0)
G4cout << "### G4eeToHadronsMultiModel: The cross section for G4eeToHadronsMultiModel "
<< " is increased by the Factor= " << csFactor << G4endl;
if(verbose > 0) {
G4cout << "### G4eeToHadronsMultiModel: The cross section for "
<< "G4eeToHadronsMultiModel is increased by "
<< csFactor << " times" << G4endl;
}
}
}