Import Geant4 10.1.0 source tree
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user