Import Geant4 10.5.0.beta source tree

This commit is contained in:
Gabriele Cosmo
2018-06-29 10:58:11 +02:00
parent fe81a77428
commit 6aa23be517
1581 changed files with 124288 additions and 83758 deletions
@@ -15,10 +15,40 @@ code and to keep track of all tags.
* Please list in reverse chronological order (last date on top)
---------------------------------------------------------------
27 February 2018 Alberto Ribon (hadr-casc-V10-03-07)
2 May 2018 Dennis Wright (hadr-casc-V10-04-04)
-------------------------------------------------
- G4ElementaryParticleCollider
methods generateSCMpionAbsorption and
generateSCMmuonAbsorption did not produce correct nucleon pairs when
pion or muon was absorbed - both methods now re-written
quantum number conservation test added to method
collide(G4InuclParticle* bullet, G4InuclParticle* target,
G4CollisionOutput& output)
20 March 2018 Julia Yarba (hadr-casc-V10-04-03)
---------------------------------------------------
- Fix implementation of nuclear_rad_2par configurable key (G4CascadeParamMessenger.cc)
6 March 2018 Dennis Wright (hadr-casc-V10-04-02)
---------------------------------------------------
- G4CascadeT11pizNChannel.cc: extend strange pair production channels to
6,7,8 and 9 body final states
27 February 2018 Alberto Ribon (hadr-casc-V10-04-01)
-----------------------------------------------------
- G4NucleiModel : replaced obsolete std::bind2nd with std::bind .
2 February 2018 Dennis Wright (hadr-casc-V10-04-00)
-----------------------------------------------------
- Add strange pair production channels to list of 6, 7, 8 and 9-body
final states in classes G4CascadeT31piNChannel and G4CascadeT33piNChannel.
Modify template values accordingly in
G4CascadePiMinusNChannel.hh
G4CascadePiMinusPChannel.hh
G4CascadePiPlusNChannel.hh
G4CascadePiPlusPChannel.hh
27 November 2017 Dennis Wright (hadr-casc-V10-03-06)
-----------------------------------------------------
- G4CascadeInterface::createBullet, G4CascadeInterface::ApplyYourself:
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4CascadePiMinusNChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
// $Id: $
#ifndef G4_CASCADE_PIMINUSN_CHANNEL_HH
#define G4_CASCADE_PIMINUSN_CHANNEL_HH
@@ -33,7 +33,7 @@
#include "G4PionNucSampler.hh"
struct G4CascadePiMinusNChannelData {
typedef G4CascadeData<30,2,7,15,24,5,6,7,8> data_t;
typedef G4CascadeData<30,2,7,15,24,33,41,47,55> data_t;
static const data_t data;
};
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4CascadePiMinusPChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
// $Id: $
#ifndef G4_CASCADE_PIMINUSP_CHANNEL_HH
#define G4_CASCADE_PIMINUSP_CHANNEL_HH
@@ -33,7 +33,7 @@
#include "G4PionNucSampler.hh"
struct G4CascadePiMinusPChannelData {
typedef G4CascadeData<30,5,13,22,31,6,7,8,9> data_t;
typedef G4CascadeData<30,5,13,22,31,39,46,51,58> data_t;
static const data_t data;
};
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4CascadePiPlusNChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
// $Id: $
#ifndef G4_CASCADE_PIPLUSN_CHANNEL_HH
#define G4_CASCADE_PIPLUSN_CHANNEL_HH
@@ -33,7 +33,7 @@
#include "G4PionNucSampler.hh"
struct G4CascadePiPlusNChannelData {
typedef G4CascadeData<30,5,13,22,31,6,7,8,9> data_t;
typedef G4CascadeData<30,5,13,22,31,39,46,51,58> data_t;
static const data_t data;
};
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4CascadePiPlusPChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
// $Id: $
#ifndef G4_CASCADE_PIPLUSP_CHANNEL_HH
#define G4_CASCADE_PIPLUSP_CHANNEL_HH
@@ -33,7 +33,7 @@
#include "G4PionNucSampler.hh"
struct G4CascadePiPlusPChannelData {
typedef G4CascadeData<30,2,7,15,24,5,6,7,8> data_t;
typedef G4CascadeData<30,2,7,15,24,33,41,47,55> data_t;
static const data_t data;
};
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4CascadePiZeroNChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
// $Id: $
#ifndef G4_CASCADE_PIZERON_CHANNEL_HH
#define G4_CASCADE_PIZERON_CHANNEL_HH
@@ -33,7 +33,7 @@
#include "G4PionNucSampler.hh"
struct G4CascadePiZeroNChannelData {
typedef G4CascadeData<30,5,13,21,30,6,7,8,9> data_t;
typedef G4CascadeData<30,5,13,22,31,39,46,51,58> data_t;
static const data_t data;
};
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4CascadePiZeroPChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
// $Id: $
#ifndef G4_CASCADE_PIZEROP_CHANNEL_HH
#define G4_CASCADE_PIZEROP_CHANNEL_HH
@@ -33,7 +33,7 @@
#include "G4PionNucSampler.hh"
struct G4CascadePiZeroPChannelData {
typedef G4CascadeData<30,5,13,21,30,6,7,8,9> data_t;
typedef G4CascadeData<30,5,13,22,31,39,46,51,58> data_t;
static const data_t data;
};
@@ -109,8 +109,6 @@ private:
G4bool pionNucleonAbsorption(G4double ekin) const;
G4bool splitQuasiDeuteron(G4int qdtype); // Fill kinds with NN components
void fillOutgoingMasses(); // Fill mass arrays from particle types
// Utility class to generate final-state kinematics
@@ -185,8 +185,10 @@ void G4CascadeParamMessenger::SetNewValue(G4UIcommand* cmd, G4String arg) {
if (cmd == nucUseBestCmd)
theParams->G4NUCMODEL_USE_BEST = StoB(arg) ? strdup(arg.c_str()) : 0;
// if (cmd == nucRad2parCmd)
// theParams->G4NUCMODEL_RAD_2PAR = strdup(arg.c_str());
if (cmd == nucRad2parCmd)
theParams->G4NUCMODEL_RAD_2PAR = strdup(arg.c_str());
theParams->G4NUCMODEL_RAD_2PAR = StoB(arg) ? strdup(arg.c_str()) : 0;
if (cmd == nucRadScaleCmd)
theParams->G4NUCMODEL_RAD_SCALE = strdup(arg.c_str());
@@ -126,7 +126,7 @@ void G4CascadeParameters::Initialize() {
: 0.);
RANDOM_FILE = (G4CASCADE_RANDOM_FILE ? G4CASCADE_RANDOM_FILE : "");
BEST_PAR = (0!=G4NUCMODEL_USE_BEST);
TWOPARAM_RADIUS = (0!=G4NUCMODEL_RAD_2PAR);
TWOPARAM_RADIUS = (0!=G4NUCMODEL_RAD_2PAR); // && G4NUCMODEL_RAD_2PAR[0]!='0');
RADIUS_SCALE = (G4NUCMODEL_RAD_SCALE ? strtod(G4NUCMODEL_RAD_SCALE,0)
: (BEST_PAR?1.0:OLD_RADIUS_UNITS));
if ( G4NUCMODEL_RAD_SCALE == 0 && BEST_PAR == 0 ) HDP.DeveloperGet("BERT_RADIUS_SCALE",RADIUS_SCALE);
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -247,8 +247,50 @@ G4ElementaryParticleCollider::collide(G4InuclParticle* bullet,
mom = convertToSCM.backToTheLab(ipart->getMomentum());
ipart->setMomentum(mom);
};
// Check conservation in multibody final state
if (verboseLevel) {
// Check conservation in multibody final state
const G4ParticleDefinition* bDef = bullet->getDefinition();
const G4ParticleDefinition* tDef = target->getDefinition();
G4int initBaryonNumber = bDef->GetBaryonNumber() + tDef->GetBaryonNumber();
G4int initCharge = bullet->getCharge() + target->getCharge();
G4int initStrangeness = bDef->GetQuarkContent(3) - bDef->GetAntiQuarkContent(3) +
tDef->GetQuarkContent(3) - tDef->GetAntiQuarkContent(3);
G4int finalBaryonNumber = 0;
G4int finalCharge = 0;
G4int finalStrangeness = 0;
for (ipart = particles.begin(); ipart != particles.end(); ipart++) {
finalBaryonNumber += ipart->baryon();
finalCharge += ipart->getCharge();
finalStrangeness += ipart->getStrangeness();
}
G4int bnc = finalBaryonNumber - initBaryonNumber;
G4int cnc = finalCharge - initCharge;
G4int snc = finalStrangeness - initStrangeness;
if (bnc != 0 || cnc != 0 || snc != 0) {
G4cout << " G4ElementaryParticleCollider: quantum number non-conservation " << G4endl;
G4cout << " Baryon number: initial = " << initBaryonNumber << ", final = "
<< finalBaryonNumber << G4endl;
G4cout << " Charge: initial = " << initCharge << ", final = "
<< finalCharge << G4endl;
G4cout << " Strangeness: initial = " << initStrangeness << ", final = "
<< finalStrangeness << G4endl;
G4cout << " bullet = " << bDef->GetParticleName() << G4endl;
G4cout << " target = " << tDef->GetParticleName() << G4endl;
G4cout << " secondaries = " ;
for (ipart = particles.begin(); ipart != particles.end(); ipart++) {
G4cout << ipart->getDefinition()->GetParticleName() << " " ;
}
G4cout << G4endl;
}
}
if (verboseLevel && !validateOutput(bullet, target, particles)) {
G4cout << " incoming particles: \n" << *particle1 << G4endl
<< *particle2 << G4endl
@@ -394,13 +436,14 @@ void G4ElementaryParticleCollider::fillOutgoingMasses() {
}
// generate nucleons momenta for pion or photon absorption by dibaryon
// the nucleon distribution assumed to be isotropic in SCM
// Generate nucleon momenta for pion or photon absorption by dibaryon
// The nucleon distribution is assumed to be isotropic in SCM
void
G4ElementaryParticleCollider::generateSCMpionAbsorption(G4double etot_scm,
G4InuclElementaryParticle* particle1,
G4InuclElementaryParticle* particle2) {
G4InuclElementaryParticle* particle1,
G4InuclElementaryParticle* particle2)
{
if (verboseLevel > 3)
G4cout << " >>> G4ElementaryParticleCollider::generateSCMpionAbsorption"
<< G4endl;
@@ -410,20 +453,31 @@ G4ElementaryParticleCollider::generateSCMpionAbsorption(G4double etot_scm,
particle_kinds.clear();
G4int type1 = particle1->type();
G4int type2 = particle2->type();
G4int typeProduct = particle1->type() * particle2->type();
// Ensure that absportion is valid (charge conservable)
if (!G4NucleiModel::useQuasiDeuteron(type1, type2)) {
G4cerr << " pion absorption: "
<< particle1->getDefinition()->GetParticleName() << " + "
<< particle2->getDefinition()->GetParticleName() << " -> ?"
<< G4endl;
if (typeProduct == pi0*diproton || typeProduct == pip*unboundPN ||
typeProduct == gam*diproton) {
particle_kinds.push_back(pro);
particle_kinds.push_back(pro);
} else if (typeProduct == pim*diproton || typeProduct == pip*dineutron ||
typeProduct == pi0*unboundPN || typeProduct == gam*unboundPN) {
particle_kinds.push_back(pro);
particle_kinds.push_back(neu);
} else if (typeProduct == pi0*dineutron || typeProduct == pim*unboundPN ||
typeProduct == gam*dineutron) {
particle_kinds.push_back(neu);
particle_kinds.push_back(neu);
} else {
G4cerr << " Illegal absorption: "
<< particle1->getDefinition()->GetParticleName() << " + "
<< particle2->getDefinition()->GetParticleName() << " -> ?"
<< G4endl;
return;
}
if (!splitQuasiDeuteron(type2)) return; // Get constituents of [NN]
fillOutgoingMasses();
G4double a = 0.5 * (etot_scm * etot_scm - masses2[0] - masses2[1]);
@@ -439,8 +493,8 @@ G4ElementaryParticleCollider::generateSCMpionAbsorption(G4double etot_scm,
}
// generate nucleons momenta for muon absorption by dibaryon
// the nucleon distribution assumed to be isotropic in SCM
// Generate nucleon momenta for muon absorption by dibaryon
// The nucleon distribution is assumed to be isotropic in SCM
void
G4ElementaryParticleCollider::generateSCMmuonAbsorption(G4double etot_scm,
@@ -451,8 +505,6 @@ G4ElementaryParticleCollider::generateSCMmuonAbsorption(G4double etot_scm,
G4cout << " >>> G4ElementaryParticleCollider::generateSCMmuonAbsorption"
<< G4endl;
// A phase space generator is required for the 3-body final state
particles.clear(); // Initialize buffers for this event
particles.resize(3);
@@ -461,31 +513,32 @@ G4ElementaryParticleCollider::generateSCMmuonAbsorption(G4double etot_scm,
particle_kinds.clear();
G4int type1 = particle1->type();
G4int type2 = particle2->type();
G4int typeProduct = particle1->type() * particle2->type();
if (type1 != muonMinus) return; // Sanity check, only mu- absorption
// Ensure that absportion is valid (charge conservable)
if (!G4NucleiModel::useQuasiDeuteron(type1, type2)) {
G4cerr << " mu- absorption: "
<< particle1->getDefinition()->GetParticleName() << " + "
<< particle2->getDefinition()->GetParticleName() << " -> ?"
<< G4endl;
if (typeProduct == mum*diproton) {
particle_kinds.push_back(pro);
particle_kinds.push_back(neu);
} else if (typeProduct == mum*unboundPN) {
particle_kinds.push_back(neu);
particle_kinds.push_back(neu);
} else {
G4cerr << " Illegal absorption: "
<< particle1->getDefinition()->GetParticleName() << " + "
<< particle2->getDefinition()->GetParticleName() << " -> ?"
<< G4endl;
return;
}
if (!splitQuasiDeuteron(type2)) return; // Get constituents of [NN]
particle_kinds.push_back(mnu);
fillOutgoingMasses();
// Phase space generator required for the 3-body final state
G4GDecay3 breakup(etot_scm, masses[0], masses[1], masses[2]);
std::vector<G4ThreeVector> theMomenta = breakup.GetThreeBodyMomenta();
if (theMomenta.empty()) {
G4cerr << " generateSCMmuonAbsorption: GetThreeBodyMomenta() failed"
<< " for " << type2 << " dibaryon" << G4endl;
<< " for " << particle2->type() << " dibaryon" << G4endl;
particle_kinds.clear();
masses.clear();
particles.clear();
@@ -570,7 +623,6 @@ G4ElementaryParticleCollider::generateSCMpionNAbsorption(G4double /*etot_scm*/,
// Evaluate whether interaction is candidate for absorption on nucleon
G4bool
G4ElementaryParticleCollider::pionNucleonAbsorption(G4double ekin) const {
if (verboseLevel > 3)
@@ -589,20 +641,3 @@ G4ElementaryParticleCollider::pionNucleonAbsorption(G4double ekin) const {
);
}
// generate constituents of dibaryon for "explosion"
G4bool G4ElementaryParticleCollider::splitQuasiDeuteron(G4int qdtype) {
if (qdtype != diproton && qdtype != unboundPN && qdtype != dineutron) {
G4cerr << " type " << qdtype << " not dibaryon!" << G4endl;
return false;
}
G4int b2 = qdtype % 10; // Dibaryon codes are 1ab (a=1,2; b=1,2)
G4int b1 = (qdtype/10) % 10;
particle_kinds.push_back(b1);
particle_kinds.push_back(b2);
return true;
}