Import Geant4 8.3.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-09 15:07:44 +02:00
parent fe73f43734
commit 75c7fd177d
764 changed files with 45230 additions and 95238 deletions
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4EmStandardPhysics.cc,v 1.3 2006/11/23 15:30:19 vnivanch Exp $
// GEANT4 tag $Name: geant4-08-02 $
// $Id: G4EmStandardPhysics.cc,v 1.7 2007/03/01 10:35:45 vnivanch Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//---------------------------------------------------------------------------
//
@@ -36,6 +36,8 @@
// 05.12.2005 V.Ivanchenko add controlled verbosity
// 13.11.2006 V.Ivanchenko use G4hMultipleScattering
// 23.11.2006 V.Ivanchenko remove mscStepLimit option and improve cout
// 13.02.2007 V.Ivanchenko use G4hMultipleScattering for muons
// 13.02.2007 V.Ivanchenko set skin=0.0
//
//----------------------------------------------------------------------------
//
@@ -158,15 +160,16 @@ void G4EmStandardPhysics::ConstructProcess()
} else if (particleName == "mu+" ||
particleName == "mu-" ) {
pmanager->AddProcess(new G4MultipleScattering,-1, 1, 1);
pmanager->AddProcess(new G4MuIonisation, -1, 2, 2);
pmanager->AddProcess(new G4MuBremsstrahlung, -1, 3, 3);
pmanager->AddProcess(new G4MuPairProduction, -1, 4, 4);
pmanager->AddProcess(new G4hMultipleScattering,-1, 1, 1);
pmanager->AddProcess(new G4MuIonisation, -1, 2, 2);
pmanager->AddProcess(new G4MuBremsstrahlung, -1, 3, 3);
pmanager->AddProcess(new G4MuPairProduction, -1, 4, 4);
} else if (particleName == "alpha" ||
particleName == "He3" ||
particleName == "GenericIon") {
if(verbose > 1)
G4cout << "### G4standard instantiates ionIoni for "
<< particleName << G4endl;
pmanager->AddProcess(new G4hMultipleScattering, -1, 1, 1);
@@ -200,6 +203,7 @@ void G4EmStandardPhysics::ConstructProcess()
}
G4EmProcessOptions opt;
opt.SetVerbose(verbose);
opt.SetSkin(0.0);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4EmStandardPhysics71.cc,v 1.3 2006/11/23 15:30:19 vnivanch Exp $
// GEANT4 tag $Name: geant4-08-02 $
// $Id: G4EmStandardPhysics71.cc,v 1.7 2007/05/02 18:49:50 vnivanch Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//---------------------------------------------------------------------------
//
@@ -38,6 +38,7 @@
// 23.06.2006 V.Ivanchenko set dRoverRange = 0.8 for e- and e+
// 13.11.2006 V.Ivanchenko use G4hMultipleScattering
// 23.11.2006 V.Ivanchenko remove mscStepLimit option and improve cout
// 13.02.2007 V.Ivanchenko set skin=0.0
//
//----------------------------------------------------------------------------
//
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4EmStandardPhysics72.cc,v 1.5 2006/11/23 15:30:19 vnivanch Exp $
// GEANT4 tag $Name: geant4-08-02 $
// $Id: G4EmStandardPhysics72.cc,v 1.7 2007/03/27 10:01:21 vnivanch Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//---------------------------------------------------------------------------
//
@@ -36,7 +36,8 @@
// 19.12.2005 V.Ivanchenko rename 71 -> 72
// 15.06.2006 V.Ivanchenko use this class as a constructor of fast EM physics
// 13.11.2006 V.Ivanchenko use G4hMultipleScattering
// 14.11.2006 V.Ivanchenko use sub-cutoff optionfor all particles
// 14.11.2006 V.Ivanchenko use sub-cutoff option for all particles
// 13.02.2007 V.Ivanchenko use default msc
//
//----------------------------------------------------------------------------
//
@@ -149,10 +150,6 @@ void G4EmStandardPhysics72::ConstructProcess()
} else if (particleName == "e-") {
msc = new G4MultipleScattering();
msc->MscStepLimitation(true,0.1);
if(verbose > 1)
G4cout << "### G4standard_exp instantiates eIoni "
<< particleName << G4endl;
pmanager->AddProcess(msc, -1, 1, 1);
pmanager->AddProcess(new G4eIonisation, -1, 2, 2);
pmanager->AddProcess(new G4eBremsstrahlung, -1,-3, 3);
@@ -160,10 +157,6 @@ void G4EmStandardPhysics72::ConstructProcess()
} else if (particleName == "e+") {
msc = new G4MultipleScattering();
msc->MscStepLimitation(true,0.1);
if(verbose > 1)
G4cout << "### G4standard_exp instantiates eIoni and msc71 for "
<< particleName << G4endl;
pmanager->AddProcess(msc, -1, 1, 1);
pmanager->AddProcess(new G4eIonisation, -1, 2, 2);
pmanager->AddProcess(new G4eBremsstrahlung, -1,-3, 3);
@@ -218,6 +211,7 @@ void G4EmStandardPhysics72::ConstructProcess()
}
G4EmProcessOptions opt;
opt.SetVerbose(verbose);
opt.SetSkin(0.0);
opt.SetSubCutoff(true);
}
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4HadronElasticPhysics.cc,v 1.3 2006/11/23 15:46:04 vnivanch Exp $
// GEANT4 tag $Name: geant4-08-02 $
// $Id: G4HadronElasticPhysics.cc,v 1.7 2007/03/06 17:52:06 vnivanch Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//---------------------------------------------------------------------------
//
@@ -38,6 +38,10 @@
// 24.07.2006 V.Ivanchenko add G4NeutronHPElasticData
// 10.08.2006 V.Ivanchenko separate neutrons from other particles
// 17.11.2006 V.Ivanchenko do not redefine G4HadronElastic default parameters
// 19.02.2007 V.Ivanchenko set QModelLowLimit and LowestEnergyLimit to zero
// 19.02.2007 A.Howard set QModelLowLimit and LowestEnergyLimit to zero
// for neutrons
// 06.03.2007 V.Ivanchenko use updated interface to G4UElasticCrossSection
//
//----------------------------------------------------------------------------
//
@@ -111,6 +115,8 @@ void G4HadronElasticPhysics::ConstructProcess()
G4HadronElastic* he = new G4HadronElastic();
model = he;
man = he->GetCS();
he->SetQModelLowLimit(0.0);
he->SetLowestEnergyLimit(0.0);
} else {
model = new G4LElastic();
}
@@ -149,7 +155,7 @@ void G4HadronElasticPhysics::ConstructProcess()
G4UHadronElasticProcess* h = new G4UHadronElasticProcess("hElastic");
h->SetQElasticCrossSection(man);
hel = h;
if(glFlag) hel->AddDataSet(new G4UElasticCrossSection());
if(glFlag) hel->AddDataSet(new G4UElasticCrossSection(particle));
} else {
hel = new G4HadronElasticProcess("hElastic");
}
@@ -164,10 +170,12 @@ void G4HadronElasticPhysics::ConstructProcess()
if(mname == "elastic") {
G4UHadronElasticProcess* h = new G4UHadronElasticProcess("hElastic");
G4HadronElastic* nhe = new G4HadronElastic();
nhe->SetQModelLowLimit(0.0);
nhe->SetLowestEnergyLimit(0.0);
neutronModel = nhe;
h->SetQElasticCrossSection(nhe->GetCS());
hel = h;
if(glFlag) hel->AddDataSet(new G4UElasticCrossSection());
if(glFlag) hel->AddDataSet(new G4UElasticCrossSection(particle));
} else {
hel = new G4HadronElasticProcess("hElastic");
neutronModel = new G4LElastic();
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4HadronHElasticPhysics.cc,v 1.1 2006/11/23 15:46:04 vnivanch Exp $
// GEANT4 tag $Name: geant4-08-02 $
// $Id: G4HadronHElasticPhysics.cc,v 1.2 2007/03/21 12:36:14 vnivanch Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//---------------------------------------------------------------------------
//
@@ -33,6 +33,8 @@
// Author: 23 November 2006 V. Ivanchenko
//
// Modified:
// 21.03.07 (V.Ivanchenko) Use G4BGGNucleonElasticXS and G4BGGPionElasticXS;
// Reduce thresholds for HE and Q-models to zero
//
//----------------------------------------------------------------------------
//
@@ -55,6 +57,8 @@
#include "G4HadronProcessStore.hh"
#include "G4VQCrossSection.hh"
#include "G4UElasticCrossSection.hh"
#include "G4BGGNucleonElasticXS.hh"
#include "G4BGGPionElasticXS.hh"
G4HadronHElasticPhysics::G4HadronHElasticPhysics(
const G4String& name, G4int ver, G4bool hp, G4bool glauber)
@@ -95,7 +99,8 @@ void G4HadronHElasticPhysics::ConstructProcess()
G4HadronProcessStore* store = G4HadronProcessStore::Instance();
G4double elimit = 0.4*GeV;
// G4double elimit = 0.4*GeV;
G4double elimit = 0.0;
if(verbose > 1)
G4cout << "### HadronElasticPhysics Construct Processes with HE limit "
@@ -106,6 +111,8 @@ void G4HadronHElasticPhysics::ConstructProcess()
G4HadronElastic* he = new G4HadronElastic();
he->SetHEModelLowLimit(elimit);
he->SetQModelLowLimit(0.0);
he->SetLowestEnergyLimit(0.0);
model = he;
man = he->GetCS();
@@ -139,13 +146,15 @@ void G4HadronHElasticPhysics::ConstructProcess()
pname == "triton") {
G4ProcessManager* pmanager = particle->GetProcessManager();
if(mname == "elastic") {
G4UHadronElasticProcess* h = new G4UHadronElasticProcess("hElastic");
h->SetQElasticCrossSection(man);
hel = h;
if(glFlag) hel->AddDataSet(new G4UElasticCrossSection());
} else {
hel = new G4HadronElasticProcess("hElastic");
G4UHadronElasticProcess* h = new G4UHadronElasticProcess("hElastic");
h->SetQElasticCrossSection(man);
hel = h;
if(pname == "proton") {
hel->AddDataSet(new G4BGGNucleonElasticXS(particle));
} else if (pname == "pi+" || pname == "pi-") {
hel->AddDataSet(new G4BGGPionElasticXS(particle));
} else {
hel->AddDataSet(new G4UElasticCrossSection(particle));
}
hel->RegisterMe(model);
store->Register(hel,particle,model,mname);
@@ -161,7 +170,7 @@ void G4HadronHElasticPhysics::ConstructProcess()
neutronModel = nhe;
h->SetQElasticCrossSection(nhe->GetCS());
hel = h;
if(glFlag) hel->AddDataSet(new G4UElasticCrossSection());
hel->AddDataSet(new G4BGGNucleonElasticXS(particle));
if(hpFlag) {
neutronModel->SetMinEnergy(19.5*MeV);
@@ -42,6 +42,12 @@ G4NeutronHPBuilder()
theHPInelastic = 0;
theHPInelasticData = 0;
theMin = 0;
theIMin = theMin;
theMax = 20*MeV;
theIMax = theMax;
}
G4NeutronHPBuilder::
@@ -57,6 +63,8 @@ void G4NeutronHPBuilder::
Build(G4HadronElasticProcess * aP)
{
if(theHPElastic==0) theHPElastic = new G4NeutronHPElastic;
theHPElastic->SetMinEnergy(theMin);
theHPElastic->SetMaxEnergy(theMax);
if(theHPElasticData == 0) theHPElasticData = new G4NeutronHPElasticData;
aP->AddDataSet(theHPElasticData);
aP->RegisterMe(theHPElastic);
@@ -66,6 +74,8 @@ void G4NeutronHPBuilder::
Build(G4HadronFissionProcess * aP)
{
if(theHPFission == 0) theHPFission = new G4NeutronHPFission;
theHPFission->SetMinEnergy(theMin);
theHPFission->SetMaxEnergy(theMax);
if(theHPFissionData==0) theHPFissionData=new G4NeutronHPFissionData;
aP->AddDataSet(theHPFissionData);
aP->RegisterMe(theHPFission);
@@ -75,6 +85,8 @@ void G4NeutronHPBuilder::
Build(G4HadronCaptureProcess * aP)
{
if(theHPCapture==0) theHPCapture = new G4NeutronHPCapture;
theHPCapture->SetMinEnergy(theMin);
theHPCapture->SetMaxEnergy(theMax);
if(theHPCaptureData==0) theHPCaptureData = new G4NeutronHPCaptureData;
aP->AddDataSet(theHPCaptureData);
aP->RegisterMe(theHPCapture);
@@ -84,6 +96,8 @@ void G4NeutronHPBuilder::
Build(G4NeutronInelasticProcess * aP)
{
if(theHPInelastic==0) theHPInelastic = new G4NeutronHPInelastic;
theHPInelastic->SetMinEnergy(theIMin);
theHPInelastic->SetMaxEnergy(theIMax);
if(theHPInelasticData==0) theHPInelasticData = new G4NeutronHPInelasticData;
aP->AddDataSet(theHPInelasticData);
aP->RegisterMe(theHPInelastic);
@@ -23,43 +23,50 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
#include "G4QGSCEflowNeutronBuilder.hh"
#include "G4ParticleDefinition.hh"
#include "G4ParticleTable.hh"
#include "G4ProcessManager.hh"
#include "G4QGSCEflowNeutronBuilder.hh"
#include "G4ParticleDefinition.hh"
#include "G4ParticleTable.hh"
#include "G4ProcessManager.hh"
G4QGSCEflowNeutronBuilder::
G4QGSCEflowNeutronBuilder()
{
theMin = 8*GeV;
theModel = new G4TheoFSGenerator;
G4QGSCEflowNeutronBuilder::
G4QGSCEflowNeutronBuilder(G4bool quasiElastic)
{
theMin = 8*GeV;
theModel = new G4TheoFSGenerator;
theStringModel= new G4QGSModel< G4QGSParticipants >;
theStringDecay = new G4ExcitedStringDecay(new G4QGSMFragmentation);
theStringModel->SetFragmentationModel(theStringDecay);
theStringModel= new G4QGSModel< G4QGSParticipants >;
theStringDecay = new G4ExcitedStringDecay(new G4QGSMFragmentation);
theStringModel->SetFragmentationModel(theStringDecay);
theCascade = new G4StringChipsParticleLevelInterface;
theCascade = new G4StringChipsParticleLevelInterface;
theModel->SetTransport(theCascade);
theModel->SetHighEnergyGenerator(theStringModel);
}
theModel->SetTransport(theCascade);
theModel->SetHighEnergyGenerator(theStringModel);
if (quasiElastic)
{
theQuasiElastic=new G4QuasiElasticChannel;
theModel->SetQuasiElasticChannel(theQuasiElastic);
} else
{ theQuasiElastic=0;}
}
G4QGSCEflowNeutronBuilder::
~G4QGSCEflowNeutronBuilder()
{
delete theStringDecay;
delete theStringModel;
delete theCascade;
delete theModel;
}
G4QGSCEflowNeutronBuilder::
~G4QGSCEflowNeutronBuilder()
{
delete theStringDecay;
delete theStringModel;
delete theCascade;
if ( theQuasiElastic ) delete theQuasiElastic;
delete theModel;
}
void G4QGSCEflowNeutronBuilder::
Build(G4NeutronInelasticProcess * aP)
{
theModel->SetMinEnergy(theMin);
theModel->SetMaxEnergy(100*TeV);
aP->RegisterMe(theModel);
aP->AddDataSet(&theXSec);
}
void G4QGSCEflowNeutronBuilder::
Build(G4NeutronInelasticProcess * aP)
{
theModel->SetMinEnergy(theMin);
theModel->SetMaxEnergy(100*TeV);
aP->RegisterMe(theModel);
aP->AddDataSet(&theXSec);
}
// 2006 G.Folger
@@ -29,7 +29,7 @@
#include "G4ProcessManager.hh"
G4QGSCEflowPiKBuilder::
G4QGSCEflowPiKBuilder()
G4QGSCEflowPiKBuilder(G4bool quasiElastic)
{
theMin = 8*GeV;
theModel = new G4TheoFSGenerator;
@@ -42,6 +42,12 @@ G4QGSCEflowPiKBuilder()
theModel->SetTransport(theCascade);
theModel->SetHighEnergyGenerator(theStringModel);
if (quasiElastic)
{
theQuasiElastic=new G4QuasiElasticChannel;
theModel->SetQuasiElasticChannel(theQuasiElastic);
} else
{ theQuasiElastic=0;}
}
G4QGSCEflowPiKBuilder::
@@ -50,6 +56,7 @@ G4QGSCEflowPiKBuilder::
delete theCascade;
delete theStringDecay;
delete theStringModel;
if ( theQuasiElastic ) delete theQuasiElastic;
delete theModel;
}
@@ -29,7 +29,7 @@
#include "G4ProcessManager.hh"
G4QGSCEflowProtonBuilder::
G4QGSCEflowProtonBuilder()
G4QGSCEflowProtonBuilder(G4bool quasiElastic)
{
theMin = 8*GeV;
theModel = new G4TheoFSGenerator;
@@ -42,6 +42,12 @@ G4QGSCEflowProtonBuilder()
theModel->SetHighEnergyGenerator(theStringModel);
theModel->SetTransport(theCascade);
if (quasiElastic)
{
theQuasiElastic=new G4QuasiElasticChannel;
theModel->SetQuasiElasticChannel(theQuasiElastic);
} else
{ theQuasiElastic=0;}
}
G4QGSCEflowProtonBuilder::
@@ -50,6 +56,7 @@ G4QGSCEflowProtonBuilder::
delete theCascade;
delete theStringDecay;
delete theStringModel;
if ( theQuasiElastic ) delete theQuasiElastic;
delete theModel;
}
@@ -29,7 +29,7 @@
#include "G4ProcessManager.hh"
G4QGSCNeutronBuilder::
G4QGSCNeutronBuilder()
G4QGSCNeutronBuilder(G4bool quasiElastic)
{
theMin = 8*GeV;
theModel = new G4TheoFSGenerator;
@@ -42,6 +42,12 @@
theModel->SetTransport(theCascade);
theModel->SetHighEnergyGenerator(theStringModel);
if (quasiElastic)
{
theQuasiElastic=new G4QuasiElasticChannel;
theModel->SetQuasiElasticChannel(theQuasiElastic);
} else
{ theQuasiElastic=0;}
}
G4QGSCNeutronBuilder::
@@ -50,6 +56,7 @@
delete theStringDecay;
delete theStringModel;
delete theCascade;
if ( theQuasiElastic ) delete theQuasiElastic;
delete theModel;
}
@@ -29,7 +29,7 @@
#include "G4ProcessManager.hh"
G4QGSCPiKBuilder::
G4QGSCPiKBuilder()
G4QGSCPiKBuilder(G4bool quasiElastic)
{
theMin = 8*GeV;
theModel = new G4TheoFSGenerator;
@@ -42,6 +42,12 @@ G4QGSCPiKBuilder()
theModel->SetTransport(theCascade);
theModel->SetHighEnergyGenerator(theStringModel);
if (quasiElastic)
{
theQuasiElastic=new G4QuasiElasticChannel;
theModel->SetQuasiElasticChannel(theQuasiElastic);
} else
{ theQuasiElastic=0;}
}
G4QGSCPiKBuilder::
@@ -50,6 +56,7 @@ G4QGSCPiKBuilder::
delete theCascade;
delete theStringDecay;
delete theStringModel;
if ( theQuasiElastic ) delete theQuasiElastic;
delete theModel;
}
@@ -29,7 +29,7 @@
#include "G4ProcessManager.hh"
G4QGSCProtonBuilder::
G4QGSCProtonBuilder()
G4QGSCProtonBuilder(G4bool quasiElastic)
{
theMin = 8*GeV;
theModel = new G4TheoFSGenerator;
@@ -42,6 +42,12 @@ G4QGSCProtonBuilder()
theModel->SetHighEnergyGenerator(theStringModel);
theModel->SetTransport(theCascade);
if (quasiElastic)
{
theQuasiElastic=new G4QuasiElasticChannel;
theModel->SetQuasiElasticChannel(theQuasiElastic);
} else
{ theQuasiElastic=0;}
}
G4QGSCProtonBuilder::
@@ -50,6 +56,7 @@ G4QGSCProtonBuilder::
delete theCascade;
delete theStringDecay;
delete theStringModel;
if ( theQuasiElastic ) delete theQuasiElastic;
delete theModel;
}
@@ -29,7 +29,7 @@
#include "G4ProcessManager.hh"
G4QGSPNeutronBuilder::
G4QGSPNeutronBuilder()
G4QGSPNeutronBuilder(G4bool quasiElastic)
{
theMin = 12*GeV;
theModel = new G4TheoFSGenerator;
@@ -44,6 +44,12 @@ G4QGSPNeutronBuilder()
theModel->SetTransport(theCascade);
theModel->SetHighEnergyGenerator(theStringModel);
if (quasiElastic)
{
theQuasiElastic=new G4QuasiElasticChannel;
theModel->SetQuasiElasticChannel(theQuasiElastic);
} else
{ theQuasiElastic=0;}
}
G4QGSPNeutronBuilder::
@@ -53,6 +59,7 @@ G4QGSPNeutronBuilder::
delete theStringModel;
delete thePreEquilib;
delete theCascade;
if ( theQuasiElastic ) delete theQuasiElastic;
delete theModel;
}
@@ -29,7 +29,7 @@
#include "G4ProcessManager.hh"
G4QGSPPiKBuilder::
G4QGSPPiKBuilder()
G4QGSPPiKBuilder(G4bool quasiElastic)
{
theMin = 12*GeV;
theModel = new G4TheoFSGenerator;
@@ -37,12 +37,19 @@ G4QGSPPiKBuilder()
theStringModel = new G4QGSModel< G4QGSParticipants >;
theStringDecay = new G4ExcitedStringDecay(new G4QGSMFragmentation);
theStringModel->SetFragmentationModel(theStringDecay);
theCascade = new G4GeneratorPrecompoundInterface;
thePreEquilib = new G4PreCompoundModel(new G4ExcitationHandler);
theCascade->SetDeExcitation(thePreEquilib);
theModel->SetHighEnergyGenerator(theStringModel);
if (quasiElastic)
{
theQuasiElastic=new G4QuasiElasticChannel;
theModel->SetQuasiElasticChannel(theQuasiElastic);
} else
{ theQuasiElastic=0;}
theModel->SetTransport(theCascade);
}
@@ -50,6 +57,8 @@ G4QGSPPiKBuilder::
~G4QGSPPiKBuilder()
{
delete theCascade;
delete thePreEquilib;
if ( theQuasiElastic ) delete theQuasiElastic;
delete theStringDecay;
delete theStringModel;
delete theModel;
@@ -29,7 +29,7 @@
#include "G4ProcessManager.hh"
G4QGSPProtonBuilder::
G4QGSPProtonBuilder()
G4QGSPProtonBuilder(G4bool quasiElastic)
{
theMin = 12*GeV;
theModel = new G4TheoFSGenerator;
@@ -44,6 +44,12 @@
theModel->SetTransport(theCascade);
theModel->SetHighEnergyGenerator(theStringModel);
if (quasiElastic)
{
theQuasiElastic=new G4QuasiElasticChannel;
theModel->SetQuasiElasticChannel(theQuasiElastic);
} else
{ theQuasiElastic=0;}
}
void G4QGSPProtonBuilder::
@@ -66,6 +72,7 @@
{
delete thePreEquilib;
delete theCascade;
if ( theQuasiElastic ) delete theQuasiElastic;
delete theStringDecay;
delete theStringModel;
delete theModel;
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4QStoppingPhysics.cc,v 1.1 2006/10/31 11:35:03 gunter Exp $
// GEANT4 tag $Name: geant4-08-02 $
// $Id: G4QStoppingPhysics.cc,v 1.2 2007/04/26 16:03:18 gunter Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//---------------------------------------------------------------------------
//
@@ -49,8 +49,10 @@
#include "G4BaryonConstructor.hh"
#include "G4MuonMinus.hh"
G4QStoppingPhysics::G4QStoppingPhysics(const G4String& name, G4int ver)
: G4VPhysicsConstructor(name), verbose(ver), wasActivated(false)
G4QStoppingPhysics::G4QStoppingPhysics(const G4String& name, G4int ver,
G4bool UseMuonMinusCapture)
: G4VPhysicsConstructor(name), verbose(ver), wasActivated(false) ,
useMuonMinusCaptureAtRest(UseMuonMinusCapture)
{
if(verbose > 1) G4cout << "### G4QStoppingPhysics" << G4endl;
}
@@ -58,7 +60,7 @@ G4QStoppingPhysics::G4QStoppingPhysics(const G4String& name, G4int ver)
G4QStoppingPhysics::~G4QStoppingPhysics()
{
if(wasActivated) {
delete muProcess;
if ( muProcess ) delete muProcess;
delete hProcess;
}
}
@@ -84,7 +86,12 @@ void G4QStoppingPhysics::ConstructProcess()
if(wasActivated) return;
wasActivated = true;
muProcess = new G4MuonMinusCaptureAtRest();
if ( useMuonMinusCaptureAtRest )
{
muProcess = new G4MuonMinusCaptureAtRest();
} else {
muProcess = 0;
}
hProcess = new G4QCaptureAtRest();
G4double mThreshold = 130.*MeV;
@@ -99,10 +106,18 @@ void G4QStoppingPhysics::ConstructProcess()
particle = theParticleIterator->value();
pmanager = particle->GetProcessManager();
if(particle == G4MuonMinus::MuonMinus()) {
pmanager->AddRestProcess(muProcess);
if(verbose > 1)
G4cout << "### QStoppingPhysics added for "
<< particle->GetParticleName() << G4endl;
if ( useMuonMinusCaptureAtRest )
{
pmanager->AddRestProcess(muProcess);
if(verbose > 1)
G4cout << "### QStoppingPhysics added G4MuonMinusCaptureAtRest for "
<< particle->GetParticleName() << G4endl;
} else {
pmanager->AddRestProcess(hProcess);
if(verbose > 1)
G4cout << "### QStoppingPhysics added G4QCaptureAtRest for "
<< particle->GetParticleName() << G4endl;
}
}
if(particle->GetPDGCharge() < 0.0 &&
particle->GetPDGMass() > mThreshold &&