Import Geant4 11.0.0 source tree

This commit is contained in:
Gabriele Cosmo
2021-12-10 16:15:15 +00:00
committed by Ben Morgan
parent 6399a014b6
commit 80e2389dd8
3932 changed files with 202519 additions and 246221 deletions
@@ -79,8 +79,6 @@ GammaRayTelAnalysis::GammaRayTelAnalysis()
GammaRayTelAnalysis::~GammaRayTelAnalysis() {
Finish();
// Complete clean-up
delete G4AnalysisManager::Instance();
}
@@ -149,6 +147,7 @@ void GammaRayTelAnalysis::setNtuple(float E, float p, float x,
void GammaRayTelAnalysis::BeginOfRun()
{
G4AnalysisManager* man = G4AnalysisManager::Instance();
man->SetDefaultFileType("root");
// Open an output file
@@ -1,131 +0,0 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
//
//
//
#include "GammaRayTelEMlowePhysics.hh"
#include "globals.hh"
#include "G4ios.hh"
#include <iomanip>
// gamma
#include "G4PhotoElectricEffect.hh"
#include "G4LivermorePhotoElectricModel.hh"
#include "G4ComptonScattering.hh"
#include "G4LivermoreComptonModel.hh"
#include "G4GammaConversion.hh"
#include "G4LivermoreGammaConversionModel.hh"
#include "G4RayleighScattering.hh"
#include "G4LivermoreRayleighModel.hh"
// e-/e+
#include "G4eMultipleScattering.hh"
#include "G4eIonisation.hh"
#include "G4LivermoreIonisationModel.hh"
#include "G4eBremsstrahlung.hh"
#include "G4LivermoreBremsstrahlungModel.hh"
#include "G4eplusAnnihilation.hh"
GammaRayTelEMlowePhysics::GammaRayTelEMlowePhysics(const G4String& name)
: G4VPhysicsConstructor(name)
{
}
GammaRayTelEMlowePhysics::~GammaRayTelEMlowePhysics()
{
}
void GammaRayTelEMlowePhysics::ConstructParticle()
{
}
#include "G4ProcessManager.hh"
void GammaRayTelEMlowePhysics::ConstructProcess()
{
G4ProcessManager * pManager = 0;
// Gamma Physics
pManager = G4Gamma::Gamma()->GetProcessManager();
G4RayleighScattering* theRayleigh = new G4RayleighScattering();
theRayleigh->SetEmModel(new G4LivermoreRayleighModel());
G4PhotoElectricEffect* thePhotoElectricEffect = new G4PhotoElectricEffect();
thePhotoElectricEffect->SetEmModel(new G4LivermorePhotoElectricModel());
G4ComptonScattering* theComptonScattering = new G4ComptonScattering();
theComptonScattering->SetEmModel(new G4LivermoreComptonModel());
G4GammaConversion* theGammaConversion = new G4GammaConversion();
theGammaConversion->SetEmModel(new G4LivermoreGammaConversionModel());
pManager->AddDiscreteProcess(theRayleigh);
pManager->AddDiscreteProcess(thePhotoElectricEffect);
pManager->AddDiscreteProcess(theComptonScattering);
pManager->AddDiscreteProcess(theGammaConversion);
// Electron Physics
pManager = G4Electron::Electron()->GetProcessManager();
G4eMultipleScattering* msc = new G4eMultipleScattering();
G4eIonisation* eIonisation = new G4eIonisation();
eIonisation->SetEmModel(new G4LivermoreIonisationModel());
G4eBremsstrahlung* eBremsstrahlung = new G4eBremsstrahlung();
eBremsstrahlung->SetEmModel(new G4LivermoreBremsstrahlungModel());
pManager->AddProcess(msc,-1, 1, 1);
pManager->AddProcess(eIonisation,-1, 2, 2);
pManager->AddProcess(eBremsstrahlung, -1,-3, 3);
//Positron Physics
pManager = G4Positron::Positron()->GetProcessManager();
G4eMultipleScattering* msc_p = new G4eMultipleScattering();
pManager->AddProcess(msc_p,-1, 1, 1);
G4eIonisation* eIonisation_p = new G4eIonisation();
pManager->AddProcess(eIonisation_p, -1, 2, 2);
pManager->AddProcess(new G4eBremsstrahlung(), -1,-1, 3);
pManager->AddProcess(new G4eplusAnnihilation(),0,-1, 4);
}
@@ -1,102 +0,0 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
//
//
//
#include "GammaRayTelEMstdPhysics.hh"
#include "globals.hh"
#include "G4ios.hh"
#include <iomanip>
// gamma
#include "G4PhotoElectricEffect.hh"
#include "G4ComptonScattering.hh"
#include "G4GammaConversion.hh"
// e-
#include "G4eMultipleScattering.hh"
#include "G4eIonisation.hh"
#include "G4eBremsstrahlung.hh"
// e+
#include "G4eIonisation.hh"
#include "G4eBremsstrahlung.hh"
#include "G4eplusAnnihilation.hh"
GammaRayTelEMstdPhysics::GammaRayTelEMstdPhysics(const G4String& name)
: G4VPhysicsConstructor(name)
{
}
GammaRayTelEMstdPhysics::~GammaRayTelEMstdPhysics()
{
}
void GammaRayTelEMstdPhysics::ConstructParticle()
{
}
#include "G4ProcessManager.hh"
void GammaRayTelEMstdPhysics::ConstructProcess()
{
G4ProcessManager * pManager = 0;
// Gamma Physics
pManager = G4Gamma::Gamma()->GetProcessManager();
pManager->AddDiscreteProcess(new G4PhotoElectricEffect);
pManager->AddDiscreteProcess(new G4ComptonScattering);
pManager->AddDiscreteProcess(new G4GammaConversion);
// Electron Physics
pManager = G4Electron::Electron()->GetProcessManager();
pManager->AddProcess(new G4eMultipleScattering, -1, 1, 1);
pManager->AddProcess(new G4eIonisation, -1, 2, 2);
pManager->AddProcess(new G4eBremsstrahlung, -1, 3, 3);
// Positron Physics
pManager = G4Positron::Positron()->GetProcessManager();
pManager->AddProcess(new G4eMultipleScattering, -1, 1, 1);
pManager->AddProcess(new G4eIonisation, -1, 2, 2);
pManager->AddProcess(new G4eBremsstrahlung, -1, 3, 3);
pManager->AddProcess(new G4eplusAnnihilation, 0,-1, 4);
}
@@ -1,69 +0,0 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
//
//
#include "GammaRayTelGeneralPhysics.hh"
#include "globals.hh"
#include "G4ios.hh"
#include <iomanip>
GammaRayTelGeneralPhysics::GammaRayTelGeneralPhysics(const G4String& name)
: G4VPhysicsConstructor(name)
{
}
GammaRayTelGeneralPhysics::~GammaRayTelGeneralPhysics()
{
}
#include "G4ProcessManager.hh"
void GammaRayTelGeneralPhysics::ConstructParticle()
{
}
void GammaRayTelGeneralPhysics::ConstructProcess()
{
// Add Decay Process
auto particleIterator=GetParticleIterator();
particleIterator->reset();
while( (*particleIterator)() ){
G4ParticleDefinition* particle = particleIterator->value();
G4ProcessManager* pmanager = particle->GetProcessManager();
if (fDecayProcess.IsApplicable(*particle) && !particle->IsShortLived()) {
pmanager ->AddProcess(&fDecayProcess);
// set ordering for PostStepDoIt and AtRestDoIt
pmanager ->SetProcessOrdering(&fDecayProcess, idxPostStep);
pmanager ->SetProcessOrdering(&fDecayProcess, idxAtRest);
}
}
}
@@ -1,310 +0,0 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
//
//
#include <iomanip>
#include "GammaRayTelHadronPhysics.hh"
#include "globals.hh"
#include "G4ios.hh"
#include "G4SystemOfUnits.hh"
#include "G4ShortLivedConstructor.hh"
#include "G4HadronicParameters.hh"
#include "G4ProcessManager.hh"
#include "G4hMultipleScattering.hh"
#include "G4hIonisation.hh"
#include "G4HadronElasticProcess.hh"
#include "G4NeutronFissionProcess.hh"
#include "G4NeutronCaptureProcess.hh"
#include "G4NeutronCaptureXS.hh"
#include "G4HadronElastic.hh"
#include "G4HadronInelasticProcess.hh"
// Low-energy Models
#include "G4LFission.hh"
// Cross section handlers and high energy models
#include "G4VCrossSectionDataSet.hh"
#include "G4CascadeInterface.hh"
#include "G4BGGPionInelasticXS.hh"
#include "G4ChipsKaonZeroInelasticXS.hh"
#include "G4ChipsKaonMinusInelasticXS.hh"
#include "G4ChipsKaonPlusInelasticXS.hh"
#include "G4CrossSectionDataSetRegistry.hh"
#include "G4CrossSectionInelastic.hh"
#include "G4ComponentAntiNuclNuclearXS.hh"
#include "G4BGGNucleonInelasticXS.hh"
// Stopping processes
#include "G4HadronStoppingProcess.hh"
#include "G4HadronicAbsorptionBertini.hh"
#include "G4HadronicAbsorptionFritiof.hh"
// quark gluon string model with chips afterburner.
#include "G4FTFModel.hh"
#include "G4TheoFSGenerator.hh"
#include "G4ExcitationHandler.hh"
#include "G4PreCompoundModel.hh"
#include "G4GeneratorPrecompoundInterface.hh"
#include "G4QGSMFragmentation.hh"
#include "G4ExcitedStringDecay.hh"
GammaRayTelHadronPhysics::GammaRayTelHadronPhysics(const G4String& name)
: G4VPhysicsConstructor(name)
{;}
GammaRayTelHadronPhysics::~GammaRayTelHadronPhysics()
{}
void GammaRayTelHadronPhysics::ConstructProcess()
{
G4ProcessManager * pManager = 0;
/*
G4cout << "" << G4endl;
G4cout << "You are using the GammaRayTelHadronPhysics" << G4endl;
G4cout << " - Note that this hadronic physics list is not optimized for any particular usage" << G4endl;
G4cout << " - If you wish to have a starting point tailored for a particular area of work," << G4endl;
G4cout << " please use one of the available physics lists by use-case." << G4endl;
G4cout << "" << G4endl;
*/
// Elastic Process
G4HadronElastic* theElasticModel = new G4HadronElastic;
G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess;
theElasticProcess->RegisterMe(theElasticModel);
const G4double theBERTMin = 0.0*GeV;
const G4double theBERTMax = 5.0*GeV;
const G4double theFTFMin = 4.0*GeV;
const G4double theFTFMax = G4HadronicParameters::Instance()->GetMaxEnergy();
G4FTFModel* theStringModel = new G4FTFModel;
G4ExcitedStringDecay* theStringDecay = new G4ExcitedStringDecay();
theStringModel->SetFragmentationModel( theStringDecay );
G4GeneratorPrecompoundInterface* theCascade = new G4GeneratorPrecompoundInterface();
G4TheoFSGenerator* theModel = new G4TheoFSGenerator( "FTFP" );
theModel->SetHighEnergyGenerator( theStringModel );
theModel->SetTransport( theCascade );
theModel->SetMinEnergy( theFTFMin );
theModel->SetMaxEnergy( theFTFMax );
G4TheoFSGenerator* theModelDownToZero = new G4TheoFSGenerator( "FTFP" );
theModelDownToZero->SetHighEnergyGenerator( theStringModel );
theModelDownToZero->SetTransport( theCascade );
theModelDownToZero->SetMinEnergy(0*eV);
theModelDownToZero->SetMaxEnergy(theFTFMax );
G4CascadeInterface * theBERTModel = new G4CascadeInterface;
theBERTModel->SetMinEnergy( theBERTMin );
theBERTModel->SetMaxEnergy( theBERTMax );
// pi+ and pi-
G4VCrossSectionDataSet * thePiPlusData = new G4BGGPionInelasticXS( G4PionPlus::Definition() );
G4VCrossSectionDataSet * thePiMinusData = new G4BGGPionInelasticXS( G4PionMinus::Definition() );
G4VCrossSectionDataSet * theAntiNucleonData = new G4CrossSectionInelastic( new G4ComponentAntiNuclNuclearXS );
// PionPlus
G4ParticleDefinition* pion = G4PionPlus::PionPlusDefinition();
pManager = pion ->GetProcessManager();
// add process
pManager->AddDiscreteProcess(theElasticProcess);
G4HadronInelasticProcess* thePionPlusInelastic =
new G4HadronInelasticProcess( "piInelastic", G4PionPlus::Definition() );
thePionPlusInelastic->AddDataSet(thePiPlusData);
thePionPlusInelastic->RegisterMe(theBERTModel);
thePionPlusInelastic->RegisterMe(theModel);
pManager->AddDiscreteProcess(thePionPlusInelastic);
pManager->AddProcess(new G4hIonisation, ordInActive,2, 2);
G4hMultipleScattering* thePionPlusMult = new G4hMultipleScattering;
pManager->AddProcess(thePionPlusMult);
pManager->SetProcessOrdering(thePionPlusMult, idxAlongStep, 1);
pManager->SetProcessOrdering(thePionPlusMult, idxPostStep, 1);
// PionMinus
G4ParticleDefinition* pionMinus = G4PionMinus::PionMinusDefinition();
pManager = pionMinus -> GetProcessManager();
// add process
pManager->AddDiscreteProcess(theElasticProcess);
G4HadronInelasticProcess* thePionMinusInelastic =
new G4HadronInelasticProcess( "piInelastic", G4PionMinus::Definition() );
thePionMinusInelastic->AddDataSet(thePiMinusData);
thePionMinusInelastic->RegisterMe(theBERTModel);
thePionMinusInelastic->RegisterMe(theModel);
pManager->AddDiscreteProcess(thePionMinusInelastic);
pManager->AddProcess(new G4hIonisation, ordInActive,2, 2);
G4hMultipleScattering* thePionMinusMult = new G4hMultipleScattering;
pManager->AddProcess(thePionMinusMult);
pManager->SetProcessOrdering(thePionMinusMult, idxAlongStep, 1);
pManager->SetProcessOrdering(thePionMinusMult, idxPostStep, 1);
pManager->AddRestProcess(new G4HadronicAbsorptionBertini(G4PionMinus::Definition()), ordDefault);
// KaonPlus
G4ParticleDefinition* kaonPlus = G4KaonPlus::KaonPlusDefinition();
pManager = kaonPlus->GetProcessManager();
// add process
pManager->AddDiscreteProcess(theElasticProcess);
G4HadronInelasticProcess* theKaonPlusInelastic =
new G4HadronInelasticProcess( "kaon+Inelastic", G4KaonPlus::Definition() );
theKaonPlusInelastic->AddDataSet( G4CrossSectionDataSetRegistry::Instance()->
GetCrossSectionDataSet(G4ChipsKaonPlusInelasticXS::Default_Name()));
theKaonPlusInelastic->RegisterMe(theBERTModel);
theKaonPlusInelastic->RegisterMe(theModel);
pManager->AddDiscreteProcess(theKaonPlusInelastic);
pManager->AddProcess(new G4hIonisation, ordInActive,2, 2);
G4hMultipleScattering* theKaonPlusMult = new G4hMultipleScattering;
pManager->AddProcess(theKaonPlusMult);
pManager->SetProcessOrdering(theKaonPlusMult, idxAlongStep, 1);
pManager->SetProcessOrdering(theKaonPlusMult, idxPostStep, 1);
// KaonMinus
G4ParticleDefinition* kaonMinus = G4KaonMinus::KaonMinusDefinition();
pManager = kaonMinus->GetProcessManager();
// add process
pManager->AddDiscreteProcess(theElasticProcess);
G4HadronInelasticProcess* theKaonMinusInelastic =
new G4HadronInelasticProcess( "kaon-Inelastic", G4KaonMinus::Definition() );
theKaonMinusInelastic->AddDataSet( G4CrossSectionDataSetRegistry::Instance()->
GetCrossSectionDataSet(G4ChipsKaonMinusInelasticXS::Default_Name()));
theKaonMinusInelastic->RegisterMe(theBERTModel);
theKaonMinusInelastic->RegisterMe(theModel);
pManager->AddDiscreteProcess(theKaonMinusInelastic);
pManager->AddProcess(new G4hIonisation, ordInActive,2, 2);
G4hMultipleScattering* theKaonMinusMult = new G4hMultipleScattering;
pManager->AddProcess(theKaonMinusMult);
pManager->SetProcessOrdering(theKaonMinusMult, idxAlongStep, 1);
pManager->SetProcessOrdering(theKaonMinusMult, idxPostStep, 1);
pManager->AddRestProcess(new G4HadronicAbsorptionBertini(G4KaonMinus::Definition()), ordDefault);
// KaonZeroL
pManager = G4KaonZeroLong::KaonZeroLong()->GetProcessManager();
// add process
pManager->AddDiscreteProcess(theElasticProcess);
G4HadronInelasticProcess* theKaonZeroLInelastic =
new G4HadronInelasticProcess( "kaon0LInelastic", G4KaonZeroLong::Definition() );
theKaonZeroLInelastic->AddDataSet( G4CrossSectionDataSetRegistry::Instance()
->GetCrossSectionDataSet(G4ChipsKaonZeroInelasticXS::Default_Name()));
theKaonZeroLInelastic->RegisterMe(theBERTModel);
theKaonZeroLInelastic->RegisterMe(theModel);
pManager->AddDiscreteProcess(theKaonZeroLInelastic);
// KaonZeroS
pManager = G4KaonZeroShort::KaonZeroShort()->GetProcessManager();
// add process
pManager->AddDiscreteProcess(theElasticProcess);
G4HadronInelasticProcess* theKaonZeroSInelastic =
new G4HadronInelasticProcess( "kaon0SInelastic", G4KaonZeroShort::Definition() );
theKaonZeroSInelastic->AddDataSet( G4CrossSectionDataSetRegistry::Instance()
->GetCrossSectionDataSet(G4ChipsKaonZeroInelasticXS::Default_Name()));
theKaonZeroSInelastic->RegisterMe(theBERTModel);
theKaonZeroSInelastic->RegisterMe(theModel);
pManager->AddDiscreteProcess(theKaonZeroSInelastic);
// Proton
pManager = G4Proton::Proton()->GetProcessManager();
// add process
pManager->AddDiscreteProcess(theElasticProcess);
G4HadronInelasticProcess* theProtonInelastic =
new G4HadronInelasticProcess( "protonInelastic", G4Proton::Definition() );
theProtonInelastic->AddDataSet(new G4BGGNucleonInelasticXS( G4Proton::Proton() ) );
theProtonInelastic->RegisterMe(theBERTModel);
theProtonInelastic->RegisterMe(theModel);
pManager->AddDiscreteProcess(theProtonInelastic);
pManager->AddProcess(new G4hIonisation, ordInActive,2, 2);
G4hMultipleScattering* theProtonMult = new G4hMultipleScattering;
pManager->AddProcess(theProtonMult);
pManager->SetProcessOrdering(theProtonMult, idxAlongStep, 1);
pManager->SetProcessOrdering(theProtonMult, idxPostStep, 1);
// anti-Proton
pManager = G4AntiProton::AntiProton()->GetProcessManager();
// add process
pManager->AddDiscreteProcess(theElasticProcess);
G4HadronInelasticProcess* theAntiProtonInelastic =
new G4HadronInelasticProcess( "anti_protonInelastic", G4AntiProton::Definition() );
theAntiProtonInelastic->AddDataSet( theAntiNucleonData );
theAntiProtonInelastic->RegisterMe(theModelDownToZero);
pManager->AddDiscreteProcess(theAntiProtonInelastic);
pManager->AddProcess(new G4hIonisation, ordInActive,2, 2);
G4hMultipleScattering* theAntiProtonMult = new G4hMultipleScattering;
pManager->AddProcess(theAntiProtonMult);
pManager->SetProcessOrdering(theAntiProtonMult, idxAlongStep, 1);
pManager->SetProcessOrdering(theAntiProtonMult, idxPostStep, 1);
pManager->AddRestProcess(new G4HadronicAbsorptionFritiof(G4AntiProton::Definition()));
// Neutron
pManager = G4Neutron::Neutron()->GetProcessManager();
// add process
pManager->AddDiscreteProcess(theElasticProcess);
G4HadronInelasticProcess* theNeutronInelastic =
new G4HadronInelasticProcess( "neutronInelastic", G4Neutron::Definition() );
theNeutronInelastic->AddDataSet( new G4BGGNucleonInelasticXS( G4Neutron::Neutron() ));
theNeutronInelastic->RegisterMe(theBERTModel);
theNeutronInelastic->RegisterMe(theModel);
pManager->AddDiscreteProcess(theNeutronInelastic);
G4NeutronFissionProcess* theNeutronFission = new G4NeutronFissionProcess;
G4LFission* theNeutronFissionModel = new G4LFission;
theNeutronFission->RegisterMe(theNeutronFissionModel);
pManager->AddDiscreteProcess(theNeutronFission);
G4NeutronCaptureProcess* theNeutronCapture = new G4NeutronCaptureProcess;
theNeutronCapture->AddDataSet(new G4NeutronCaptureXS());
pManager->AddDiscreteProcess(theNeutronCapture);
// AntiNeutron
pManager = G4AntiNeutron::AntiNeutron()->GetProcessManager();
// add process
pManager->AddDiscreteProcess(theElasticProcess);
G4HadronInelasticProcess* theAntiNeutronInelastic =
new G4HadronInelasticProcess( "anti_neutronInelastic", G4AntiNeutron::Definition() );
theAntiNeutronInelastic->AddDataSet( theAntiNucleonData );
theAntiNeutronInelastic->RegisterMe(theModelDownToZero);
pManager->AddDiscreteProcess(theAntiNeutronInelastic);
}
@@ -1,207 +0,0 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
//
//
//
#include <iomanip>
#include "GammaRayTelIonPhysics.hh"
#include "globals.hh"
#include "G4ios.hh"
#include "G4SystemOfUnits.hh"
#include "G4HadronicParameters.hh"
#include "G4HadronElasticProcess.hh"
#include "G4HadronElastic.hh"
#include "G4HadronInelasticProcess.hh"
#include "G4hIonisation.hh"
#include "G4hMultipleScattering.hh"
#include "G4VCrossSectionDataSet.hh"
#include "G4CrossSectionDataSetRegistry.hh"
#include "G4ComponentGGNuclNuclXsc.hh"
#include "G4CrossSectionInelastic.hh"
#include "G4FTFModel.hh"
#include "G4TheoFSGenerator.hh"
#include "G4ExcitationHandler.hh"
#include "G4PreCompoundModel.hh"
#include "G4GeneratorPrecompoundInterface.hh"
#include "G4QGSMFragmentation.hh"
#include "G4ExcitedStringDecay.hh"
#include "G4CascadeInterface.hh"
GammaRayTelIonPhysics::GammaRayTelIonPhysics(const G4String& name)
: G4VPhysicsConstructor(name)
{;}
GammaRayTelIonPhysics::~GammaRayTelIonPhysics()
{;}
void GammaRayTelIonPhysics::ConstructParticle()
{;}
#include "G4ProcessManager.hh"
void GammaRayTelIonPhysics::ConstructProcess()
{
/*
// Deuteron physics
G4HadronInelasticProcess fDeuteronProcess;
// Triton physics
G4HadronInelasticProcess fTritonProcess;
// Alpha physics
G4HadronInelasticProcess fAlphaProcess;
*/
G4ProcessManager * pManager = 0;
const G4double theBERTMin = 0.0*GeV;
const G4double theBERTMax = 5.0*GeV;
const G4double theFTFMin = 4.0*GeV;
const G4double theFTFMax = G4HadronicParameters::Instance()->GetMaxEnergy();
G4FTFModel* theStringModel = new G4FTFModel;
G4ExcitedStringDecay* theStringDecay = new G4ExcitedStringDecay();
theStringModel->SetFragmentationModel( theStringDecay );
G4GeneratorPrecompoundInterface* theCascade = new G4GeneratorPrecompoundInterface();
G4TheoFSGenerator* theModel = new G4TheoFSGenerator( "FTFP" );
theModel->SetHighEnergyGenerator( theStringModel );
theModel->SetTransport( theCascade );
theModel->SetMinEnergy( theFTFMin );
theModel->SetMaxEnergy( theFTFMax );
G4CascadeInterface * theBERTModel = new G4CascadeInterface;
theBERTModel->SetMinEnergy( theBERTMin );
theBERTModel->SetMaxEnergy( theBERTMax );
// Elastic Process
G4HadronElastic* theElasticModel = new G4HadronElastic;
G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess;
theElasticProcess->RegisterMe(theElasticModel);
// Generic Ion
pManager = G4GenericIon::GenericIon()->GetProcessManager();
// add process
pManager->AddDiscreteProcess(theElasticProcess);
pManager->AddProcess(new G4hIonisation, ordInActive, 2, 2);
G4hMultipleScattering* fIonMultipleScattering = new G4hMultipleScattering;
pManager->AddProcess(fIonMultipleScattering);
pManager->SetProcessOrdering(fIonMultipleScattering, idxAlongStep, 1);
pManager->SetProcessOrdering(fIonMultipleScattering, idxPostStep, 1);
G4ComponentGGNuclNuclXsc * ggNuclNuclXsec = new G4ComponentGGNuclNuclXsc();
G4VCrossSectionDataSet * theGGNuclNuclData = new G4CrossSectionInelastic(ggNuclNuclXsec);
// Deuteron
pManager = G4Deuteron::Deuteron()->GetProcessManager();
// add process
pManager->AddDiscreteProcess(theElasticProcess);
G4HadronInelasticProcess* fDeuteronProcess =
new G4HadronInelasticProcess( "dInelastic", G4Deuteron::Definition() );
fDeuteronProcess->AddDataSet(theGGNuclNuclData);
fDeuteronProcess->RegisterMe(theBERTModel);
fDeuteronProcess->RegisterMe(theModel);
pManager->AddDiscreteProcess(fDeuteronProcess);
pManager->AddProcess(new G4hIonisation, ordInActive, 2, 2);
G4hMultipleScattering* fDeuteronMultipleScattering = new G4hMultipleScattering;
pManager->AddProcess(fDeuteronMultipleScattering);
pManager->SetProcessOrdering(fDeuteronMultipleScattering, idxAlongStep, 1);
pManager->SetProcessOrdering(fDeuteronMultipleScattering, idxPostStep, 1);
// Triton
pManager = G4Triton::Triton()->GetProcessManager();
// add process
pManager->AddDiscreteProcess(theElasticProcess);
G4HadronInelasticProcess* fTritonProcess =
new G4HadronInelasticProcess( "tInelastic", G4Triton::Definition() );
fTritonProcess->AddDataSet(theGGNuclNuclData);
fTritonProcess->RegisterMe(theBERTModel);
fTritonProcess->RegisterMe(theModel);
pManager->AddDiscreteProcess(fTritonProcess);
pManager->AddProcess(new G4hIonisation, ordInActive, 2, 2);
G4hMultipleScattering* fTritonMultipleScattering = new G4hMultipleScattering;
pManager->AddProcess(fTritonMultipleScattering);
pManager->SetProcessOrdering(fTritonMultipleScattering, idxAlongStep, 1);
pManager->SetProcessOrdering(fTritonMultipleScattering, idxPostStep, 1);
// Alpha
pManager = G4Alpha::Alpha()->GetProcessManager();
// add process
pManager->AddDiscreteProcess(theElasticProcess);
G4HadronInelasticProcess* fAlphaProcess =
new G4HadronInelasticProcess( "alphaInelastic", G4Alpha::Definition() );
fAlphaProcess->AddDataSet(theGGNuclNuclData);
fAlphaProcess->RegisterMe(theBERTModel);
fAlphaProcess->RegisterMe(theModel);
pManager->AddDiscreteProcess(fAlphaProcess);
pManager->AddProcess(new G4hIonisation, ordInActive, 2, 2);
G4hMultipleScattering* fAlphaMultipleScattering = new G4hMultipleScattering;
pManager->AddProcess(fAlphaMultipleScattering);
pManager->SetProcessOrdering(fAlphaMultipleScattering, idxAlongStep, 1);
pManager->SetProcessOrdering(fAlphaMultipleScattering, idxPostStep, 1);
// He3
pManager = G4He3::He3()->GetProcessManager();
// add process
pManager->AddDiscreteProcess(theElasticProcess);
pManager->AddProcess(new G4hIonisation, ordInActive, 2, 2);
G4hMultipleScattering* fHe3MultipleScattering = new G4hMultipleScattering;
pManager->AddProcess(fHe3MultipleScattering);
pManager->SetProcessOrdering(fHe3MultipleScattering, idxAlongStep, 1);
pManager->SetProcessOrdering(fHe3MultipleScattering, idxPostStep, 1);
}
@@ -1,111 +0,0 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
//
//
#include "GammaRayTelMuonPhysics.hh"
#include "globals.hh"
#include "G4ios.hh"
#include "G4MuonPlus.hh"
#include "G4TauPlus.hh"
#include "G4TauMinus.hh"
#include <iomanip>
#include "G4ParticleTypes.hh"
GammaRayTelMuonPhysics::GammaRayTelMuonPhysics(const G4String& name)
: G4VPhysicsConstructor(name)
{
}
GammaRayTelMuonPhysics::~GammaRayTelMuonPhysics()
{
}
void GammaRayTelMuonPhysics::ConstructParticle()
{
}
#include "G4ProcessManager.hh"
void GammaRayTelMuonPhysics::ConstructProcess()
{
G4ProcessManager * pManager = 0;
// Muon Plus Physics
pManager = G4MuonPlus::MuonPlus()->GetProcessManager();
// add processes
pManager->AddProcess(&fMuPlusIonisation, ordInActive,2, 2);
pManager->AddDiscreteProcess(&fMuPlusBremsstrahlung);
pManager->AddDiscreteProcess(&fMuPlusPairProduction);
pManager->AddProcess(&fMuPlusMultipleScattering);
pManager->SetProcessOrdering(&fMuPlusMultipleScattering, idxAlongStep, 1);
pManager->SetProcessOrdering(&fMuPlusMultipleScattering, idxPostStep, 1);
// Muon Minus Physics
pManager = G4MuonMinus::MuonMinus()->GetProcessManager();
// add processes
pManager->AddProcess(&fMuMinusIonisation, ordInActive,2, 2);
pManager->AddDiscreteProcess(&fMuMinusBremsstrahlung);
pManager->AddDiscreteProcess(&fMuMinusPairProduction);
pManager->AddProcess(&fMuMinusMultipleScattering);
pManager->SetProcessOrdering(&fMuMinusMultipleScattering, idxAlongStep, 1);
pManager->SetProcessOrdering(&fMuMinusMultipleScattering, idxPostStep, 1);
pManager->AddRestProcess(&fMuMinusCaptureAtRest);
// Tau Plus Physics
pManager = G4TauPlus::TauPlus()->GetProcessManager();
// add processes
pManager->AddProcess(&fTauPlusIonisation, ordInActive,2, 2);
pManager->AddProcess(&fTauPlusMultipleScattering);
pManager->SetProcessOrdering(&fTauPlusMultipleScattering, idxAlongStep, 1);
pManager->SetProcessOrdering(&fTauPlusMultipleScattering, idxPostStep, 1);
// Tau Minus Physics
pManager = G4TauMinus::TauMinus()->GetProcessManager();
// add processes
pManager->AddProcess(&fTauMinusIonisation, ordInActive,2, 2);
pManager->AddProcess(&fTauMinusMultipleScattering);
pManager->SetProcessOrdering(&fTauMinusMultipleScattering, idxAlongStep, 1);
pManager->SetProcessOrdering(&fTauMinusMultipleScattering, idxPostStep, 1);
}
@@ -1,77 +0,0 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// ----------------------------------------------------------------------------
// GEANT 4 - Hadrontherapy example
// ----------------------------------------------------------------------------
// Code developed by:
//
// S. Guatelli
//
// National Institute for Nuclear Physics Section of Genova, genova, Italy
//
// ----------------------------------------------------------------------------
#include "GammaRayTelParticles.hh"
#include "G4ParticleDefinition.hh"
#include "G4ParticleTypes.hh"
#include "G4ParticleTable.hh"
#include "G4LeptonConstructor.hh"
#include "G4BosonConstructor.hh"
#include "G4MesonConstructor.hh"
#include "G4BaryonConstructor.hh"
#include "G4ShortLivedConstructor.hh"
GammaRayTelParticles::GammaRayTelParticles(const G4String& name)
: G4VPhysicsConstructor(name)
{ }
GammaRayTelParticles::~GammaRayTelParticles()
{}
void GammaRayTelParticles::ConstructParticle()
{
G4LeptonConstructor lepton;
lepton.ConstructParticle();
G4BosonConstructor boson;
boson.ConstructParticle();
G4MesonConstructor meson;
meson.ConstructParticle();
G4BaryonConstructor baryon;
baryon.ConstructParticle();
G4ShortLivedConstructor shortLived;
shortLived.ConstructParticle();
// ******//
// ions //
// ******//
G4Deuteron::DeuteronDefinition();
G4Triton::TritonDefinition();
G4He3::He3Definition();
G4Alpha::AlphaDefinition();
G4GenericIon::GenericIonDefinition();
}
@@ -176,7 +176,7 @@ void GammaRayTelPhysicsList::AddPhysicsList(const G4String& name)
delete emPhysicsList;
emPhysicsList = new G4EmLivermorePolarizedPhysics();
G4cout << "THE FOLLOWING ELECTROMAGNETIC PHYSICS LIST HAS BEEN ACTIVATED: G4EmLivermorePhysics" << G4endl;
} else if (name == "Gamma_Polarized") {
} else if (name == "standard_opt4") {
emName = name;
delete emPhysicsList;
emPhysicsList = new G4EmStandardPhysics_option4();
@@ -126,17 +126,19 @@ void GammaRayTelRunAction::OpenFile()
//check that we are in a worker: returns -1 in a master and -2 in sequential
//one file per thread is produced
//Tracks_runR.N.dat, where R=run number, N=thread ID
char name[25];
if (G4Threading::G4GetThreadId() >= 0)
sprintf(name,"Tracks_run%d.%d.dat",fRunID,
G4Threading::G4GetThreadId());
std::stringstream name;
if (G4Threading::G4GetThreadId() >= 0)
name << "Tracks_run" << fRunID << "."
<< G4Threading::G4GetThreadId() << ".dat";
else
sprintf(name,"Tracks_run%d.dat",fRunID);
name << "Tracks_run" << fRunID << "."
<< G4Threading::G4GetThreadId() << ".dat";
if (!outFile)
{
outFile = new std::ofstream;
outFile->open(name);
fileName = G4String(name);
outFile->open(name.str());
fileName = G4String(name.str());
}
G4cout << "Open file: " << fileName << G4endl;
#endif