Import Geant4 10.5.0.beta source tree
This commit is contained in:
@@ -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:
|
||||
|
||||
+2
-2
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
+2
-2
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
-2
@@ -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);
|
||||
|
||||
+1462
-438
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
+86
-51
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user