Import Geant4 11.0.0.beta source tree

This commit is contained in:
Gabriele Cosmo
2021-06-25 16:12:29 +02:00
parent c968e26a39
commit 6399a014b6
4200 changed files with 207479 additions and 237366 deletions
+74
View File
@@ -16,6 +16,80 @@ committal in the CVS repository !
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
25th June 2021 Gabriele Cosmo (examples-V10-07-06)
- Updated reference outputs according to reference tag geant4-10-07-ref-06.
- Includes tags: exhgcaltb-V10-07-02, microbeam-V10-07-03, exampleB1-V10-07-01,
STCyclotron-V10-07-04, exampleB2-V10-07-01, exdna-V10-07-00,
exampleB3-V10-07-01, exampleB4-V10-07-03, exampleB5-V10-07-01,
exEventGenerator-V10-07-03, exExtHadFissFrag-V10-07-01,
p8decayer-V10-07-02, exGeometry-V10-07-02, AuNP-V10-07-01,
VecGeomNavigation-V10-07-01, NeutronSource-V10-07-06,
exTransforms-V10-07-02, exHadronic-V10-07-02
exhadr06-V10-07-09, exhadr07-V10-07-07, OpNovice-V10-07-03,
activation-V10-07-05, rdecay01-V10-07-01, rdecay02-V10-07-01.
28th May 2021 Gabriele Cosmo (examples-V10-07-05)
- Updated reference outputs according to reference tag geant4-10-07-ref-05.
- Includes tags: amsEcal-V10-07-01, ccal-V10-07-02, hadrontherapy-V10-07-05,
STCyclotron-V10-07-03, testem1-V10-07-03, testem3-V10-07-01,
testem4-V10-07-01, testem5-V10-07-04, testem6-V10-07-00,
testem7-V10-07-02, testem11-V10-07-02, testem12-V10-07-02,
testem13-V10-07-00, testem14-V10-07-00, testem15-V10-07-01,
testem16-V10-07-00, testem17-V10-07-00, testem18-V10-07-00,
exHadronic-V10-07-01, exhadr02-V10-07-03, exhadr10-V10-07-00,
electronScattering-V10-07-00, fano-V10-07-01, fano2-V10-07-01,
LXe-V10-07-01, OpNovice-V10-07-02, WLS-V10-07-01,
exam-ext-vis-movies-V10-07-02.
30th April 2021 Gabriele Cosmo (examples-V10-07-04)
- Updated reference outputs according to reference tag geant4-10-07-ref-04.
- Includes tags: ICRP110Phantoms-V10-07-00, gammaknife-V10-07-01,
purmag-V10-07-00, STCyclotron-V10-07-01, xraytel-V10-07-00,
particleGunExample-V10-07-00, userPrimaryGenerator-V10-07-00,
exTransforms-V10-07-00, exhadr03-V10-07-02, exhadr04-V10-07-02,
exhadr06-V10-07-08, exhadr07-V10-07-06, gtherapy-V10-07-00,
NeutronSource-V10-07-05, OpNovice-V10-07-01,
activation-V10-07-04, rdecay01-V10-07-00, rdecay02-V10-07-00.
31st March 2021 Gabriele Cosmo (examples-V10-07-03)
- Updated reference outputs according to reference tag geant4-10-07-ref-03.
- Includes tags: gammaraytel-V10-07-04, gorad-V10-07-00, exhgcaltb-V10-07-00,
microelectronics-V10-07-00, STCyclotron-V10-07-00,
DMX-V10-07-05, exampleB4-V10-07-02, B03-V10-07-02,
testem1-V10-07-02, testem2-V10-07-06, testem5-V10-07-03,
testem7-V10-07-01, testem15-V10-07-00, exhadr01-V10-07-00,
channelingExample-V10-07-00, exExtHadFissFrag-V10-07-00,
exhadr02-V10-07-02, exhadr03-V10-07-01, exhadr04-V10-07-01,
exhadr06-V10-07-07, exhadr07-V10-07-05, exhadr08-V10-07-02,
exhadr09-V10-07-00, NeutronSource-V10-07-04, fano-V10-07-00,
microdosimetry-V10-07-01, splitting-V10-07-00, fano2-V10-07-00,
LXe-V10-07-00, OpNovice-V10-07-00, OpNovice2-V10-07-00,
activation-V10-07-03, exam-ext-vis-movies-V10-07-01.
28th February 2021 Gabriele Cosmo (examples-V10-07-02)
- Updated reference outputs according to reference tag geant4-10-07-ref-02.
- Includes tags: brachy-V10-07-00, gammaraytel-V10-07-00, microbeam-V10-07-01,
hadrontherapy-V10-07-03, iort_therapy-V10-07-00,
radioprotection-V10-07-00, XRayFluo-V10-07-00,
testem1-V10-07-01, testem2-V10-07-03, testem5-V10-07-02,
testem7-V10-07-00, testem9-V10-07-01, testem11-V10-07-01,
testem12-V10-07-01, exhadr06-V10-07-04, exhadr07-V10-07-03,
NeutronSource-V10-07-03, microprox-V10-07-00, svalue-V10-07-00,
microyz-V10-07-00, slowing-V10-07-00, exampleES2-V10-07-00,
ThreadsafeScorers-V10-07-00, G01-V10-07-01, expol01-V10-07-01,
exampleRE05-V10-07-00, exam-ext-vis-movies-V10-07-00,
exampleRE06-V10-07-00.
31st January 2021 Gabriele Cosmo (examples-V10-07-01)
- Updated reference outputs according to reference tag geant4-10-07-ref-01.
- Includes tags: doiPET-V10-07-00, hadrontherapy-V10-07-02, exampleB4-V10-07-00,
testem0-V10-07-00, testem1-V10-07-00, testem2-V10-07-00,
testem3-V10-07-00, testem5-V10-07-00, testem9-V10-07-00,
testem11-V10-07-00, testem12-V10-07-00, exhadr03-V10-07-00,
exhadr06-V10-07-03, exhadr07-V10-07-02, DICOM-V10-07-00,
NeutronSource-V10-07-02, chem2-V10-07-00, chem3-V10-07-00,
neuron-V10-07-00, G01-V10-07-00, activation-V10-07-02.
4th December 2020 Gabriele Cosmo (examples-V10-07-00)
- Updated reference outputs according to reference tag geant4-10-07-ref-00.
- Includes tags: doxygen-V10-06-03, exadvanced-V10-06-00, air_shower-V10-06-04,
+2 -4
View File
@@ -1,8 +1,5 @@
#---Adding all advanced examples subdirectories explicitly
cmake_minimum_required(VERSION 3.8...3.18)
if(${CMAKE_VERSION} VERSION_LESS 3.12)
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
endif()
cmake_minimum_required(VERSION 3.12...3.20)
#----------------------------------------------------------------------------
# some examples require Geant4 build with optional packages
@@ -50,3 +47,4 @@ add_subdirectory(underground_physics)
add_subdirectory(xray_fluorescence)
add_subdirectory(STCyclotron)
add_subdirectory(HGCal_testbeam)
add_subdirectory(ICRP110_HumanPhantoms)
@@ -1,7 +1,4 @@
cmake_minimum_required(VERSION 3.8...3.18)
if(${CMAKE_VERSION} VERSION_LESS 3.12)
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
endif()
cmake_minimum_required(VERSION 3.12...3.20)
include(CMakeDependentOption)
set(name ChargeExchangeMC)
File diff suppressed because it is too large Load Diff
@@ -7,6 +7,9 @@ cirrone@lns.infn.it
History file of the ChargeExchangeMC application
====================================================
24.05.2021 - B. Morgan (ChargeExchangeMC-V10-07-00)
Bump required CMake version range to 3.12...3.20, matching core Geant4
02.11.2020 - B.Morgan, Tag ChargeExchangeMC-V10-06-01
Support same CMake version range as core Geant4
@@ -1,9 +1,6 @@
#----------------------------------------------------------------------------
# Setup the project
cmake_minimum_required(VERSION 3.8...3.18 FATAL_ERROR)
if(${CMAKE_VERSION} VERSION_LESS 3.12)
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
endif()
cmake_minimum_required(VERSION 3.12...3.20)
project(HGCal_testbeam)
+15 -1
View File
@@ -14,5 +14,19 @@ track of all tags.
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
10-June-21 V. Ivanchenko (exhgcaltb-V10-07-02)
- SiliconPixelHit, SiPMHit - fixed bug in handling of NIEL energy
deposition
- CMSHadronPhysicsFTFP_BERT - added class from CMS
- CMSEmStandardPhysicsHcal - removed obsolete
- FTFPCMS_BERT_EMM - use correct combination of physics constructors
24-May-21 B. Morgan (exhgcaltb-V10-07-01)
- Bump required CMake version range to 3.12...3.20, matching core Geant4
21-Mar-21 V. Ivanchenko (exhgcaltb-V10-07-00)
- removed RanecuEngine
- updated CMS EM physics to 11.0
02-Nov-20 A. Zaborowska (exhgcaltb-V10-06-00)
- Create HGCal_testbeam example based on Thorben Quast application
- Create HGCal_testbeam example based on Thorben Quast application
@@ -50,9 +50,6 @@ int main(int argc,char** argv)
ui = new G4UIExecutive(argc, argv);
}
// Choose the Random engine
G4Random::setTheEngine(new CLHEP::RanecuEngine);
// Initialization of Run manager
auto* runManager =
G4RunManagerFactory::CreateRunManager(G4RunManagerType::Default);
@@ -23,45 +23,39 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
//---------------------------------------------------------------------------
// Author: Vladimir Ivanchenko
// Date: March 2018
//
// Hadron inelastic physics for the new CMS physics list FTFP_BERT.
// The hadron physics of FTFP_BERT has the transition between Bertini
// (BERT) intra-nuclear cascade model and Fritiof (FTF) string model
// optimized for CMS.
//
// 15.04.2021 V.Ivanchenko Hadron inelastic physics of CMS
// mirgrated to Geant4 10.7
//
//---------------------------------------------------------------------------
//
// ClassName: PhysListEm5DStandard
//
// Author: IgS 07.11.2017
//
// Modified:
// 17.11.2017 Created using PhysListEmStandard from V.Ivanchenko
//----------------------------------------------------------------------------
//
// This class provides construction of default EM standard physics which
// 5D generator model for gamma conversion
//
#ifndef CMSHadronPhysicsFTFP_BERT_h
#define CMSHadronPhysicsFTFP_BERT_h
#ifndef PhysListEm5DStandard_h
#define PhysListEm5DStandard_h 1
#include "G4VPhysicsConstructor.hh"
#include "globals.hh"
#include "G4ios.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "G4HadronPhysicsFTFP_BERT.hh"
class PhysListEm5DStandard : public G4VPhysicsConstructor
{
class CMSHadronPhysicsFTFP_BERT : public G4HadronPhysicsFTFP_BERT {
public:
explicit CMSHadronPhysicsFTFP_BERT(G4int verb);
explicit PhysListEm5DStandard(G4int ver=0, const G4String& name="");
~CMSHadronPhysicsFTFP_BERT() override;
virtual ~PhysListEm5DStandard();
virtual void ConstructParticle();
virtual void ConstructProcess();
private:
void ConstructProcess() override;
// copy constructor and hide assignment operator
CMSHadronPhysicsFTFP_BERT(CMSHadronPhysicsFTFP_BERT &) = delete;
CMSHadronPhysicsFTFP_BERT &operator=(const CMSHadronPhysicsFTFP_BERT &right) = delete;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
@@ -1,381 +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 "CMSEmStandardPhysicsHcal.hh"
#include "G4EmParameters.hh"
#include "G4LossTableManager.hh"
#include "G4ParticleDefinition.hh"
#include "G4UAtomicDeexcitation.hh"
#include "G4ComptonScattering.hh"
#include "G4GammaConversion.hh"
#include "G4PhotoElectricEffect.hh"
#include "G4CoulombScattering.hh"
#include "G4MuMultipleScattering.hh"
#include "G4UrbanMscModel.hh"
#include "G4WentzelVIModel.hh"
#include "G4eCoulombScatteringModel.hh"
#include "G4eMultipleScattering.hh"
#include "G4hMultipleScattering.hh"
#include "G4eBremsstrahlung.hh"
#include "G4eIonisation.hh"
#include "G4eplusAnnihilation.hh"
#include "G4MuBremsstrahlung.hh"
#include "G4MuIonisation.hh"
#include "G4MuPairProduction.hh"
#include "G4hBremsstrahlung.hh"
#include "G4hIonisation.hh"
#include "G4hPairProduction.hh"
#include "G4ionIonisation.hh"
#include "G4Alpha.hh"
#include "G4AntiLambdacPlus.hh"
#include "G4AntiOmegaMinus.hh"
#include "G4AntiProton.hh"
#include "G4AntiSigmaMinus.hh"
#include "G4AntiSigmaPlus.hh"
#include "G4AntiXiMinus.hh"
#include "G4AntiXicPlus.hh"
#include "G4BMesonMinus.hh"
#include "G4BMesonPlus.hh"
#include "G4DMesonMinus.hh"
#include "G4DMesonPlus.hh"
#include "G4Deuteron.hh"
#include "G4Electron.hh"
#include "G4Gamma.hh"
#include "G4GenericIon.hh"
#include "G4He3.hh"
#include "G4KaonMinus.hh"
#include "G4KaonPlus.hh"
#include "G4LambdacPlus.hh"
#include "G4MuonMinus.hh"
#include "G4MuonPlus.hh"
#include "G4OmegaMinus.hh"
#include "G4PionMinus.hh"
#include "G4PionPlus.hh"
#include "G4Positron.hh"
#include "G4Proton.hh"
#include "G4SigmaMinus.hh"
#include "G4SigmaPlus.hh"
#include "G4TauMinus.hh"
#include "G4TauPlus.hh"
#include "G4Triton.hh"
#include "G4XiMinus.hh"
#include "G4XicPlus.hh"
#include "G4BuilderType.hh"
#include "G4PhysicsListHelper.hh"
#include "G4RegionStore.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
CMSEmStandardPhysicsHcal::CMSEmStandardPhysicsHcal(G4int ver)
: G4VPhysicsConstructor("CMSEmStandard_emm"), fVerbose(ver) {
G4EmParameters *param = G4EmParameters::Instance();
param->SetDefaults();
param->SetVerbose(fVerbose);
param->SetApplyCuts(true);
param->SetMscRangeFactor(0.2);
param->SetMscStepLimitType(fMinimal);
SetPhysicsType(bElectromagnetic);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
CMSEmStandardPhysicsHcal::~CMSEmStandardPhysicsHcal() {}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void CMSEmStandardPhysicsHcal::ConstructParticle() {
// gamma
G4Gamma::Gamma();
// leptons
G4Electron::Electron();
G4Positron::Positron();
G4MuonPlus::MuonPlus();
G4MuonMinus::MuonMinus();
G4TauMinus::TauMinusDefinition();
G4TauPlus::TauPlusDefinition();
// mesons
G4PionPlus::PionPlusDefinition();
G4PionMinus::PionMinusDefinition();
G4KaonPlus::KaonPlusDefinition();
G4KaonMinus::KaonMinusDefinition();
G4DMesonMinus::DMesonMinusDefinition();
G4DMesonPlus::DMesonPlusDefinition();
G4BMesonMinus::BMesonMinusDefinition();
G4BMesonPlus::BMesonPlusDefinition();
// barions
G4Proton::Proton();
G4AntiProton::AntiProton();
G4SigmaMinus::SigmaMinusDefinition();
G4AntiSigmaMinus::AntiSigmaMinusDefinition();
G4SigmaPlus::SigmaPlusDefinition();
G4AntiSigmaPlus::AntiSigmaPlusDefinition();
G4XiMinus::XiMinusDefinition();
G4AntiXiMinus::AntiXiMinusDefinition();
G4OmegaMinus::OmegaMinusDefinition();
G4AntiOmegaMinus::AntiOmegaMinusDefinition();
G4LambdacPlus::LambdacPlusDefinition();
G4AntiLambdacPlus::AntiLambdacPlusDefinition();
G4XicPlus::XicPlusDefinition();
G4AntiXicPlus::AntiXicPlusDefinition();
// ions
G4Deuteron::Deuteron();
G4Triton::Triton();
G4He3::He3();
G4Alpha::Alpha();
G4GenericIon::GenericIonDefinition();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void CMSEmStandardPhysicsHcal::ConstructProcess() {
if (fVerbose > 0) {
G4cout << "### " << GetPhysicsName() << " Construct Processes " << G4endl;
}
// This EM builder takes default models of Geant4 10 EMV.
// Multiple scattering by Urban for all particles
// except e+e- below 100 MeV for which the Urban93 model is used
G4PhysicsListHelper *ph = G4PhysicsListHelper::GetPhysicsListHelper();
// muon & hadron bremsstrahlung and pair production
G4MuBremsstrahlung *mub = nullptr;
G4MuPairProduction *mup = nullptr;
G4hBremsstrahlung *pib = nullptr;
G4hPairProduction *pip = nullptr;
G4hBremsstrahlung *kb = nullptr;
G4hPairProduction *kp = nullptr;
G4hBremsstrahlung *pb = nullptr;
G4hPairProduction *pp = nullptr;
// muon & hadron multiple scattering
G4MuMultipleScattering *mumsc = nullptr;
G4MuMultipleScattering *pimsc = nullptr;
G4MuMultipleScattering *kmsc = nullptr;
G4MuMultipleScattering *pmsc = nullptr;
G4hMultipleScattering *hmsc = nullptr;
G4CoulombScattering *muss = nullptr;
G4CoulombScattering *piss = nullptr;
G4CoulombScattering *kss = nullptr;
G4CoulombScattering *pss = nullptr;
// high energy limit for e+- scattering models and bremsstrahlung
G4double highEnergyLimit = 100 * CLHEP::MeV;
G4Region *aRegion = G4RegionStore::GetInstance()->GetRegion("HcalRegion");
auto myParticleIterator = GetParticleIterator();
myParticleIterator->reset();
while ((*myParticleIterator)()) {
G4ParticleDefinition *particle = myParticleIterator->value();
G4String particleName = particle->GetParticleName();
if (particleName == "gamma") {
ph->RegisterProcess(new G4PhotoElectricEffect(), particle);
ph->RegisterProcess(new G4ComptonScattering(), particle);
ph->RegisterProcess(new G4GammaConversion(), particle);
} else if (particleName == "e-") {
G4eIonisation *eioni = new G4eIonisation();
eioni->SetStepFunction(0.8, 1.0 * CLHEP::mm);
G4eMultipleScattering *msc = new G4eMultipleScattering;
msc->SetStepLimitType(fMinimal);
G4UrbanMscModel *msc1 = new G4UrbanMscModel();
G4WentzelVIModel *msc2 = new G4WentzelVIModel();
G4UrbanMscModel *msc3 = new G4UrbanMscModel();
msc3->SetLocked(true);
msc1->SetHighEnergyLimit(highEnergyLimit);
msc2->SetLowEnergyLimit(highEnergyLimit);
msc3->SetHighEnergyLimit(highEnergyLimit);
msc->AddEmModel(0, msc1);
msc->AddEmModel(0, msc2);
msc->AddEmModel(-1, msc3, aRegion);
G4eCoulombScatteringModel *ssm = new G4eCoulombScatteringModel();
G4CoulombScattering *ss = new G4CoulombScattering();
ss->SetEmModel(ssm, 1);
ss->SetMinKinEnergy(highEnergyLimit);
ssm->SetLowEnergyLimit(highEnergyLimit);
ssm->SetActivationLowEnergyLimit(highEnergyLimit);
ph->RegisterProcess(msc, particle);
ph->RegisterProcess(eioni, particle);
ph->RegisterProcess(new G4eBremsstrahlung(), particle);
ph->RegisterProcess(ss, particle);
} else if (particleName == "e+") {
G4eIonisation *eioni = new G4eIonisation();
eioni->SetStepFunction(0.8, 1.0 * CLHEP::mm);
G4eMultipleScattering *msc = new G4eMultipleScattering;
msc->SetStepLimitType(fMinimal);
G4UrbanMscModel *msc1 = new G4UrbanMscModel();
G4WentzelVIModel *msc2 = new G4WentzelVIModel();
G4UrbanMscModel *msc3 = new G4UrbanMscModel();
msc1->SetHighEnergyLimit(highEnergyLimit);
msc2->SetLowEnergyLimit(highEnergyLimit);
msc3->SetHighEnergyLimit(highEnergyLimit);
msc3->SetLocked(true);
msc->AddEmModel(0, msc1);
msc->AddEmModel(0, msc2);
msc->AddEmModel(-1, msc3, aRegion);
G4eCoulombScatteringModel *ssm = new G4eCoulombScatteringModel();
G4CoulombScattering *ss = new G4CoulombScattering();
ss->SetEmModel(ssm, 1);
ss->SetMinKinEnergy(highEnergyLimit);
ssm->SetLowEnergyLimit(highEnergyLimit);
ssm->SetActivationLowEnergyLimit(highEnergyLimit);
ph->RegisterProcess(msc, particle);
ph->RegisterProcess(eioni, particle);
ph->RegisterProcess(new G4eBremsstrahlung(), particle);
ph->RegisterProcess(new G4eplusAnnihilation(), particle);
ph->RegisterProcess(ss, particle);
} else if (particleName == "mu+" || particleName == "mu-") {
if (nullptr == mub) {
mub = new G4MuBremsstrahlung();
mup = new G4MuPairProduction();
mumsc = new G4MuMultipleScattering();
mumsc->AddEmModel(0, new G4WentzelVIModel());
muss = new G4CoulombScattering();
}
ph->RegisterProcess(mumsc, particle);
ph->RegisterProcess(new G4MuIonisation(), particle);
ph->RegisterProcess(mub, particle);
ph->RegisterProcess(mup, particle);
ph->RegisterProcess(muss, particle);
} else if (particleName == "alpha" || particleName == "He3") {
ph->RegisterProcess(new G4hMultipleScattering(), particle);
ph->RegisterProcess(new G4ionIonisation(), particle);
} else if (particleName == "GenericIon") {
if (nullptr == hmsc) {
hmsc = new G4hMultipleScattering("ionmsc");
}
ph->RegisterProcess(hmsc, particle);
ph->RegisterProcess(new G4ionIonisation(), particle);
} else if (particleName == "pi+" || particleName == "pi-") {
if (nullptr == pib) {
pib = new G4hBremsstrahlung();
pip = new G4hPairProduction();
pimsc = new G4MuMultipleScattering();
pimsc->AddEmModel(0, new G4WentzelVIModel());
piss = new G4CoulombScattering();
}
ph->RegisterProcess(pimsc, particle);
ph->RegisterProcess(new G4hIonisation(), particle);
ph->RegisterProcess(pib, particle);
ph->RegisterProcess(pip, particle);
ph->RegisterProcess(piss, particle);
} else if (particleName == "kaon+" || particleName == "kaon-") {
if (nullptr == kb) {
kb = new G4hBremsstrahlung();
kp = new G4hPairProduction();
kmsc = new G4MuMultipleScattering();
kmsc->AddEmModel(0, new G4WentzelVIModel());
kss = new G4CoulombScattering();
}
ph->RegisterProcess(kmsc, particle);
ph->RegisterProcess(new G4hIonisation(), particle);
ph->RegisterProcess(kb, particle);
ph->RegisterProcess(kp, particle);
ph->RegisterProcess(kss, particle);
} else if (particleName == "proton" || particleName == "anti_proton") {
if (nullptr == pb) {
pb = new G4hBremsstrahlung();
pp = new G4hPairProduction();
pmsc = new G4MuMultipleScattering();
pmsc->AddEmModel(0, new G4WentzelVIModel());
pss = new G4CoulombScattering();
}
ph->RegisterProcess(pmsc, particle);
ph->RegisterProcess(new G4hIonisation(), particle);
ph->RegisterProcess(pb, particle);
ph->RegisterProcess(pp, particle);
ph->RegisterProcess(pss, particle);
} else if (particleName == "B+" || particleName == "B-" ||
particleName == "D+" || particleName == "D-" ||
particleName == "Ds+" || particleName == "Ds-" ||
particleName == "anti_He3" || particleName == "anti_alpha" ||
particleName == "anti_deuteron" ||
particleName == "anti_lambda_c+" ||
particleName == "anti_omega-" ||
particleName == "anti_sigma_c+" ||
particleName == "anti_sigma_c++" ||
particleName == "anti_sigma+" || particleName == "anti_sigma-" ||
particleName == "anti_triton" || particleName == "anti_xi_c+" ||
particleName == "anti_xi-" || particleName == "deuteron" ||
particleName == "lambda_c+" || particleName == "omega-" ||
particleName == "sigma_c+" || particleName == "sigma_c++" ||
particleName == "sigma+" || particleName == "sigma-" ||
particleName == "tau+" || particleName == "tau-" ||
particleName == "triton" || particleName == "xi_c+" ||
particleName == "xi-") {
if (nullptr == hmsc) {
hmsc = new G4hMultipleScattering("ionmsc");
}
ph->RegisterProcess(hmsc, particle);
ph->RegisterProcess(new G4hIonisation(), particle);
}
}
// Deexcitation
//
G4VAtomDeexcitation *de = new G4UAtomicDeexcitation();
G4LossTableManager::Instance()->SetAtomDeexcitation(de);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -23,32 +23,27 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
/// \file SteppingVerbose.hh
/// \brief Definition of the SteppingVerbose class
//
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "CMSHadronPhysicsFTFP_BERT.hh"
#include "G4SystemOfUnits.hh"
#include "G4Threading.hh"
#ifndef SteppingVerbose_h
#define SteppingVerbose_h 1
CMSHadronPhysicsFTFP_BERT::CMSHadronPhysicsFTFP_BERT(G4int)
: G4HadronPhysicsFTFP_BERT("hInelastic FTFP_BERT", false) {
minFTFP_pion = 3 * CLHEP::GeV;
maxBERT_pion = 12 * CLHEP::GeV;
minFTFP_kaon = 3 * CLHEP::GeV;
maxBERT_kaon = 6 * CLHEP::GeV;
minFTFP_proton = 3 * CLHEP::GeV;
maxBERT_proton = 6 * CLHEP::GeV;
minFTFP_neutron = 3 * CLHEP::GeV;
maxBERT_neutron = 6 * CLHEP::GeV;
}
#include "G4SteppingVerbose.hh"
CMSHadronPhysicsFTFP_BERT::~CMSHadronPhysicsFTFP_BERT() {}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class SteppingVerbose : public G4SteppingVerbose {
public:
SteppingVerbose();
~SteppingVerbose();
virtual void TrackingStarted();
virtual void StepInfo();
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
void CMSHadronPhysicsFTFP_BERT::ConstructProcess() {
if (G4Threading::IsMasterThread()) {
DumpBanner();
}
CreateModels();
}
@@ -24,8 +24,8 @@
// ********************************************************************
//
#include "FTFPCMS_BERT_EMM.hh"
#include "CMSEmStandardPhysicsHcal.hh"
#include "G4EmStandardPhysics.hh"
#include "G4DecayPhysics.hh"
#include "G4EmExtraPhysics.hh"
#include "G4HadronElasticPhysics.hh"
@@ -34,6 +34,7 @@
#include "G4StoppingPhysics.hh"
#include "G4HadronPhysicsFTFP_BERT.hh"
#include "CMSHadronPhysicsFTFP_BERT.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -46,7 +47,7 @@ FTFPCMS_BERT_EMM::FTFPCMS_BERT_EMM(G4int ver) {
<< "FTFP_BERT_EMM " << G4endl;
// EM Physics
RegisterPhysics(new CMSEmStandardPhysicsHcal(ver));
RegisterPhysics(new G4EmStandardPhysics(ver));
// Synchroton Radiation & GN Physics
RegisterPhysics(new G4EmExtraPhysics(ver));
@@ -57,7 +58,8 @@ FTFPCMS_BERT_EMM::FTFPCMS_BERT_EMM(G4int ver) {
// Hadron Elastic scattering
RegisterPhysics(new G4HadronElasticPhysics(ver));
RegisterPhysics(new G4HadronPhysicsFTFP_BERT(ver));
// Hadron Inelastic physics
RegisterPhysics(new CMSHadronPhysicsFTFP_BERT(ver));
// Stopping Physics
RegisterPhysics(new G4StoppingPhysics(ver));
@@ -40,7 +40,7 @@ void SiPMHit::Digitise(const G4double aTimeWindow,
const G4double aToaThreshold) {
// process energy deposits
if (fEdep.size() == 0) {
if (fEdep.empty()) {
fIsValidHit = false;
return;
}
@@ -53,7 +53,7 @@ void SiPMHit::Digitise(const G4double aTimeWindow,
G4double firstHitTime = fEdep[0].second;
fEdepDigi = 0;
for (size_t i = 0; i < fEdep.size(); i++) {
for (size_t i = 0; i < fEdep.size(); ++i) {
if (aTimeWindow < 0 || fEdep[i].second < firstHitTime + aTimeWindow)
fEdepDigi += fEdep[i].first;
#ifdef DEBUG
@@ -68,7 +68,7 @@ void SiPMHit::Digitise(const G4double aTimeWindow,
fIsValidHit = (fEdepDigi > 0);
// non ionizing part, does not contribute to TOAs
if (fEdepNonIonizing.size() == 0)
if (fEdepNonIonizing.empty())
return;
std::sort(fEdepNonIonizing.begin(), fEdepNonIonizing.end(),
@@ -78,7 +78,7 @@ void SiPMHit::Digitise(const G4double aTimeWindow,
});
fEdepNonIonizingDigi = 0;
for (size_t i = 0; i < fEdep.size(); i++) {
for (size_t i = 0; i < fEdepNonIonizing.size(); ++i) {
if (aTimeWindow == -1 ||
fEdepNonIonizing[i].second < firstHitTime + aTimeWindow)
fEdepNonIonizingDigi += fEdepNonIonizing[i].first;
@@ -47,7 +47,7 @@ void SiliconPixelHit::Digitise(const G4double aTimeWindow,
const G4double aToaThreshold) {
// process energy deposits
if (fEdep.size() == 0) {
if (fEdep.empty()) {
fIsValidHit = false;
return;
}
@@ -60,7 +60,7 @@ void SiliconPixelHit::Digitise(const G4double aTimeWindow,
G4double firstHitTime = fEdep[0].second;
fEdepDigi = 0;
for (size_t i = 0; i < fEdep.size(); i++) {
for (size_t i = 0; i < fEdep.size(); ++i) {
if (aTimeWindow < 0 || fEdep[i].second < firstHitTime + aTimeWindow)
fEdepDigi += fEdep[i].first;
if (fEdepDigi > aToaThreshold) {
@@ -72,7 +72,7 @@ void SiliconPixelHit::Digitise(const G4double aTimeWindow,
fIsValidHit = (fEdepDigi > 0);
// non ionizing part, does not contribute to TOAs
if (fEdepNonIonizing.size() == 0)
if (fEdepNonIonizing.empty())
return;
std::sort(fEdepNonIonizing.begin(), fEdepNonIonizing.end(),
@@ -82,7 +82,7 @@ void SiliconPixelHit::Digitise(const G4double aTimeWindow,
});
fEdepNonIonizingDigi = 0;
for (size_t i = 0; i < fEdep.size(); i++) {
for (size_t i = 0; i < fEdepNonIonizing.size(); ++i) {
if (aTimeWindow == -1 ||
fEdepNonIonizing[i].second < firstHitTime + aTimeWindow)
fEdepNonIonizingDigi += fEdepNonIonizing[i].first;
@@ -1,9 +1,6 @@
#----------------------------------------------------------------------------
# Setup the project
cmake_minimum_required(VERSION 3.8...3.18 FATAL_ERROR)
if(${CMAKE_VERSION} VERSION_LESS 3.12)
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
endif()
cmake_minimum_required(VERSION 3.12...3.20)
project(ICRPphantoms)
@@ -49,7 +46,7 @@ add_dependencies(ICRP110phantoms ICRPdata)
# relies on these scripts being in the current working directory.
#
set(ICRPphantoms_SCRIPTS
female.in female_head.in female_trunk.in male.in male_head.in male_trunk.in vis.mac primary.mac ColourMap.dat openGLVis.mac
female.in female_head.in female_trunk.in male.in male_head.in male_trunk.in vis.mac primary.mac ColourMap.dat openGLVis.mac g4views/g4_00.g4view g4views/g4_01.g4view
# ICRPdata/Data.dat
# "ICRPdata/ICRP110_g4dat/AF/*.g4dat"
# "ICRPdata/ICRP110_g4dat/AM/*.g4dat"
@@ -7,10 +7,16 @@
Category History file
---------------------
24.05.2021 - B. Morgan (ICRP110Phantoms-V10-07-01)
- Bump required CMake version range to 3.12...3.20, matching core Geant4
29.03.2021 - J. Allison; ICRP110Phantoms-V10-07-00
Introduced ICRP110PhantomVisAction
See vis.mac for how to activate
15.11.2020 - S. Guatelli; ICRP110Phantoms-V10-06-01
Migration to G4RunManagerFactory
27.10.2020 - S. Guatelli; ICRP110Phantoms-V10-06-00
New advanced example modelling ICRP110 phantom models
@@ -36,6 +36,7 @@
#include "ICRP110PhantomActionInitialization.hh"
#include "G4ScoringManager.hh"
#include "ICRP110UserScoreWriter.hh"
#include "ICRP110PhantomVisAction.hh"
#include "QGSP_BIC_HP.hh"
#include "G4RunManagerFactory.hh"
@@ -63,6 +64,8 @@ int main(int argc,char** argv)
// runManager -> SetUserInitialization(new ICRP110PhantomPhysicsList);
G4VisManager* visManager = new G4VisExecutive;
visManager->RegisterRunDurationUserVisAction
("phantom",new ICRP110PhantomVisAction(userPhantom));
visManager -> Initialize();
ICRP110PhantomActionInitialization* actions = new ICRP110PhantomActionInitialization();
@@ -0,0 +1,52 @@
#
# Camera and lights commands
/vis/viewer/set/viewpointVector -0.875284 -0.455741 0.162104
/vis/viewer/set/upVector 0.473127 -0.736972 0.482725
/vis/viewer/set/projection orthogonal
/vis/viewer/zoomTo 2.5393
/vis/viewer/scaleTo 1 1 1
/vis/viewer/set/targetPoint 0 0 0 fm
# Note that if you have not set a target point, the vis system sets
# a target point based on the scene - plus any panning and dollying -
# so don't be alarmed by strange coordinates here.
/vis/viewer/dollyTo 0 fm
/vis/viewer/set/lightsMove object
/vis/viewer/set/lightsVector 1 1 1
/vis/viewer/set/rotationStyle freeRotation
/vis/viewer/set/background 0 0 0 1
/vis/viewer/set/defaultColour 1 1 1 1
/vis/viewer/set/defaultTextColour 0 0 1 1
#
# Drawing style commands
/vis/viewer/set/style surface
/vis/viewer/set/hiddenEdge false
/vis/viewer/set/auxiliaryEdge false
/vis/viewer/set/hiddenMarker true
/vis/viewer/set/globalLineWidthScale 1
/vis/viewer/set/globalMarkerScale 1
/vis/viewer/set/numberOfCloudPoints 10000
#
# Scene-modifying commands
/vis/viewer/set/culling global true
/vis/viewer/set/culling invisible true
/vis/viewer/set/culling density false
/vis/viewer/set/culling coveredDaughters false
/vis/viewer/colourByDensity 0 g/cm3
/vis/viewer/set/sectionPlane off
/vis/viewer/set/cutawayMode union
/vis/viewer/clearCutawayPlanes
/vis/viewer/addCutawayPlane -10 -0 -0 cm 1 0 0
/vis/viewer/set/explodeFactor 1 0 0 0 fm
/vis/viewer/set/lineSegmentsPerCircle 24
#
# Touchable commands
# None
/vis/viewer/clearVisAttributesModifiers
#
# Time window commands
/vis/viewer/set/timeWindow/startTime -1e+100 ns
/vis/viewer/set/timeWindow/endTime 1e+100 ns
/vis/viewer/set/timeWindow/fadeFactor 0
/vis/viewer/set/timeWindow/displayHeadTime false
/vis/viewer/set/timeWindow/displayLightFront false
@@ -0,0 +1,52 @@
#
# Camera and lights commands
/vis/viewer/set/viewpointVector -0.875284 -0.455741 0.162104
/vis/viewer/set/upVector 0.473127 -0.736972 0.482725
/vis/viewer/set/projection orthogonal
/vis/viewer/zoomTo 2.5393
/vis/viewer/scaleTo 1 1 1
/vis/viewer/set/targetPoint 0 0 0 fm
# Note that if you have not set a target point, the vis system sets
# a target point based on the scene - plus any panning and dollying -
# so don't be alarmed by strange coordinates here.
/vis/viewer/dollyTo 0 fm
/vis/viewer/set/lightsMove object
/vis/viewer/set/lightsVector 1 1 1
/vis/viewer/set/rotationStyle freeRotation
/vis/viewer/set/background 0 0 0 1
/vis/viewer/set/defaultColour 1 1 1 1
/vis/viewer/set/defaultTextColour 0 0 1 1
#
# Drawing style commands
/vis/viewer/set/style surface
/vis/viewer/set/hiddenEdge false
/vis/viewer/set/auxiliaryEdge false
/vis/viewer/set/hiddenMarker true
/vis/viewer/set/globalLineWidthScale 1
/vis/viewer/set/globalMarkerScale 1
/vis/viewer/set/numberOfCloudPoints 10000
#
# Scene-modifying commands
/vis/viewer/set/culling global true
/vis/viewer/set/culling invisible true
/vis/viewer/set/culling density false
/vis/viewer/set/culling coveredDaughters false
/vis/viewer/colourByDensity 0 g/cm3
/vis/viewer/set/sectionPlane off
/vis/viewer/set/cutawayMode union
/vis/viewer/clearCutawayPlanes
/vis/viewer/addCutawayPlane 10 0 0 cm 1 0 0
/vis/viewer/set/explodeFactor 1 0 0 0 fm
/vis/viewer/set/lineSegmentsPerCircle 24
#
# Touchable commands
# None
/vis/viewer/clearVisAttributesModifiers
#
# Time window commands
/vis/viewer/set/timeWindow/startTime -1e+100 ns
/vis/viewer/set/timeWindow/endTime 1e+100 ns
/vis/viewer/set/timeWindow/fadeFactor 0
/vis/viewer/set/timeWindow/displayHeadTime false
/vis/viewer/set/timeWindow/displayLightFront false
@@ -53,11 +53,18 @@ class ICRP110PhantomConstruction : public G4VUserDetectorConstruction
ICRP110PhantomConstruction();
~ICRP110PhantomConstruction();
G4VPhysicalVolume* Construct();
G4VPhysicalVolume* GetMotherVolume() {return fMotherVolume;}
G4VPhysicalVolume* GetPhantumContainer() {return fPhantomContainer;}
inline G4int GetNumberVoxelX(){return fNVoxelX;};
inline G4int GetNumberVoxelY() {return fNVoxelY;};
inline G4int GetNumberVoxelZ() {return fNVoxelZ;};
inline G4double GetVoxelHalfDimX(){return fVoxelHalfDimX;};
inline G4double GetVoxelHalfDimY() {return fVoxelHalfDimY;};
inline G4double GetVoxelHalfDimZ() {return fVoxelHalfDimZ;};
void SetPhantomSex(G4String);
void SetPhantomSection(G4String);
@@ -68,6 +75,8 @@ class ICRP110PhantomConstruction : public G4VUserDetectorConstruction
ICRP110PhantomMaterial_Male* fMaterial_Male;
ICRP110PhantomMessenger* fMessenger;
// std::vector<G4Material*> fMaterials;
G4VPhysicalVolume* fMotherVolume;
G4VPhysicalVolume* fPhantomContainer;
G4int fNVoxelX;
G4int fNVoxelY;
G4int fNVoxelZ;
@@ -23,51 +23,43 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// Authors: M. Large, S. Guatelli - University of Wollongong, Australia
// This class developed by John Allison, March 2021
//
//
// **********************************
// * *
// * BrachyMaterial.hh *
// * *
// **********************************
//
//Code developed by: Susanna Guatelli, Albert Le
//
// This class manages the elements and materials
//
#ifndef BrachyMaterial_H
#define BrachyMaterial_H 1
#include "globals.hh"
#ifndef ICRP110PhantomPseudoScene_h
#define ICRP110PhantomPseudoScene_h 1
#include "G4PseudoScene.hh"
#include "G4Colour.hh"
#include "G4ThreeVector.hh"
#include <map>
class G4PhysicalVolumeModel;
class G4Material;
class BrachyMaterial
{
class ICRP110PhantomPseudoScene: public G4PseudoScene
{
public:
BrachyMaterial();
~ BrachyMaterial();
public:
void DefineMaterials();
G4Material* GetMat(G4String); //returns the material
// Given a world volume, fill a multimap provided by the instantiator
ICRP110PhantomPseudoScene
(G4PhysicalVolumeModel* // input...the following are outputs
,std::multimap<const G4Material*,G4ThreeVector>& positionByMaterial
,std::map <const G4Material*,G4Colour>& colourByMaterial);
~ICRP110PhantomPseudoScene();
using G4PseudoScene::AddSolid; // except for...
void AddSolid(const G4Box&);
void ProcessVolume(const G4VSolid&);
const std::multimap<const G4Material*,G4ThreeVector>& GetPositionByMaterial()
{return fPositionByMaterial;}
const std::map <const G4Material*,G4Colour>& GetColourByMaterial()
{return fColourByMaterial;}
private:
G4Material* fW;
G4Material* fPlexiglass;
G4Material* fPb;
G4Material* fIr192;
G4Material* fTi;
G4Material* fAir;
G4Material* fH2O;
G4Material* fSoft;
G4Material* fSteel;
G4Material* fMat304steel;
G4Material* fAu;
G4Material* fI;
G4Material* fCeramic;
G4Material* fVacuum;
G4Material* fBone;
G4Material* fMuscle;
G4Material* fAg;
G4PhysicalVolumeModel* fpPVModel;
std::multimap<const G4Material*,G4ThreeVector>& fPositionByMaterial;
std::map <const G4Material*,G4Colour>& fColourByMaterial;
};
#endif
@@ -0,0 +1,56 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
// Authors: M. Large, S. Guatelli - University of Wollongong, Australia
// This class developed by John Allison, March 2021
//
#ifndef ICRP110PhantomVisAction_h
#define ICRP110PhantomVisAction_h 1
#include "G4VUserVisAction.hh"
#include "G4Colour.hh"
class G4Material;
#include <set>
class ICRP110PhantomConstruction;
class ICRP110PhantomVisAction: public G4VUserVisAction
{
public:
ICRP110PhantomVisAction(ICRP110PhantomConstruction* dc)
: fpDetectorConstruction(dc) {}
void Draw();
private:
ICRP110PhantomConstruction* fpDetectorConstruction;
std::multimap<const G4Material*,G4ThreeVector> fPositionByMaterial;
std::map <const G4Material*,G4Colour> fColourByMaterial;
std::set <const G4Material*> fSetOfMaterials;
};
#endif
@@ -51,6 +51,7 @@
#include "ICRP110PhantomNestedParameterisation.hh"
ICRP110PhantomConstruction::ICRP110PhantomConstruction():
fMotherVolume(nullptr), fPhantomContainer(nullptr),
fNVoxelX(0), fNVoxelY(0), fNVoxelZ(0),
fVoxelHalfDimX(0), fVoxelHalfDimY(0), fVoxelHalfDimZ(0),
fMinX(0),fMaxX(0), fMinY(0), fMaxY(0),
@@ -214,16 +215,16 @@ if(fSex == "female"){
G4double worldSize = 2.*m ;
G4Box* world = new G4Box("world", worldSize, worldSize, worldSize);
G4LogicalVolume* logicWorld = new G4LogicalVolume(world,
matAir,
"logicalWorld", 0, 0,0);
G4LogicalVolume* logicWorld = new G4LogicalVolume(world,
matAir,
"logicalWorld", 0, 0,0);
G4VPhysicalVolume* motherVolume = new G4PVPlacement(0,G4ThreeVector(),
"physicalWorld",
logicWorld,
0,
false,
0);
fMotherVolume = new G4PVPlacement(0,G4ThreeVector(),
"physicalWorld",
logicWorld,
0,
false,
0);
logicWorld -> SetVisAttributes(G4VisAttributes::GetInvisible());
@@ -258,7 +259,8 @@ if(fSex == "female"){
G4cout << " placing voxel container volume at " << posCentreVoxels << G4endl;
new G4PVPlacement(0, // rotation
fPhantomContainer
= new G4PVPlacement(0, // rotation
posCentreVoxels,
fContainer_logic, // The logic volume
"phantomContainer", // Name
@@ -312,7 +314,7 @@ if(fSex == "female"){
param -> SetMaterialIndices(fMateIDs); // fMateIDs is the vector with Material ID associated to each voxel, from ASCII input data files.
param -> SetNoVoxel(fNVoxelX,fNVoxelY,fNVoxelZ);
return motherVolume;
return fMotherVolume;
}
void ICRP110PhantomConstruction::ReadPhantomData(const G4String& sex, const G4String& section)
@@ -806,4 +808,4 @@ void ICRP110PhantomConstruction::SetPhantomSection(G4String newSection)
if ((fSection != "head") && (fSection != "trunk") && (fSection != "full"))
G4cout << fSection << " is not defined!" << G4endl;
}
}
@@ -0,0 +1,67 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
// Code developed by:
// S.Guatelli, M. Large and A. Malaroda, University of Wollongong
// This class developed by John Allison, March 2021
//
#include "ICRP110PhantomPseudoScene.hh"
#include "G4PhysicalVolumeModel.hh"
#include "G4LogicalVolume.hh"
#include "G4Material.hh"
// Given a world volume, fill maps provided by the instantiator
ICRP110PhantomPseudoScene::ICRP110PhantomPseudoScene
(G4PhysicalVolumeModel* pvm // input...the following are outputs
,std::multimap<const G4Material*,G4ThreeVector>& positionByMaterial
,std::map <const G4Material*,G4Colour>& colourByMaterial)
: fpPVModel(pvm)
, fPositionByMaterial(positionByMaterial)
, fColourByMaterial (colourByMaterial)
{}
ICRP110PhantomPseudoScene::~ICRP110PhantomPseudoScene()
{}
void ICRP110PhantomPseudoScene::AddSolid(const G4Box&)
{
const G4Material* material = fpPVModel->GetCurrentLV()->GetMaterial();
const G4Colour& colour = fpPVModel->GetCurrentLV()->GetVisAttributes()->GetColour();
const G4ThreeVector& position = fpCurrentObjectTransformation->getTranslation();
// Fill maps for vis action
fPositionByMaterial.insert(std::make_pair(material,position));
fColourByMaterial[material] = colour;
}
void ICRP110PhantomPseudoScene::ProcessVolume(const G4VSolid&)
{
G4ExceptionDescription ed;
ed << "ICRP110PhantomPseudoScene::ProcessVolume called for solid that is NOT a G4Box.";
G4Exception("ICRP110PhantomPseudoScene::ProcessVolume", "ICRP110Phantom_0000",
FatalException, ed, "Contact @allison");
}
@@ -0,0 +1,126 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
// Code developed by:
// S.Guatelli, M. Large and A. Malaroda, University of Wollongong
// This class developed by John Allison, March 2021
//
#include "ICRP110PhantomVisAction.hh"
#include "G4VisManager.hh"
#include "ICRP110PhantomConstruction.hh"
#include "ICRP110PhantomPseudoScene.hh"
#include "G4PhysicalVolumeModel.hh"
#include "G4Polymarker.hh"
#include "G4SystemOfUnits.hh"
#include "Randomize.hh"
void ICRP110PhantomVisAction::Draw ()
{
// Get actual vis manager
G4VVisManager* pVisManager = G4VVisManager::GetConcreteInstance();
if (!pVisManager) return;
auto container = fpDetectorConstruction->GetPhantumContainer();
static G4bool first = true;
if (first && container) {
first = false;
// Use ICRP110PhantomPseudoScene to build dataset in fPositionByColour
G4ModelingParameters tmpMP;
tmpMP.SetCulling(true); // This avoids drawing transparent...
tmpMP.SetCullingInvisible(true); // ... or invisble volumes.
const G4bool useFullExtent = true; // To avoid clculating the extent
G4PhysicalVolumeModel tmpPVModel
(container,
G4PhysicalVolumeModel::UNLIMITED,
G4Transform3D(),
&tmpMP,
useFullExtent);
ICRP110PhantomPseudoScene tmpScene
(&tmpPVModel
,fPositionByMaterial
,fColourByMaterial);
tmpPVModel.DescribeYourselfTo(tmpScene);
// Make list of found materials
for (const auto& entry: fColourByMaterial) {
fSetOfMaterials.insert(entry.first);
}
for (const auto& material: fSetOfMaterials) {
G4cout << "fSetOfMaterials: " << material->GetName() << G4endl;
}
}
// Seems the quantities in ICRP110PhantomConstruction don't have units
const G4double voxelHalfDimX = fpDetectorConstruction->GetVoxelHalfDimX()*mm;
const G4double voxelHalfDimY = fpDetectorConstruction->GetVoxelHalfDimY()*mm;
const G4double voxelHalfDimZ = fpDetectorConstruction->GetVoxelHalfDimZ()*mm;
static G4bool firstPrint = true;
G4int nDotsTotal = 0;
const G4int nDotsPerPositionMin = 1;
const G4int nDotsPerPositionMax = 10;
const G4double densityMin = 1.*g/cm3;
const G4double densityMax = 3.*g/cm3;;
for (const auto& material: fSetOfMaterials) {
auto& colour = fColourByMaterial[material];
G4int nDots = 0;
G4Polymarker dots;
dots.SetVisAttributes(G4Colour(colour));
dots.SetMarkerType(G4Polymarker::dots);
dots.SetSize(G4VMarker::screen,1.);
dots.SetInfo(material->GetName());
const G4double currentDensity = material->GetDensity();
const auto range = fPositionByMaterial.equal_range(material);
for (auto posByMat = range.first; posByMat != range.second; ++posByMat) {
G4int nDotsPerPosition
= nDotsPerPositionMin
+ (nDotsPerPositionMax-nDotsPerPositionMin)
*(currentDensity-densityMin)/(densityMax-densityMin);
nDotsPerPosition = std::max(nDotsPerPositionMin,nDotsPerPosition);
nDotsPerPosition = std::min(nDotsPerPositionMax,nDotsPerPosition);
for (G4int i = 0; i < nDotsPerPosition; ++i) {
const G4double x = posByMat->second.getX() + (2.*G4UniformRand()-1.)*voxelHalfDimX;
const G4double y = posByMat->second.getY() + (2.*G4UniformRand()-1.)*voxelHalfDimY;
const G4double z = posByMat->second.getZ() + (2.*G4UniformRand()-1.)*voxelHalfDimZ;
dots.push_back(G4ThreeVector(x,y,z));
++nDots;
}
}
pVisManager->Draw(dots);
if (firstPrint) {
G4cout
<< "Number of dots for material " << material->GetName()
<< ", colour " << colour
<< ": " << nDots << G4endl;
}
nDotsTotal += nDots;
}
if (firstPrint) {
G4cout << "Total number of dots: " << nDotsTotal << G4endl;
firstPrint = false;
}
}
@@ -1,5 +1,7 @@
# Use this open statement to create an OpenGL view:
/phantom/setPhantomSection head
/run/initialize
#/vis/open OGLSX
/vis/open OGL 600x600-0+0
#
@@ -23,28 +25,52 @@
# Define background colour (comment out for black as default)
#/vis/viewer/set/background white
#
# Draw geometry:
/vis/drawVolume worlds
# Draw phantom
/vis/drawVolume
#
#
# Alternatively comment out "/vis/drawVolume" and un-comment the following
# commands
# Temporarily switch culling off so even a "transparent/invisible" volume
# is drawn
#/vis/viewer/set/culling global false
# phantomContainer is transparent - but defines "extent"
#/vis/drawVolume phantomContainer ! 0
#/vis/viewer/set/culling global true
# Add vis user action
#/vis/scene/add/userAction
# You could try making all materials (except air) opaque (last quantity) in
# ColorMap.dat.
# You could try "/vis/viewer/interpolate g4views/* 200", which runs a cutaway
# plane through the head, based on 2 view files - g4_00.g4view and
# g4_01.g4view in subdirectory g4views.
# (See examples/extended/visualization/movies for how to create view
# files for interpolation.)
# Also you may visualise the whole body by changing "head" to "full"
# at the head of this file before /run/initialize.
#
#
# Specify view angle:
/vis/viewer/set/viewpointThetaPhi 85 -75 deg
#/vis/viewer/set/lightsMove with-camera
#
# Set Voxels number to be visualised
/vis/ogl/set/displayListLimit 4000000
/vis/ogl/set/displayListLimit 9999999
# Specify zoom value:
#/vis/viewer/zoom 2.
#
# Specify style (surface or wireframe):
# Specify style (surface or wireframe, etc.):
#/vis/viewer/set/style wireframe
/vis/viewer/set/rotationStyle freeRotation
/vis/viewer/set/hiddenMarker true
#
# Draw coordinate axes:
#/vis/scene/add/axes 0 0 0 1 m
/vis/scene/add/axes
#
# Draw smooth trajectories at end of event, showing trajectory points
# Draw trajectories at end of event, showing trajectory points
# as markers 2 pixels wide:
/vis/scene/add/trajectories smooth
/vis/scene/add/trajectories
/vis/modeling/trajectories/create/drawByCharge
/vis/modeling/trajectories/drawByCharge-0/default/setDrawStepPts true
/vis/modeling/trajectories/drawByCharge-0/default/setStepPtsSize 2
+1 -4
View File
@@ -1,9 +1,6 @@
#----------------------------------------------------------------------------
# Setup the project
cmake_minimum_required(VERSION 3.8...3.18)
if(${CMAKE_VERSION} VERSION_LESS 3.12)
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
endif()
cmake_minimum_required(VERSION 3.12...3.20)
project(STCyclotron)
#----------------------------------------------------------------------------
# Find Geant4 package, activating all available UI and Vis drivers by default
+12 -2
View File
@@ -8,11 +8,21 @@
Category History file
---------------------
21.04.2021 - Gabriele Cosmo STCyclotron-V10-06-04
22.06.2021 - Gabriele Cosmo (STCyclotron-V10-07-04)
- Use new CLHEP units for minute, hour, day, year in STCyclotronPhysicsList.
26.05.2021 - Dennis Wright (STCyclotron-V10-07-03)
- STCyclotronSensitiveTarget.cc: remove #include of deprecated file
G4RadioactiveDecay.hh
24.05.2021 - B. Morgan (STCyclotron-V10-07-02)
- Bump required CMake version range to 3.12...3.20, matching core Geant4
21.04.2021 - Gabriele Cosmo STCyclotron-V10-07-01
- Fixed gui.mac macro to invoke init_parameters.mac.
Addressing GitHub PR#25.
18.03.2021 - Gunter Folger STCyclotron-V10-06-03
18.03.2021 - Gunter Folger STCyclotron-V10-07-00
- Update README to recommend G4TENDL 1.3.2
12.11.2020 - S. Guatelli STCyclotron-V10-06-02
@@ -61,20 +61,8 @@
#include "G4NuclideTable.hh"
STCyclotronPhysicsList::STCyclotronPhysicsList(STCyclotronDetectorConstruction* det)
: G4VModularPhysicsList(){
//add new units for radioActive decays
new G4UnitDefinition( "millielectronVolt", "meV", "Energy", 1.e-3*eV);
const G4double minute = 60*second;
const G4double hour = 60*minute;
const G4double day = 24*hour;
const G4double year = 365*day;
new G4UnitDefinition("minute", "min", "Time", minute);
new G4UnitDefinition("hour", "h", "Time", hour);
new G4UnitDefinition("day", "d", "Time", day);
new G4UnitDefinition("year", "y", "Time", year);
: G4VModularPhysicsList()
{
// Mandatory for G4NuclideTable
// Half-life threshold must be set small or many short-lived isomers
// will not be assigned life times (default to 0)
@@ -45,7 +45,6 @@
#include "G4ParticleDefinition.hh"
#include "G4DecayTable.hh"
#include "G4VDecayChannel.hh"
#include "G4RadioactiveDecay.hh"
#include "G4TrackVector.hh"
#include "G4VProcess.hh"
#include "G4Tubs.hh"
+1 -4
View File
@@ -1,9 +1,6 @@
#----------------------------------------------------------------------------
# Setup the project
cmake_minimum_required(VERSION 3.8...3.18)
if(${CMAKE_VERSION} VERSION_LESS 3.12)
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
endif()
cmake_minimum_required(VERSION 3.12...3.20)
project(air_shower)
#----------------------------------------------------------------------------
+6 -4
View File
@@ -6,13 +6,15 @@
History file
------------
14.11.2020 - S. Guatelli(air_shower-V10-06-04)
Migration to G4RunFactoryManager
24.05.2021 - B. Morgan (air_shower-V10-07-00)
Bump required CMake version range to 3.12...3.20, matching core Geant4
14.11.2020 - S. Guatelli(air_shower-V10-06-04)
Migration to G4RunFactoryManager
05.11.2020 - B.Tome (air_shower-V10-06-03)
Output results histograms to ROOT file
Add ROOT macro file to plot histograms
Add ROOT macro file to plot histograms
03.11.2020 - D.Sawkey (air_shower-V10-06-02)
Create material properties using std::vectors
+128 -118
View File
@@ -4,8 +4,14 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo
!!! WARNING - FPE detection is activated !!!
############################################
################################
!!! G4Backtrace is activated !!!
################################
**************************************************************
Geant4 version Name: geant4-10-07-patch-02 (11-June-2021)
Geant4 version Name: geant4-10-07-ref-06 (25-June-2021)
Copyright : Geant4 Collaboration
References : NIM A 506 (2003), 250-303
: IEEE-TNS 53 (2006), 270-278
@@ -188,48 +194,48 @@ physicsList->setCut() start.
phot: for gamma SubType=12 BuildTable=0
LambdaPrime table from 200 keV to 100 TeV in 61 bins
===== EM models for the G4Region DefaultRegionForTheWorld ======
LivermorePhElectric : Emin= 0 eV Emax= 100 TeV SauterGavrila Fluo
LivermorePhElectric : Emin= 0 meV Emax= 100 TeV SauterGavrila Fluo
compt: for gamma SubType=13 BuildTable=1
Lambda table from 100 eV to 1 MeV, 7 bins/decade, spline: 1
LambdaPrime table from 1 MeV to 100 TeV in 56 bins
===== EM models for the G4Region DefaultRegionForTheWorld ======
Klein-Nishina : Emin= 0 eV Emax= 100 TeV
Klein-Nishina : Emin= 0 meV Emax= 100 TeV
conv: for gamma SubType=14 BuildTable=1
Lambda table from 1.022 MeV to 100 TeV, 18 bins/decade, spline: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
BetheHeitlerLPM : Emin= 0 eV Emax= 100 TeV ModifiedTsai
BetheHeitlerLPM : Emin= 0 meV Emax= 100 TeV ModifiedTsai
Rayl: for gamma SubType=11 BuildTable=1
Lambda table from 100 eV to 100 keV, 7 bins/decade, spline: 0
LambdaPrime table from 100 keV to 100 TeV in 63 bins
===== EM models for the G4Region DefaultRegionForTheWorld ======
LivermoreRayleigh : Emin= 0 eV Emax= 100 TeV CullenGenerator
LivermoreRayleigh : Emin= 0 meV Emax= 100 TeV CullenGenerator
msc: for e- SubType= 10
===== EM models for the G4Region DefaultRegionForTheWorld ======
UrbanMsc : Emin= 0 eV Emax= 100 MeV Nbins=42 100 eV - 100 MeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llimit=1
UrbanMsc : Emin= 0 meV Emax= 100 MeV Nbins=42 100 eV - 100 MeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
WentzelVIUni : Emin= 100 MeV Emax= 100 TeV Nbins=42 100 MeV - 100 TeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llimit=1
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
eIoni: for e- SubType=2
eIoni: for e- XStype:1 SubType=2
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
StepFunction=(0.2, 1 mm), integ: 1, fluct: 1, linLossLim= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
MollerBhabha : Emin= 0 eV Emax= 100 TeV
MollerBhabha : Emin= 0 meV Emax= 100 TeV
eBrem: for e- SubType=3
eBrem: for e- XStype:4 SubType=3
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
LPM flag: 1 for E > 1 GeV, VertexHighEnergyTh(GeV)= 100000
===== EM models for the G4Region DefaultRegionForTheWorld ======
eBremSB : Emin= 0 eV Emax= 1 GeV ModifiedTsai
eBremSB : Emin= 0 meV Emax= 1 GeV ModifiedTsai
eBremLPM : Emin= 1 GeV Emax= 100 TeV ModifiedTsai
CoulombScat: for e-, integral:1 SubType=1 BuildTable=1
CoulombScat: for e- XStype:3 SubType=1 BuildTable=1
Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 1
ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531
===== EM models for the G4Region DefaultRegionForTheWorld ======
@@ -237,31 +243,31 @@ CoulombScat: for e-, integral:1 SubType=1 BuildTable=1
msc: for e+ SubType= 10
===== EM models for the G4Region DefaultRegionForTheWorld ======
UrbanMsc : Emin= 0 eV Emax= 100 MeV Nbins=42 100 eV - 100 MeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llimit=1
UrbanMsc : Emin= 0 meV Emax= 100 MeV Nbins=42 100 eV - 100 MeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
WentzelVIUni : Emin= 100 MeV Emax= 100 TeV Nbins=42 100 MeV - 100 TeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llimit=1
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
eIoni: for e+ SubType=2
eIoni: for e+ XStype:1 SubType=2
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
StepFunction=(0.2, 1 mm), integ: 1, fluct: 1, linLossLim= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
MollerBhabha : Emin= 0 eV Emax= 100 TeV
MollerBhabha : Emin= 0 meV Emax= 100 TeV
eBrem: for e+ SubType=3
eBrem: for e+ XStype:4 SubType=3
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
LPM flag: 1 for E > 1 GeV, VertexHighEnergyTh(GeV)= 100000
===== EM models for the G4Region DefaultRegionForTheWorld ======
eBremSB : Emin= 0 eV Emax= 1 GeV ModifiedTsai
eBremSB : Emin= 0 meV Emax= 1 GeV ModifiedTsai
eBremLPM : Emin= 1 GeV Emax= 100 TeV ModifiedTsai
annihil: for e+, integral:1 SubType=5 BuildTable=0
annihil: for e+ XStype:2 SubType=5 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
eplus2gg : Emin= 0 eV Emax= 100 TeV
eplus2gg : Emin= 0 meV Emax= 100 TeV
CoulombScat: for e+, integral:1 SubType=1 BuildTable=1
CoulombScat: for e+ XStype:3 SubType=1 BuildTable=1
Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 1
ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531
===== EM models for the G4Region DefaultRegionForTheWorld ======
@@ -269,288 +275,288 @@ CoulombScat: for e+, integral:1 SubType=1 BuildTable=1
msc: for proton SubType= 10
===== EM models for the G4Region DefaultRegionForTheWorld ======
WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llimit=1
WentzelVIUni : Emin= 0 meV Emax= 100 TeV Nbins=84 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm
hIoni: for proton SubType=2
hIoni: for proton XStype:1 SubType=2
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
StepFunction=(0.2, 0.1 mm), integ: 1, fluct: 1, linLossLim= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
Bragg : Emin= 0 eV Emax= 2 MeV
Bragg : Emin= 0 meV Emax= 2 MeV
BetheBloch : Emin= 2 MeV Emax= 100 TeV
hBrems: for proton SubType=3
hBrems: for proton XStype:1 SubType=3
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi
hBrem : Emin= 0 meV Emax= 100 TeV ModifiedMephi
hPairProd: for proton SubType=4
hPairProd: for proton XStype:1 SubType=4
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
Sampling table 17x1001 from 7.50618 GeV to 100 TeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi
hPairProd : Emin= 0 meV Emax= 100 TeV ModifiedMephi
CoulombScat: for proton, integral:1 SubType=1 BuildTable=1
CoulombScat: for proton XStype:3 SubType=1 BuildTable=1
Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 1
ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531
===== EM models for the G4Region DefaultRegionForTheWorld ======
eCoulombScattering : Emin= 0 eV Emax= 100 TeV
eCoulombScattering : Emin= 0 meV Emax= 100 TeV
msc: for GenericIon SubType= 10
===== EM models for the G4Region DefaultRegionForTheWorld ======
UrbanMsc : Emin= 0 eV Emax= 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llimit=1
UrbanMsc : Emin= 0 meV Emax= 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm
ionIoni: for GenericIon SubType=2
ionIoni: for GenericIon XStype:1 SubType=2
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
StepFunction=(0.2, 0.1 mm), integ: 1, fluct: 1, linLossLim= 0.02
Stopping Power data for 17 ion/material pairs
===== EM models for the G4Region DefaultRegionForTheWorld ======
BraggIon : Emin= 0 eV Emax= 2 MeV
BraggIon : Emin= 0 meV Emax= 2 MeV
BetheBloch : Emin= 2 MeV Emax= 100 TeV
msc: for alpha SubType= 10
===== EM models for the G4Region DefaultRegionForTheWorld ======
UrbanMsc : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llimit=1
UrbanMsc : Emin= 0 meV Emax= 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm
ionIoni: for alpha SubType=2
ionIoni: for alpha XStype:1 SubType=2
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
StepFunction=(0.2, 0.1 mm), integ: 1, fluct: 1, linLossLim= 0.02
===== EM models for the G4Region DefaultRegionForTheWorld ======
BraggIon : Emin= 0 eV Emax=7.9452 MeV
BraggIon : Emin= 0 meV Emax=7.9452 MeV
BetheBloch : Emin=7.9452 MeV Emax= 100 TeV
msc: for anti_proton SubType= 10
===== EM models for the G4Region DefaultRegionForTheWorld ======
WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llimit=1
WentzelVIUni : Emin= 0 meV Emax= 100 TeV Nbins=84 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm
hIoni: for anti_proton SubType=2
hIoni: for anti_proton XStype:1 SubType=2
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
StepFunction=(0.2, 0.1 mm), integ: 1, fluct: 1, linLossLim= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
ICRU73QO : Emin= 0 eV Emax= 2 MeV
ICRU73QO : Emin= 0 meV Emax= 2 MeV
BetheBloch : Emin= 2 MeV Emax= 100 TeV
hBrems: for anti_proton SubType=3
hBrems: for anti_proton XStype:1 SubType=3
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi
hBrem : Emin= 0 meV Emax= 100 TeV ModifiedMephi
hPairProd: for anti_proton SubType=4
hPairProd: for anti_proton XStype:1 SubType=4
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
Sampling table 17x1001 from 7.50618 GeV to 100 TeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi
hPairProd : Emin= 0 meV Emax= 100 TeV ModifiedMephi
CoulombScat: for anti_proton, integral:1 SubType=1 BuildTable=1
CoulombScat: for anti_proton XStype:3 SubType=1 BuildTable=1
Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 1
ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531
===== EM models for the G4Region DefaultRegionForTheWorld ======
eCoulombScattering : Emin= 0 eV Emax= 100 TeV
eCoulombScattering : Emin= 0 meV Emax= 100 TeV
msc: for kaon+ SubType= 10
===== EM models for the G4Region DefaultRegionForTheWorld ======
WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llimit=1
WentzelVIUni : Emin= 0 meV Emax= 100 TeV Nbins=84 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm
hIoni: for kaon+ SubType=2
hIoni: for kaon+ XStype:1 SubType=2
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
StepFunction=(0.2, 0.1 mm), integ: 1, fluct: 1, linLossLim= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
Bragg : Emin= 0 eV Emax=1.05231 MeV
Bragg : Emin= 0 meV Emax=1.05231 MeV
BetheBloch : Emin=1.05231 MeV Emax= 100 TeV
hBrems: for kaon+ SubType=3
hBrems: for kaon+ XStype:1 SubType=3
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi
hBrem : Emin= 0 meV Emax= 100 TeV ModifiedMephi
hPairProd: for kaon+ SubType=4
hPairProd: for kaon+ XStype:1 SubType=4
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
Sampling table 18x1001 from 3.94942 GeV to 100 TeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi
hPairProd : Emin= 0 meV Emax= 100 TeV ModifiedMephi
CoulombScat: for kaon+, integral:1 SubType=1 BuildTable=1
CoulombScat: for kaon+ XStype:3 SubType=1 BuildTable=1
Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 1
ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531
===== EM models for the G4Region DefaultRegionForTheWorld ======
eCoulombScattering : Emin= 0 eV Emax= 100 TeV
eCoulombScattering : Emin= 0 meV Emax= 100 TeV
msc: for kaon- SubType= 10
===== EM models for the G4Region DefaultRegionForTheWorld ======
WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llimit=1
WentzelVIUni : Emin= 0 meV Emax= 100 TeV Nbins=84 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm
hIoni: for kaon- SubType=2
hIoni: for kaon- XStype:1 SubType=2
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
StepFunction=(0.2, 0.1 mm), integ: 1, fluct: 1, linLossLim= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
ICRU73QO : Emin= 0 eV Emax=1.05231 MeV
ICRU73QO : Emin= 0 meV Emax=1.05231 MeV
BetheBloch : Emin=1.05231 MeV Emax= 100 TeV
hBrems: for kaon- SubType=3
hBrems: for kaon- XStype:1 SubType=3
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi
hBrem : Emin= 0 meV Emax= 100 TeV ModifiedMephi
hPairProd: for kaon- SubType=4
hPairProd: for kaon- XStype:1 SubType=4
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
Sampling table 18x1001 from 3.94942 GeV to 100 TeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi
hPairProd : Emin= 0 meV Emax= 100 TeV ModifiedMephi
CoulombScat: for kaon-, integral:1 SubType=1 BuildTable=1
CoulombScat: for kaon- XStype:3 SubType=1 BuildTable=1
Used Lambda table of kaon+
ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531
===== EM models for the G4Region DefaultRegionForTheWorld ======
eCoulombScattering : Emin= 0 eV Emax= 100 TeV
eCoulombScattering : Emin= 0 meV Emax= 100 TeV
msc: for mu+ SubType= 10
===== EM models for the G4Region DefaultRegionForTheWorld ======
WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llimit=1
WentzelVIUni : Emin= 0 meV Emax= 100 TeV Nbins=84 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm
muIoni: for mu+ SubType=2
muIoni: for mu+ XStype:1 SubType=2
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
StepFunction=(0.2, 0.1 mm), integ: 1, fluct: 1, linLossLim= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
Bragg : Emin= 0 eV Emax= 200 keV
Bragg : Emin= 0 meV Emax= 200 keV
BetheBloch : Emin= 200 keV Emax= 1 GeV
MuBetheBloch : Emin= 1 GeV Emax= 100 TeV
muBrems: for mu+ SubType=3
muBrems: for mu+ XStype:1 SubType=3
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
MuBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi
MuBrem : Emin= 0 meV Emax= 100 TeV ModifiedMephi
muPairProd: for mu+ SubType=4
muPairProd: for mu+ XStype:1 SubType=4
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
Sampling table 21x1001 from 1 GeV to 100 TeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
muPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi
muPairProd : Emin= 0 meV Emax= 100 TeV ModifiedMephi
CoulombScat: for mu+, integral:1 SubType=1 BuildTable=1
CoulombScat: for mu+ XStype:3 SubType=1 BuildTable=1
Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 1
ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531
===== EM models for the G4Region DefaultRegionForTheWorld ======
eCoulombScattering : Emin= 0 eV Emax= 100 TeV
eCoulombScattering : Emin= 0 meV Emax= 100 TeV
msc: for mu- SubType= 10
===== EM models for the G4Region DefaultRegionForTheWorld ======
WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llimit=1
WentzelVIUni : Emin= 0 meV Emax= 100 TeV Nbins=84 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm
muIoni: for mu- SubType=2
muIoni: for mu- XStype:1 SubType=2
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
StepFunction=(0.2, 0.1 mm), integ: 1, fluct: 1, linLossLim= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
ICRU73QO : Emin= 0 eV Emax= 200 keV
ICRU73QO : Emin= 0 meV Emax= 200 keV
BetheBloch : Emin= 200 keV Emax= 1 GeV
MuBetheBloch : Emin= 1 GeV Emax= 100 TeV
muBrems: for mu- SubType=3
muBrems: for mu- XStype:1 SubType=3
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
MuBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi
MuBrem : Emin= 0 meV Emax= 100 TeV ModifiedMephi
muPairProd: for mu- SubType=4
muPairProd: for mu- XStype:1 SubType=4
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
Sampling table 21x1001 from 1 GeV to 100 TeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
muPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi
muPairProd : Emin= 0 meV Emax= 100 TeV ModifiedMephi
CoulombScat: for mu-, integral:1 SubType=1 BuildTable=1
CoulombScat: for mu- XStype:3 SubType=1 BuildTable=1
Used Lambda table of mu+
ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531
===== EM models for the G4Region DefaultRegionForTheWorld ======
eCoulombScattering : Emin= 0 eV Emax= 100 TeV
eCoulombScattering : Emin= 0 meV Emax= 100 TeV
msc: for pi+ SubType= 10
===== EM models for the G4Region DefaultRegionForTheWorld ======
WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llimit=1
WentzelVIUni : Emin= 0 meV Emax= 100 TeV Nbins=84 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm
hIoni: for pi+ SubType=2
hIoni: for pi+ XStype:1 SubType=2
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
StepFunction=(0.2, 0.1 mm), integ: 1, fluct: 1, linLossLim= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
Bragg : Emin= 0 eV Emax=297.505 keV
Bragg : Emin= 0 meV Emax=297.505 keV
BetheBloch : Emin=297.505 keV Emax= 100 TeV
hBrems: for pi+ SubType=3
hBrems: for pi+ XStype:1 SubType=3
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi
hBrem : Emin= 0 meV Emax= 100 TeV ModifiedMephi
hPairProd: for pi+ SubType=4
hPairProd: for pi+ XStype:1 SubType=4
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
Sampling table 20x1001 from 1.11656 GeV to 100 TeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi
hPairProd : Emin= 0 meV Emax= 100 TeV ModifiedMephi
CoulombScat: for pi+, integral:1 SubType=1 BuildTable=1
CoulombScat: for pi+ XStype:3 SubType=1 BuildTable=1
Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 1
ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531
===== EM models for the G4Region DefaultRegionForTheWorld ======
eCoulombScattering : Emin= 0 eV Emax= 100 TeV
eCoulombScattering : Emin= 0 meV Emax= 100 TeV
msc: for pi- SubType= 10
===== EM models for the G4Region DefaultRegionForTheWorld ======
WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llimit=1
WentzelVIUni : Emin= 0 meV Emax= 100 TeV Nbins=84 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm
hIoni: for pi- SubType=2
hIoni: for pi- XStype:1 SubType=2
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
StepFunction=(0.2, 0.1 mm), integ: 1, fluct: 1, linLossLim= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
ICRU73QO : Emin= 0 eV Emax=297.505 keV
ICRU73QO : Emin= 0 meV Emax=297.505 keV
BetheBloch : Emin=297.505 keV Emax= 100 TeV
hBrems: for pi- SubType=3
hBrems: for pi- XStype:1 SubType=3
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi
hBrem : Emin= 0 meV Emax= 100 TeV ModifiedMephi
hPairProd: for pi- SubType=4
hPairProd: for pi- XStype:1 SubType=4
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
Sampling table 20x1001 from 1.11656 GeV to 100 TeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi
hPairProd : Emin= 0 meV Emax= 100 TeV ModifiedMephi
CoulombScat: for pi-, integral:1 SubType=1 BuildTable=1
CoulombScat: for pi- XStype:3 SubType=1 BuildTable=1
Used Lambda table of pi+
ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531
===== EM models for the G4Region DefaultRegionForTheWorld ======
eCoulombScattering : Emin= 0 eV Emax= 100 TeV
eCoulombScattering : Emin= 0 meV Emax= 100 TeV
Region <DefaultRegionForTheWorld> -- -- appears in <World> world volume
This region is in the mass world.
@@ -620,8 +626,8 @@ See commands in /vis/modeling/trajectories/ for other options.
ooo Run 0 starts (global).
--------- Ranlux engine status ---------
Initial seed = 1623139744
float_seed_table[] = 0.321051 0.703891 0.623028 0.90283 0.918803 0.131837 0.342942 0.572057 0.402445 0.552796 0.767171 0.742507 0.79422 0.927811 0.441404 0.5084 0.231716 0.00218672 0.591102 0.361275 0.165952 0.497306 0.286562 0.612128
Initial seed = 1624405979
float_seed_table[] = 0.317296 0.389101 0.631632 0.285013 0.520975 0.306073 0.238364 0.906989 0.29402 0.125726 0.945472 0.20919 0.531815 0.144216 0.802618 0.980342 0.576209 0.432081 0.279602 0.129886 0.270921 0.759642 0.522357 0.66217
i_lag = 23, j_lag = 9
carry = 0, count24 = 0
luxury = 3 nskip = 199
@@ -632,7 +638,7 @@ mu- Mono Plane
Run terminated.
Run Summary
Number of events processed : 100
User=2.140000s Real=2.283902s Sys=0.000000s
User=0.050000s Real=0.089928s Sys=0.000000s
### Run 0 (global) ended.
0 events have been kept for refreshing and/or reviewing.
"/vis/reviewKeptEvents" to review them one by one.
@@ -643,6 +649,8 @@ G4 kernel has come to Quit state.
UserDetectorConstruction deleted.
UserPhysicsList deleted.
UserActionInitialization deleted.
UserWorkerInitialization deleted.
UserWorkerThreadInitialization deleted.
UserRunAction deleted.
UserPrimaryGenerator deleted.
RunManager is deleting RunManagerKernel.
@@ -651,6 +659,7 @@ EventManager deleted.
Units table cleared.
TransportationManager deleted.
Total navigation history collections cleaned: 10
G4RNGHelper object is deleted.
================== Deleting memory pools ===================
Pool ID '20G4NavigationLevelRep', size : 0.0135 MB
Pool ID '24G4ReferenceCountedHandleIvE', size : 0.000961 MB
@@ -659,15 +668,16 @@ Pool ID '15G4PrimaryVertex', size : 0.000961 MB
Pool ID '17G4PrimaryParticle', size : 0.000961 MB
Pool ID '15G4HCofThisEvent', size : 0.000961 MB
Pool ID '16G4HitsCollection', size : 0.000961 MB
Pool ID '17G4DynamicParticle', size : 0.024 MB
Pool ID '7G4Track', size : 0.0481 MB
Pool ID '17G4DynamicParticle', size : 0.0202 MB
Pool ID '7G4Track', size : 0.0404 MB
Pool ID '18G4TouchableHistory', size : 0.000961 MB
Pool ID '15G4CountedObjectIvE', size : 0.000961 MB
Pool ID '15UltraOpticalHit', size : 0.00385 MB
Pool ID '15UltraOpticalHit', size : 0.00673 MB
Number of memory pools allocated: 12 of which, static: 0
Dynamic pools deleted: 12 / Total memory freed: 0.097 MB
Dynamic pools deleted: 12 / Total memory freed: 0.088 MB
============================================================
G4Allocator objects are deleted.
UImanager deleted.
StateManager deleted.
RunManagerKernel is deleted. Good bye :)
RunManager is deleted.
+1 -4
View File
@@ -1,9 +1,6 @@
#----------------------------------------------------------------------------
# Setup the project
cmake_minimum_required(VERSION 3.8...3.18)
if(${CMAKE_VERSION} VERSION_LESS 3.12)
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
endif()
cmake_minimum_required(VERSION 3.12...3.20)
project(amsEcal)
#----------------------------------------------------------------------------
+5
View File
@@ -13,6 +13,11 @@ track of all tags.
----------------------------------------------------------
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
24-05-21, B. Morgan (amsEcal-V10-07-01)
- Bump required CMake version range to 3.12...3.20, matching core Geant4
16-05-21 mma (amsEcal-V10-07-00)
- Migration to G4RunManagerFactory and G4SteppingVerboseWithUnits.
02-11-20 Ben Morgan (amsEcal-V10-06-00)
- Support same CMake version range as core Geant4
+13 -19
View File
@@ -33,19 +33,14 @@
#include "G4Types.hh"
#ifdef G4MULTITHREADED
#include "G4MTRunManager.hh"
#else
#include "G4RunManager.hh"
#endif
#include "G4RunManagerFactory.hh"
#include "G4UImanager.hh"
#include "G4SteppingVerbose.hh"
#include "Randomize.hh"
#include "DetectorConstruction.hh"
#include "PhysicsList.hh"
#include "ActionInitialization.hh"
#include "SteppingVerbose.hh"
#include "G4UIExecutive.hh"
#include "G4VisExecutive.hh"
@@ -61,19 +56,18 @@ int main(int argc,char** argv) {
//choose the Random engine
G4Random::setTheEngine(new CLHEP::RanecuEngine);
// Construct the default run manager
#ifdef G4MULTITHREADED
G4MTRunManager* runManager = new G4MTRunManager;
// Number of threads can be defined via 3rd argument
if (argc==3) {
G4int nThreads = G4UIcommand::ConvertToInt(argv[2]);
if(nThreads > 0) { runManager->SetNumberOfThreads(nThreads); }
//Use SteppingVerbose with Unit
G4int precision = 4;
G4SteppingVerbose::UseBestUnit(precision);
//Creating run manager
auto runManager = G4RunManagerFactory::CreateRunManager();
if (argc==3) {
G4int nThreads = G4UIcommand::ConvertToInt(argv[2]);
runManager->SetNumberOfThreads(nThreads);
}
#else
G4VSteppingVerbose::SetInstance(new SteppingVerbose);
G4RunManager* runManager = new G4RunManager;
#endif
//set mandatory initialization classes
DetectorConstruction* detector = new DetectorConstruction;
runManager->SetUserInitialization(detector);
@@ -33,7 +33,6 @@
#include "G4VUserActionInitialization.hh"
class DetectorConstruction;
class G4VSteppingVerbose;
/// Action initialization class.
///
@@ -42,16 +41,13 @@ class ActionInitialization : public G4VUserActionInitialization
{
public:
ActionInitialization(DetectorConstruction*);
virtual ~ActionInitialization();
~ActionInitialization() override;
virtual void BuildForMaster() const;
virtual void Build() const;
virtual G4VSteppingVerbose* InitializeSteppingVerbose() const;
void BuildForMaster() const override;
void Build() const override;
private:
DetectorConstruction* fDetector;
};
#endif
+17 -5
View File
@@ -1,10 +1,17 @@
Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Forcing G4RunManager type...
############################################
!!! WARNING - FPE detection is activated !!!
############################################
################################
!!! G4Backtrace is activated !!!
################################
**************************************************************
Geant4 version Name: geant4-10-07-patch-02 (11-June-2021)
Geant4 version Name: geant4-10-07-ref-06 (25-June-2021)
Copyright : Geant4 Collaboration
References : NIM A 506 (2003), 250-303
: IEEE-TNS 53 (2006), 270-278
@@ -145,19 +152,19 @@ Start closing geometry.
G4GeometryManager::ReportVoxelStats -- Voxel Statistics
Total memory consumed for geometry optimisation: 32 kByte
Total CPU time elapsed for geometry optimisation: 0 seconds
Total CPU time elapsed for geometry optimisation: 0.01 seconds
Voxelisation: top CPU users:
Percent Total CPU System CPU Memory Volume
------- ---------- ---------- -------- ----------
0.00 0.00 0.00 31k layer
100.00 0.01 0.00 31k layer
0.00 0.00 0.00 1k module
0.00 0.00 0.00 1k calorimeter
Voxelisation: top memory users:
Percent Memory Heads Nodes Pointers Total CPU Volume
------- -------- ------ ------ -------- ---------- ----------
94.74 30k 1 490 980 0.00 layer
94.74 30k 1 490 980 0.01 layer
3.16 1k 1 17 20 0.00 module
2.10 0k 1 10 18 0.00 calorimeter
### Run 0 starts.
@@ -179,7 +186,7 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics
Run terminated.
Run Summary
Number of events processed : 10000
User=7.700000s Real=8.251293s Sys=0.010000s
User=6.370000s Real=6.668766s Sys=0.000000s
-------------------------------------------------------------
---> The calorimeter is 9 Modules
@@ -307,13 +314,17 @@ G4 kernel has come to Quit state.
UserDetectorConstruction deleted.
UserPhysicsList deleted.
UserActionInitialization deleted.
UserWorkerInitialization deleted.
UserWorkerThreadInitialization deleted.
UserRunAction deleted.
UserPrimaryGenerator deleted.
RunManager is deleting RunManagerKernel.
G4SDManager deleted.
EventManager deleted.
Units table cleared.
TransportationManager deleted.
Total navigation history collections cleaned: 7
G4RNGHelper object is deleted.
================== Deleting memory pools ===================
Pool ID '20G4NavigationLevelRep', size : 0.00865 MB
Pool ID '24G4ReferenceCountedHandleIvE', size : 0.000961 MB
@@ -331,3 +342,4 @@ G4Allocator objects are deleted.
UImanager deleted.
StateManager deleted.
RunManagerKernel is deleted. Good bye :)
RunManager is deleted.
@@ -34,7 +34,6 @@
#include "EventAction.hh"
#include "TrackingAction.hh"
#include "SteppingAction.hh"
#include "SteppingVerbose.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -74,10 +73,3 @@ void ActionInitialization::Build() const
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4VSteppingVerbose* ActionInitialization::InitializeSteppingVerbose() const
{
return new SteppingVerbose();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -1,157 +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. *
// ********************************************************************
//
/// \file radioactivedecay/rdecay01/src/SteppingVerbose.cc
/// \brief Implementation of the SteppingVerbose class
//
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "SteppingVerbose.hh"
#include "G4SteppingManager.hh"
#include "G4ParticleTypes.hh"
#include "G4UnitsTable.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
SteppingVerbose::SteppingVerbose()
: G4SteppingVerbose()
{ }
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
SteppingVerbose::~SteppingVerbose()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void SteppingVerbose::TrackingStarted()
{
CopyState();
G4int prec = G4cout.precision(3);
//Step zero
//
if( verboseLevel > 0 ){
G4cout << std::setw( 5) << "Step#" << " "
<< std::setw( 6) << "X" << " "
<< std::setw( 6) << "Y" << " "
<< std::setw( 6) << "Z" << " "
<< std::setw( 9) << "KineE" << " "
<< std::setw( 9) << "dEStep" << " "
<< std::setw(10) << "StepLeng"
<< std::setw(10) << "TrakLeng"
<< std::setw(10) << "Volume" << " "
<< std::setw(10) << "Process" << G4endl;
G4cout << std::setw(5) << fTrack->GetCurrentStepNumber() << " "
<< std::setw(6) << G4BestUnit(fTrack->GetPosition().x(),"Length")
<< std::setw(6) << G4BestUnit(fTrack->GetPosition().y(),"Length")
<< std::setw(6) << G4BestUnit(fTrack->GetPosition().z(),"Length")
<< std::setw(6) << G4BestUnit(fTrack->GetKineticEnergy(),"Energy")
<< std::setw(6) << G4BestUnit(fStep->GetTotalEnergyDeposit(),"Energy")
<< std::setw(6) << G4BestUnit(fStep->GetStepLength(),"Length")
<< std::setw(6) << G4BestUnit(fTrack->GetTrackLength(),"Length")
<< std::setw(10) << fTrack->GetVolume()->GetName()
<< " initStep" << G4endl;
}
G4cout.precision(prec);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void SteppingVerbose::StepInfo()
{
CopyState();
G4int prec = G4cout.precision(3);
if( verboseLevel >= 1 ){
if( verboseLevel >= 4 ) VerboseTrack();
if( verboseLevel >= 3 ){
G4cout << G4endl;
G4cout << std::setw( 5) << "#Step#" << " "
<< std::setw( 6) << "X" << " "
<< std::setw( 6) << "Y" << " "
<< std::setw( 6) << "Z" << " "
<< std::setw( 9) << "KineE" << " "
<< std::setw( 9) << "dEStep" << " "
<< std::setw(10) << "StepLeng"
<< std::setw(10) << "TrakLeng"
<< std::setw(10) << "Volume" << " "
<< std::setw(10) << "Process" << G4endl;
}
G4cout << std::setw( 5) << fTrack->GetCurrentStepNumber() << " "
<< std::setw(6) << G4BestUnit(fTrack->GetPosition().x(),"Length")
<< std::setw(6) << G4BestUnit(fTrack->GetPosition().y(),"Length")
<< std::setw(6) << G4BestUnit(fTrack->GetPosition().z(),"Length")
<< std::setw(6) << G4BestUnit(fTrack->GetKineticEnergy(),"Energy")
<< std::setw(6) << G4BestUnit(fStep->GetTotalEnergyDeposit(),"Energy")
<< std::setw(6) << G4BestUnit(fStep->GetStepLength(),"Length")
<< std::setw(6) << G4BestUnit(fTrack->GetTrackLength(),"Length")
<< std::setw(10) << fTrack->GetVolume()->GetName();
const G4VProcess* process
= fStep->GetPostStepPoint()->GetProcessDefinedStep();
G4String procName = " UserLimit";
if (process) procName = process->GetProcessName();
if (fStepStatus == fWorldBoundary) procName = "OutOfWorld";
G4cout << " " << std::setw(10) << procName;
G4cout << G4endl;
if (verboseLevel == 2) {
const std::vector<const G4Track*>* secondary
= fStep->GetSecondaryInCurrentStep();
size_t nbtrk = (*secondary).size();
if (nbtrk) {
G4cout << "\n :----- List of secondaries ----------------" << G4endl;
G4cout.precision(4);
for (size_t lp=0; lp<(*secondary).size(); lp++) {
G4cout << " "
<< std::setw(13)
<< (*secondary)[lp]->GetDefinition()->GetParticleName()
<< ": energy ="
<< std::setw(6)
<< G4BestUnit((*secondary)[lp]->GetKineticEnergy(),"Energy")
<< " time ="
<< std::setw(6)
<< G4BestUnit((*secondary)[lp]->GetGlobalTime(),"Time");
G4cout << G4endl;
}
G4cout << " :------------------------------------------\n" << G4endl;
}
}
}
G4cout.precision(prec);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -1,9 +1,6 @@
#----------------------------------------------------------------------------
# Setup the project
cmake_minimum_required(VERSION 3.8...3.18)
if(${CMAKE_VERSION} VERSION_LESS 3.12)
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
endif()
cmake_minimum_required(VERSION 3.12...3.20)
project(Brachy)
#----------------------------------------------------------------------------
+9
View File
@@ -7,6 +7,15 @@
Category History file
---------------------
24.05.2021 - B. Morgan; brachy-V10-07-01
Bump required CMake version range to 3.12...3.20, matching core Geant4
12.02.2021 - S. Guatelli; brachy-V10-07-00
Cleaning of the code. Use C++11 keywords and patterns.
Remove BrachyMaterial class. Materials implemented now
using NIST Material Manager of Geant4. Remove SetCuts from
the local PhysicsList as it is not thread-safe.
12.11.2020 - S. Guatelli; brachy-V10-06-03
Migration to G4RunManagerFactory
+134 -126
View File
@@ -4,8 +4,14 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo
!!! WARNING - FPE detection is activated !!!
############################################
################################
!!! G4Backtrace is activated !!!
################################
**************************************************************
Geant4 version Name: geant4-10-07-patch-02 (11-June-2021)
Geant4 version Name: geant4-10-07-ref-06 (25-June-2021)
Copyright : Geant4 Collaboration
References : NIM A 506 (2003), 250-303
: IEEE-TNS 53 (2006), 270-278
@@ -80,16 +86,17 @@ Checking overlaps for volume phys_iridium_core (G4Tubs) ... OK!
/run/verbose 0
/event/verbose 0
/source/switch Flexi
Now the source is Flexi
Now the brachy source is Flexi
/run/geometryModified
Old Source is deleted ...
Old brachy source is deleted ...
G4Material WARNING: duplicate name of material Stainless steel 304
Checking overlaps for volume phys_steel_shell (G4Tubs) ... OK!
Checking overlaps for volume phys_air_gap (G4Tubs) ... OK!
Checking overlaps for volume phys_End1_steel_shell (G4Tubs) ... OK!
Checking overlaps for volume phys_End2_steel_shell (G4Cons) ... OK!
Checking overlaps for volume phys_cable (G4Tubs) ... OK!
Checking overlaps for volume phys_iridium_core (G4Tubs) ... OK!
... New source is created ...
New brachy source is created ...
/run/geometryModified
/control/execute iridium_source_primary.mac
/gps/ene/type Arb
@@ -238,63 +245,63 @@ G4ScoringBox : boxMesh_4 --- Shape: Box mesh
### === Deexcitation model UAtomDeexcitation is activated for 1 region:
DefaultRegionForTheWorld 1 1 0
### === Auger cascade flag: 1
### === Auger flag: 1
### === Ignore cuts flag: 1
phot: for gamma SubType=12 BuildTable=0
LambdaPrime table from 200 keV to 100 TeV in 174 bins
===== EM models for the G4Region DefaultRegionForTheWorld ======
LivermorePhElectric : Emin= 0 eV Emax= 100 TeV SauterGavrila Fluo
LivermorePhElectric : Emin= 0 meV Emax= 100 TeV SauterGavrila Fluo
compt: for gamma SubType=13 BuildTable=1
Lambda table from 100 eV to 1 MeV, 20 bins/decade, spline: 1
LambdaPrime table from 1 MeV to 100 TeV in 160 bins
===== EM models for the G4Region DefaultRegionForTheWorld ======
LivermoreCompton : Emin= 0 eV Emax= 1 GeV Fluo
LivermoreCompton : Emin= 0 meV Emax= 1 GeV Fluo
KleinNishina : Emin= 1 GeV Emax= 100 TeV Fluo
conv: for gamma SubType=14 BuildTable=1
Lambda table from 1.022 MeV to 100 TeV, 20 bins/decade, spline: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
Livermore5DConversion : Emin= 0 eV Emax= 100 TeV ModifiedTsai
Livermore5DConversion : Emin= 0 meV Emax= 100 TeV ModifiedTsai
Rayl: for gamma SubType=11 BuildTable=1
Lambda table from 100 eV to 100 keV, 20 bins/decade, spline: 0
LambdaPrime table from 100 keV to 100 TeV in 180 bins
===== EM models for the G4Region DefaultRegionForTheWorld ======
LivermoreRayleigh : Emin= 0 eV Emax= 100 TeV CullenGenerator
LivermoreRayleigh : Emin= 0 meV Emax= 100 TeV CullenGenerator
msc: for e- SubType= 10
===== EM models for the G4Region DefaultRegionForTheWorld ======
GoudsmitSaunderson : Emin= 0 eV Emax= 100 MeV Nbins=120 100 eV - 100 MeV
StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llimit=1
GoudsmitSaunderson : Emin= 0 meV Emax= 100 MeV Nbins=120 100 eV - 100 MeV
StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm
WentzelVIUni : Emin= 100 MeV Emax= 100 TeV Nbins=120 100 MeV - 100 TeV
StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llimit=1
StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm
eIoni: for e- SubType=2
eIoni: for e- XStype:1 SubType=2
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1
StepFunction=(0.2, 0.01 mm), integ: 1, fluct: 1, linLossLim= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
LowEnergyIoni : Emin= 0 eV Emax= 100 keV deltaVI
LowEnergyIoni : Emin= 0 meV Emax= 100 keV deltaVI
MollerBhabha : Emin= 100 keV Emax= 100 TeV deltaVI
eBrem: for e- SubType=3
eBrem: for e- XStype:4 SubType=3
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1
LPM flag: 1 for E > 1 GeV, VertexHighEnergyTh(GeV)= 100000
===== EM models for the G4Region DefaultRegionForTheWorld ======
eBremSB : Emin= 0 eV Emax= 1 GeV AngularGen2BS
eBremSB : Emin= 0 meV Emax= 1 GeV AngularGen2BS
eBremLPM : Emin= 1 GeV Emax= 100 TeV AngularGen2BS
ePairProd: for e- SubType=4
ePairProd: for e- XStype:1 SubType=4
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1
Sampling table 25x1001 from 0.1 GeV to 100 TeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
ePairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi
ePairProd : Emin= 0 meV Emax= 100 TeV ModifiedMephi
CoulombScat: for e-, integral:1 SubType=1 BuildTable=1
CoulombScat: for e- XStype:3 SubType=1 BuildTable=1
Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 1
ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531
===== EM models for the G4Region DefaultRegionForTheWorld ======
@@ -302,38 +309,38 @@ CoulombScat: for e-, integral:1 SubType=1 BuildTable=1
msc: for e+ SubType= 10
===== EM models for the G4Region DefaultRegionForTheWorld ======
GoudsmitSaunderson : Emin= 0 eV Emax= 100 MeV Nbins=120 100 eV - 100 MeV
StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llimit=1
GoudsmitSaunderson : Emin= 0 meV Emax= 100 MeV Nbins=120 100 eV - 100 MeV
StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm
WentzelVIUni : Emin= 100 MeV Emax= 100 TeV Nbins=120 100 MeV - 100 TeV
StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llimit=1
StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm
eIoni: for e+ SubType=2
eIoni: for e+ XStype:1 SubType=2
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1
StepFunction=(0.2, 0.01 mm), integ: 1, fluct: 1, linLossLim= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
MollerBhabha : Emin= 0 eV Emax= 100 TeV deltaVI
MollerBhabha : Emin= 0 meV Emax= 100 TeV deltaVI
eBrem: for e+ SubType=3
eBrem: for e+ XStype:4 SubType=3
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1
LPM flag: 1 for E > 1 GeV, VertexHighEnergyTh(GeV)= 100000
===== EM models for the G4Region DefaultRegionForTheWorld ======
eBremSB : Emin= 0 eV Emax= 1 GeV AngularGen2BS
eBremSB : Emin= 0 meV Emax= 1 GeV AngularGen2BS
eBremLPM : Emin= 1 GeV Emax= 100 TeV AngularGen2BS
ePairProd: for e+ SubType=4
ePairProd: for e+ XStype:1 SubType=4
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1
Sampling table 25x1001 from 0.1 GeV to 100 TeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
ePairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi
ePairProd : Emin= 0 meV Emax= 100 TeV ModifiedMephi
annihil: for e+, integral:1 SubType=5 BuildTable=0
annihil: for e+ XStype:2 SubType=5 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
eplus2gg : Emin= 0 eV Emax= 100 TeV
eplus2gg : Emin= 0 meV Emax= 100 TeV
CoulombScat: for e+, integral:1 SubType=1 BuildTable=1
CoulombScat: for e+ XStype:3 SubType=1 BuildTable=1
Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 1
ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531
===== EM models for the G4Region DefaultRegionForTheWorld ======
@@ -341,56 +348,56 @@ CoulombScat: for e+, integral:1 SubType=1 BuildTable=1
msc: for proton SubType= 10
===== EM models for the G4Region DefaultRegionForTheWorld ======
WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llimit=1
WentzelVIUni : Emin= 0 meV Emax= 100 TeV Nbins=240 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm
hIoni: for proton SubType=2
hIoni: for proton XStype:1 SubType=2
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1
StepFunction=(0.1, 0.05 mm), integ: 1, fluct: 1, linLossLim= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
Bragg : Emin= 0 eV Emax= 2 MeV deltaVI
Bragg : Emin= 0 meV Emax= 2 MeV deltaVI
BetheBloch : Emin= 2 MeV Emax= 100 TeV deltaVI
hBrems: for proton SubType=3
hBrems: for proton XStype:1 SubType=3
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi
hBrem : Emin= 0 meV Emax= 100 TeV ModifiedMephi
===== Limit on energy threshold has been applied
hPairProd: for proton SubType=4
hPairProd: for proton XStype:1 SubType=4
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1
Sampling table 17x1001 from 7.50618 GeV to 100 TeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi
hPairProd : Emin= 0 meV Emax= 100 TeV ModifiedMephi
CoulombScat: for proton, integral:1 SubType=1 BuildTable=1
CoulombScat: for proton XStype:3 SubType=1 BuildTable=1
Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 1
ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531
===== EM models for the G4Region DefaultRegionForTheWorld ======
eCoulombScattering : Emin= 0 eV Emax= 100 TeV
eCoulombScattering : Emin= 0 meV Emax= 100 TeV
nuclearStopping: for proton SubType=8 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
ICRU49NucStopping : Emin= 0 eV Emax= 1 MeV
ICRU49NucStopping : Emin= 0 meV Emax= 1 MeV
msc: for GenericIon SubType= 10
===== EM models for the G4Region DefaultRegionForTheWorld ======
UrbanMsc : Emin= 0 eV Emax= 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llimit=1
UrbanMsc : Emin= 0 meV Emax= 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm
ionIoni: for GenericIon SubType=2
ionIoni: for GenericIon XStype:1 SubType=2
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1
StepFunction=(0.1, 0.02 mm), integ: 1, fluct: 1, linLossLim= 0.02
===== EM models for the G4Region DefaultRegionForTheWorld ======
ParamICRU73 : Emin= 0 eV Emax= 100 TeV deltaVI
ParamICRU73 : Emin= 0 meV Emax= 100 TeV deltaVI
nuclearStopping: for GenericIon SubType=8 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
ICRU49NucStopping : Emin= 0 eV Emax= 1 MeV
ICRU49NucStopping : Emin= 0 meV Emax= 1 MeV
======================================================================
====== Radioactive Decay Physics Parameters =======
======================================================================
@@ -404,269 +411,270 @@ Auger electron emission enabled 1
Auger cascade enabled 1
Check EM cuts disabled for atomic de-excitation 1
Use Bearden atomic level energies 0
Threshold for very long decay time at rest 1e+27 ns
======================================================================
msc: for alpha SubType= 10
===== EM models for the G4Region DefaultRegionForTheWorld ======
UrbanMsc : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llimit=1
UrbanMsc : Emin= 0 meV Emax= 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm
ionIoni: for alpha SubType=2
ionIoni: for alpha XStype:1 SubType=2
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1
StepFunction=(0.1, 0.02 mm), integ: 1, fluct: 1, linLossLim= 0.02
===== EM models for the G4Region DefaultRegionForTheWorld ======
BraggIon : Emin= 0 eV Emax=7.9452 MeV deltaVI
BraggIon : Emin= 0 meV Emax=7.9452 MeV deltaVI
BetheBloch : Emin=7.9452 MeV Emax= 100 TeV deltaVI
nuclearStopping: for alpha SubType=8 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
ICRU49NucStopping : Emin= 0 eV Emax= 1 MeV
ICRU49NucStopping : Emin= 0 meV Emax= 1 MeV
msc: for anti_proton SubType= 10
===== EM models for the G4Region DefaultRegionForTheWorld ======
WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llimit=1
WentzelVIUni : Emin= 0 meV Emax= 100 TeV Nbins=240 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm
hIoni: for anti_proton SubType=2
hIoni: for anti_proton XStype:1 SubType=2
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1
StepFunction=(0.1, 0.05 mm), integ: 1, fluct: 1, linLossLim= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
ICRU73QO : Emin= 0 eV Emax= 2 MeV deltaVI
ICRU73QO : Emin= 0 meV Emax= 2 MeV deltaVI
BetheBloch : Emin= 2 MeV Emax= 100 TeV deltaVI
hBrems: for anti_proton SubType=3
hBrems: for anti_proton XStype:1 SubType=3
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi
hBrem : Emin= 0 meV Emax= 100 TeV ModifiedMephi
===== Limit on energy threshold has been applied
hPairProd: for anti_proton SubType=4
hPairProd: for anti_proton XStype:1 SubType=4
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1
Sampling table 17x1001 from 7.50618 GeV to 100 TeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi
hPairProd : Emin= 0 meV Emax= 100 TeV ModifiedMephi
CoulombScat: for anti_proton, integral:1 SubType=1 BuildTable=1
CoulombScat: for anti_proton XStype:3 SubType=1 BuildTable=1
Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 1
ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531
===== EM models for the G4Region DefaultRegionForTheWorld ======
eCoulombScattering : Emin= 0 eV Emax= 100 TeV
eCoulombScattering : Emin= 0 meV Emax= 100 TeV
msc: for kaon+ SubType= 10
===== EM models for the G4Region DefaultRegionForTheWorld ======
WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llimit=1
WentzelVIUni : Emin= 0 meV Emax= 100 TeV Nbins=240 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm
hIoni: for kaon+ SubType=2
hIoni: for kaon+ XStype:1 SubType=2
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1
StepFunction=(0.1, 0.05 mm), integ: 1, fluct: 1, linLossLim= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
Bragg : Emin= 0 eV Emax=1.05231 MeV deltaVI
Bragg : Emin= 0 meV Emax=1.05231 MeV deltaVI
BetheBloch : Emin=1.05231 MeV Emax= 100 TeV deltaVI
hBrems: for kaon+ SubType=3
hBrems: for kaon+ XStype:1 SubType=3
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi
hBrem : Emin= 0 meV Emax= 100 TeV ModifiedMephi
===== Limit on energy threshold has been applied
hPairProd: for kaon+ SubType=4
hPairProd: for kaon+ XStype:1 SubType=4
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1
Sampling table 18x1001 from 3.94942 GeV to 100 TeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi
hPairProd : Emin= 0 meV Emax= 100 TeV ModifiedMephi
CoulombScat: for kaon+, integral:1 SubType=1 BuildTable=1
CoulombScat: for kaon+ XStype:3 SubType=1 BuildTable=1
Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 1
ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531
===== EM models for the G4Region DefaultRegionForTheWorld ======
eCoulombScattering : Emin= 0 eV Emax= 100 TeV
eCoulombScattering : Emin= 0 meV Emax= 100 TeV
msc: for kaon- SubType= 10
===== EM models for the G4Region DefaultRegionForTheWorld ======
WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llimit=1
WentzelVIUni : Emin= 0 meV Emax= 100 TeV Nbins=240 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm
hIoni: for kaon- SubType=2
hIoni: for kaon- XStype:1 SubType=2
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1
StepFunction=(0.1, 0.05 mm), integ: 1, fluct: 1, linLossLim= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
ICRU73QO : Emin= 0 eV Emax=1.05231 MeV deltaVI
ICRU73QO : Emin= 0 meV Emax=1.05231 MeV deltaVI
BetheBloch : Emin=1.05231 MeV Emax= 100 TeV deltaVI
hBrems: for kaon- SubType=3
hBrems: for kaon- XStype:1 SubType=3
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi
hBrem : Emin= 0 meV Emax= 100 TeV ModifiedMephi
===== Limit on energy threshold has been applied
hPairProd: for kaon- SubType=4
hPairProd: for kaon- XStype:1 SubType=4
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1
Sampling table 18x1001 from 3.94942 GeV to 100 TeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi
hPairProd : Emin= 0 meV Emax= 100 TeV ModifiedMephi
CoulombScat: for kaon-, integral:1 SubType=1 BuildTable=1
CoulombScat: for kaon- XStype:3 SubType=1 BuildTable=1
Used Lambda table of kaon+
ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531
===== EM models for the G4Region DefaultRegionForTheWorld ======
eCoulombScattering : Emin= 0 eV Emax= 100 TeV
eCoulombScattering : Emin= 0 meV Emax= 100 TeV
msc: for mu+ SubType= 10
===== EM models for the G4Region DefaultRegionForTheWorld ======
WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llimit=1
WentzelVIUni : Emin= 0 meV Emax= 100 TeV Nbins=240 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm
muIoni: for mu+ SubType=2
muIoni: for mu+ XStype:1 SubType=2
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1
StepFunction=(0.1, 0.05 mm), integ: 1, fluct: 1, linLossLim= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
Bragg : Emin= 0 eV Emax= 200 keV deltaVI
Bragg : Emin= 0 meV Emax= 200 keV deltaVI
BetheBloch : Emin= 200 keV Emax= 1 GeV deltaVI
MuBetheBloch : Emin= 1 GeV Emax= 100 TeV
muBrems: for mu+ SubType=3
muBrems: for mu+ XStype:1 SubType=3
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
MuBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi
MuBrem : Emin= 0 meV Emax= 100 TeV ModifiedMephi
===== Limit on energy threshold has been applied
muPairProd: for mu+ SubType=4
muPairProd: for mu+ XStype:1 SubType=4
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1
Sampling table 21x1001 from 1 GeV to 100 TeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
muPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi
muPairProd : Emin= 0 meV Emax= 100 TeV ModifiedMephi
CoulombScat: for mu+, integral:1 SubType=1 BuildTable=1
CoulombScat: for mu+ XStype:3 SubType=1 BuildTable=1
Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 1
ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531
===== EM models for the G4Region DefaultRegionForTheWorld ======
eCoulombScattering : Emin= 0 eV Emax= 100 TeV
eCoulombScattering : Emin= 0 meV Emax= 100 TeV
msc: for mu- SubType= 10
===== EM models for the G4Region DefaultRegionForTheWorld ======
WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llimit=1
WentzelVIUni : Emin= 0 meV Emax= 100 TeV Nbins=240 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm
muIoni: for mu- SubType=2
muIoni: for mu- XStype:1 SubType=2
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1
StepFunction=(0.1, 0.05 mm), integ: 1, fluct: 1, linLossLim= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
ICRU73QO : Emin= 0 eV Emax= 200 keV deltaVI
ICRU73QO : Emin= 0 meV Emax= 200 keV deltaVI
BetheBloch : Emin= 200 keV Emax= 1 GeV deltaVI
MuBetheBloch : Emin= 1 GeV Emax= 100 TeV
muBrems: for mu- SubType=3
muBrems: for mu- XStype:1 SubType=3
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
MuBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi
MuBrem : Emin= 0 meV Emax= 100 TeV ModifiedMephi
===== Limit on energy threshold has been applied
muPairProd: for mu- SubType=4
muPairProd: for mu- XStype:1 SubType=4
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1
Sampling table 21x1001 from 1 GeV to 100 TeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
muPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi
muPairProd : Emin= 0 meV Emax= 100 TeV ModifiedMephi
CoulombScat: for mu-, integral:1 SubType=1 BuildTable=1
CoulombScat: for mu- XStype:3 SubType=1 BuildTable=1
Used Lambda table of mu+
ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531
===== EM models for the G4Region DefaultRegionForTheWorld ======
eCoulombScattering : Emin= 0 eV Emax= 100 TeV
eCoulombScattering : Emin= 0 meV Emax= 100 TeV
msc: for pi+ SubType= 10
===== EM models for the G4Region DefaultRegionForTheWorld ======
WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llimit=1
WentzelVIUni : Emin= 0 meV Emax= 100 TeV Nbins=240 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm
hIoni: for pi+ SubType=2
hIoni: for pi+ XStype:1 SubType=2
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1
StepFunction=(0.1, 0.05 mm), integ: 1, fluct: 1, linLossLim= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
Bragg : Emin= 0 eV Emax=297.505 keV deltaVI
Bragg : Emin= 0 meV Emax=297.505 keV deltaVI
BetheBloch : Emin=297.505 keV Emax= 100 TeV deltaVI
hBrems: for pi+ SubType=3
hBrems: for pi+ XStype:1 SubType=3
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi
hBrem : Emin= 0 meV Emax= 100 TeV ModifiedMephi
===== Limit on energy threshold has been applied
hPairProd: for pi+ SubType=4
hPairProd: for pi+ XStype:1 SubType=4
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1
Sampling table 20x1001 from 1.11656 GeV to 100 TeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi
hPairProd : Emin= 0 meV Emax= 100 TeV ModifiedMephi
CoulombScat: for pi+, integral:1 SubType=1 BuildTable=1
CoulombScat: for pi+ XStype:3 SubType=1 BuildTable=1
Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 1
ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531
===== EM models for the G4Region DefaultRegionForTheWorld ======
eCoulombScattering : Emin= 0 eV Emax= 100 TeV
eCoulombScattering : Emin= 0 meV Emax= 100 TeV
msc: for pi- SubType= 10
===== EM models for the G4Region DefaultRegionForTheWorld ======
WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llimit=1
WentzelVIUni : Emin= 0 meV Emax= 100 TeV Nbins=240 100 eV - 100 TeV
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm
hIoni: for pi- SubType=2
hIoni: for pi- XStype:1 SubType=2
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1
StepFunction=(0.1, 0.05 mm), integ: 1, fluct: 1, linLossLim= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
ICRU73QO : Emin= 0 eV Emax=297.505 keV deltaVI
ICRU73QO : Emin= 0 meV Emax=297.505 keV deltaVI
BetheBloch : Emin=297.505 keV Emax= 100 TeV deltaVI
hBrems: for pi- SubType=3
hBrems: for pi- XStype:1 SubType=3
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi
hBrem : Emin= 0 meV Emax= 100 TeV ModifiedMephi
===== Limit on energy threshold has been applied
hPairProd: for pi- SubType=4
hPairProd: for pi- XStype:1 SubType=4
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1
Sampling table 20x1001 from 1.11656 GeV to 100 TeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi
hPairProd : Emin= 0 meV Emax= 100 TeV ModifiedMephi
CoulombScat: for pi-, integral:1 SubType=1 BuildTable=1
CoulombScat: for pi- XStype:3 SubType=1 BuildTable=1
Used Lambda table of pi+
ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531
===== EM models for the G4Region DefaultRegionForTheWorld ======
eCoulombScattering : Emin= 0 eV Emax= 100 TeV
eCoulombScattering : Emin= 0 meV Emax= 100 TeV
========= Table of registered couples ============================
Index : 0 used in the geometry : Yes
Material : Air
Material : G4_AIR
Range cuts : gamma 50 um e- 50 um e+ 50 um proton 50 um
Energy thresholds : gamma 250 eV e- 250 eV e+ 250 eV proton 5 keV
Region(s) which use this couple :
DefaultRegionForTheWorld
Index : 1 used in the geometry : Yes
Material : Water
Material : G4_WATER
Range cuts : gamma 50 um e- 50 um e+ 50 um proton 50 um
Energy thresholds : gamma 250 eV e- 57.2461 keV e+ 56.4171 keV proton 5 keV
Region(s) which use this couple :
@@ -675,12 +683,12 @@ Index : 1 used in the geometry : Yes
Index : 2 used in the geometry : Yes
Material : Stainless steel 304
Range cuts : gamma 50 um e- 50 um e+ 50 um proton 50 um
Energy thresholds : gamma 4.39316 keV e- 154.358 keV e+ 151.017 keV proton 5 keV
Energy thresholds : gamma 4.34536 keV e- 155.488 keV e+ 151.017 keV proton 5 keV
Region(s) which use this couple :
DefaultRegionForTheWorld
Index : 3 used in the geometry : Yes
Material : Iridium
Material : G4_Ir
Range cuts : gamma 50 um e- 50 um e+ 50 um proton 50 um
Energy thresholds : gamma 26.8116 keV e- 240.851 keV e+ 233.926 keV proton 5 keV
Region(s) which use this couple :
@@ -35,7 +35,7 @@ class G4GeneralParticleSource;
class BrachyActionInitialization: public G4VUserActionInitialization
{
public:
BrachyActionInitialization();
explicit BrachyActionInitialization();
virtual ~BrachyActionInitialization();
virtual void BuildForMaster() const;
virtual void Build() const;
@@ -24,7 +24,7 @@
// ********************************************************************
//
/*
Author: Susanna Guatelli
Author: Susanna Guatelli, susanna@uow.edu.au
The class BrachyAnalysisManager creates and manages histograms and ntuples
*/
@@ -28,64 +28,59 @@
// * BrachyDetectorConstruction.hh *
// * *
// ****************************************
// This class manages the geometry of the simulation experimental set-up
//
// S. Guatelli, A. Le
// S. Guatelli, A. Le, University of Wollongong
#ifndef BrachyDetectorConstruction_H
#define BrachyDetectorConstruction_H 1
#include "G4VUserDetectorConstruction.hh"
#include "globals.hh"
#include "G4SystemOfUnits.hh"
class BrachyDetectorMessenger;
class BrachyFactory;
class G4LogicalVolume;
class G4Material;
class G4Box;
class G4Colour;
class G4VPhysicalVolume;
class G4VPhysicalVolume;
class BrachyMaterial;
class BrachyFactory;
class BrachyDetectorConstruction : public G4VUserDetectorConstruction
{
public:
BrachyDetectorConstruction();
explicit BrachyDetectorConstruction();
~BrachyDetectorConstruction();
G4VPhysicalVolume* Construct();
void SwitchBrachytherapicSeed(); //Change radiactive source through GUI
G4VPhysicalVolume* Construct() override;
void SwitchBrachytherapicSeed(); //Change brachy source through GUI
void SelectBrachytherapicSeed(G4String val);
void ConstructPhantom();
void PrintDetectorParameters();
void SetPhantomMaterial(G4String);
private:
G4int fDetectorChoice; //Select brachytherapic seed
BrachyFactory* fFactory;
// World ...
BrachyDetectorMessenger* fDetectorMessenger;
G4Box* fWorld; //pointer to the solid World
G4LogicalVolume* fWorldLog; //pointer to the logical World
G4VPhysicalVolume* fWorldPhys; //pointer to the physical World
// Phantom ...
G4Box* fPhantom; //pointer to solid phantom
G4LogicalVolume* fPhantomLog; //pointer to logic phantom
G4VPhysicalVolume* fPhantomPhys; //pointer to physical phantom
G4Material* fPhantomAbsorberMaterial;
G4double fPhantomSizeX; //Phantom XSize
G4double fPhantomSizeY; //Phantom YSize
G4double fPhantomSizeZ; //Phantom ZSize
G4double fWorldSizeX ; //World XSize
G4double fWorldSizeY ; //World YSize
G4double fWorldSizeZ ; //World XSize
BrachyDetectorMessenger* fDetectorMessenger;
BrachyMaterial* fMaterial;
G4double fPhantomSizeX; //Phantom X Size
G4double fPhantomSizeY; //Phantom Y Size
G4double fPhantomSizeZ; //Phantom Z Size
G4double fWorldSizeX; //World X Size
G4double fWorldSizeY; //World Y Size
G4double fWorldSizeZ; //World X Size
G4int fDetectorChoice; //Select brachytherapic seed
};
#endif
@@ -46,20 +46,19 @@ class G4LogicalVolume;
class G4Tubs;
class G4Cons;
class G4VPhysicalVolume;
class BrachyMaterial;
class G4VisAttributes;
class BrachyDetectorConstructionFlexi
{
public:
BrachyDetectorConstructionFlexi();
explicit BrachyDetectorConstructionFlexi();
~BrachyDetectorConstructionFlexi();
void ConstructFlexi(G4VPhysicalVolume*);
// Model the Flexi iridium source
void CleanFlexi();
// Destroy the Iridium source in the experimental set-up
// Clean the Iridium source in the experimental set-up
private:
G4Tubs* fSteelShell;
@@ -89,8 +88,6 @@ private:
G4VisAttributes* fSteelAttributes;
G4VisAttributes* fEndAttributes;
G4VisAttributes* fSimpleIridiumVisAtt;
BrachyMaterial* fMat;
};
#endif
@@ -30,7 +30,9 @@
// * BrachyDetectorConstructionI.hh *
// * *
// ****************************************
// Model of the Iodium source
//
// Author: Susanna Guatelli, susanna@uow.edu.au
// Model of Bebig Isoseed Iodine source
//
#ifndef BrachyDetectorConstructionI_H
#define BrachyDetectorConstructionI_H 1
@@ -42,16 +44,15 @@ class G4Tubs;
class G4Sphere;
class G4LogicalVolume;
class G4VPhysicalVolume;
class BrachyMaterial;
class G4VisAttributes;
class BrachyDetectorConstructionI
{
public:
BrachyDetectorConstructionI();
explicit BrachyDetectorConstructionI();
~BrachyDetectorConstructionI();
void ConstructIodine(G4VPhysicalVolume*);// Construct iodium source
void CleanIodine();
void ConstructIodine(G4VPhysicalVolume*);// Construct iodine source
void CleanIodine(); // Clean iodine source
private:
G4Tubs* fDefaultTub;
G4Tubs* fCapsule;
@@ -69,8 +70,6 @@ private:
G4VisAttributes* fSimpleIodineVisAtt;
G4VisAttributes* fSimpleCapsuleVisAtt;
G4VisAttributes* fSimpleCapsuleTipVisAtt;
BrachyMaterial* fMaterial;
};
#endif
@@ -43,7 +43,6 @@
#include "G4VUserDetectorConstruction.hh"
class G4VPhysicalVolume;
class BrachyMaterial;
class G4Sphere;
class G4Tubs;
class G4LogicalVolume;
@@ -58,9 +57,6 @@ public:
void CleanLeipzigApplicator();
private:
BrachyMaterial* fMaterial;
G4Tubs* fCapsule;
G4Sphere* fCapsuleTip;
G4Tubs* fIridiumCore;
@@ -83,5 +79,4 @@ private:
G4VisAttributes* fSimpleCapsuleTipVisAtt;
G4VisAttributes* fApplicatorVisAtt;
};
#endif
@@ -47,13 +47,12 @@ class G4Tubs;
class G4Box;
class G4Sphere;
class G4VPhysicalVolume;
class BrachyMaterial;
class G4VisAttributes;
class BrachyDetectorConstructionOncura6711
{
public:
BrachyDetectorConstructionOncura6711();
explicit BrachyDetectorConstructionOncura6711();
~BrachyDetectorConstructionOncura6711();
void ConstructOncura6711(G4VPhysicalVolume*);
@@ -78,9 +77,6 @@ private:
G4Tubs* fOncuraSilverCore;
G4LogicalVolume* fOncuraSilverCoreLog;
G4VPhysicalVolume* fOncuraSilverCorePhys;
BrachyMaterial* fMat;
G4VisAttributes* fOncuraCapsuleShellVisAtt;
G4VisAttributes* fOncuraCapsuleTipVisAtt;
G4VisAttributes* fOncuraSilverCoreVisAtt;
@@ -46,20 +46,19 @@ class G4Tubs;
class G4Box;
class G4Sphere;
class G4VPhysicalVolume;
class BrachyMaterial;
class G4VisAttributes;
class BrachyDetectorConstructionTG186
{
public:
BrachyDetectorConstructionTG186();
explicit BrachyDetectorConstructionTG186();
~BrachyDetectorConstructionTG186();
void ConstructTG186(G4VPhysicalVolume*);
// Model the TG186 reference source
void CleanTG186();
// Destroy the TG186 reference source in the experimental set-up
// Clean the TG186 reference source
private:
G4Tubs* fTG186capsule ;
@@ -74,9 +73,6 @@ private:
G4Tubs* fTG186cable;
G4LogicalVolume* fTG186cableLog;
G4VPhysicalVolume* fTG186cablePhys;
BrachyMaterial* fMat;
G4VisAttributes* fTG186simpleCapsuleVisAtt;
G4VisAttributes* fTG186simpleCapsuleTipVisAtt;
G4VisAttributes* fTG186simpleIridiumVisAtt;
@@ -42,14 +42,13 @@ class BrachyDetectorConstruction;
class G4UIdirectory;
class G4UIcmdWithAString;
class BrachyDetectorMessenger: public G4UImessenger
{
public:
BrachyDetectorMessenger(BrachyDetectorConstruction* );
explicit BrachyDetectorMessenger(BrachyDetectorConstruction* );
~BrachyDetectorMessenger();
void SetNewValue(G4UIcommand*, G4String);
void SetNewValue(G4UIcommand*, G4String) override;
private:
@@ -49,7 +49,7 @@ class BrachyFactory
{
public:
BrachyFactory();
explicit BrachyFactory();
virtual ~BrachyFactory();
// this function manages the creation of the source in terms of
@@ -40,24 +40,23 @@
#include "BrachyFactory.hh"
#include "G4RunManager.hh"
class BrachyFactory;
class BrachyDetectorConstructionFlexi;
class G4ParticleGun;
class G4Run;
class G4Event;
class BrachyFactory;
class BrachyDetectorConstructionFlexi;
// This class manages the creation of the Nucletron Flexi Source
class BrachyFactoryFlexi : public BrachyFactory
{
public:
BrachyFactoryFlexi();
explicit BrachyFactoryFlexi();
~BrachyFactoryFlexi();
void CreateSource(G4VPhysicalVolume*);
void CleanSource();
void CreateSource(G4VPhysicalVolume*)override;
void CleanSource() override;
private:
BrachyDetectorConstructionFlexi* fFlexiSource;
};
#endif
@@ -33,34 +33,30 @@
// Code developed by:
// S.Guatelli
//
//
//
//
// --------------------------------------------------------------
#ifndef BrachyFactoryI_h
#define BrachyFactoryI_h 1
#include "G4VUserPrimaryGeneratorAction.hh"
#include "BrachyDetectorConstructionI.hh"
#include "BrachyFactory.hh"
#include "G4RunManager.hh"
#include "G4VUserPrimaryGeneratorAction.hh"
class BrachyFactory;
class BrachyDetectorConstructionI;
class G4ParticleGun;
class G4Run;
class G4Event;
class BrachyFactory;
class BrachyDetectorConstructionI;
// This class manages the creation of Bebig Isoseed I-125 source
// used in interstitial brachytherapy ...
class BrachyFactoryI:public BrachyFactory
{
public:
BrachyFactoryI();
explicit BrachyFactoryI();
~BrachyFactoryI();
void CreateSource(G4VPhysicalVolume*);
void CleanSource();
void CreateSource(G4VPhysicalVolume*)override;
void CleanSource() override;
private:
BrachyDetectorConstructionI* fIodineSource;
@@ -38,24 +38,24 @@
#ifndef BrachyFactoryLeipzig_h
#define BrachyFactoryLeipzig_h 1
#include "G4VUserPrimaryGeneratorAction.hh"
#include "BrachyFactory.hh"
#include "G4VUserPrimaryGeneratorAction.hh"
#include "G4RunManager.hh"
class BrachyDetectorConstructionLeipzig;
class G4ParticleGun;
class G4Run;
class G4Event;
class BrachyFactory;
class BrachyDetectorConstructionLeipzig;
class BrachyFactoryLeipzig : public BrachyFactory
{
public:
BrachyFactoryLeipzig();
explicit BrachyFactoryLeipzig();
~BrachyFactoryLeipzig();
void CreateSource(G4VPhysicalVolume*);
void CleanSource();
void CreateSource(G4VPhysicalVolume*)override;
void CleanSource()override;
private:
BrachyDetectorConstructionLeipzig* fLeipzigSource;
@@ -39,21 +39,21 @@
#include "BrachyFactory.hh"
#include "G4RunManager.hh"
class BrachyFactory;
class BrachyDetectorConstructionOncura6711;
class G4ParticleGun;
class G4Run;
class G4Event;
class BrachyFactory;
class BrachyDetectorConstructionOncura6711;
// This class manages the creation of iodine source
// brachytherapy ...
class BrachyFactoryOncura6711 : public BrachyFactory
{
public:
BrachyFactoryOncura6711();
explicit BrachyFactoryOncura6711();
~BrachyFactoryOncura6711();
void CreateSource(G4VPhysicalVolume*);
void CleanSource();
void CreateSource(G4VPhysicalVolume*) override;
void CleanSource() override;
private:
BrachyDetectorConstructionOncura6711* fOncura6711IodineSource;
@@ -39,21 +39,19 @@
#include "BrachyFactory.hh"
#include "G4RunManager.hh"
class BrachyFactory;
class BrachyDetectorConstructionTG186;
class G4ParticleGun;
class G4Run;
class G4Event;
class BrachyFactory;
class BrachyDetectorConstructionTG186;
// This class manages the creation of iridum source used in endocavitary
// brachytherapy ...
class BrachyFactoryTG186 : public BrachyFactory
class BrachyFactoryTG186: public BrachyFactory
{
public:
BrachyFactoryTG186();
explicit BrachyFactoryTG186();
~BrachyFactoryTG186();
void CreateSource(G4VPhysicalVolume*);
void CleanSource();
void CreateSource(G4VPhysicalVolume*) override;
void CleanSource() override;
private:
BrachyDetectorConstructionTG186* fTG186iridiumSource;
@@ -44,20 +44,17 @@ class BrachyPhysicsListMessenger;
class BrachyPhysicsList: public G4VModularPhysicsList
{
public:
BrachyPhysicsList();
explicit BrachyPhysicsList();
~BrachyPhysicsList();
void ConstructParticle();
void ConstructParticle() override;
void AddPhysicsList(const G4String& name);
void ConstructProcess();
protected:
void SetCuts();
void ConstructProcess() override;
private:
BrachyPhysicsListMessenger* fMessenger;
G4VPhysicsConstructor* fEmPhysicsList;
G4VPhysicsConstructor* fDecPhysicsList;
G4VPhysicsConstructor* fRadDecayPhysicsList;
BrachyPhysicsListMessenger* fMessenger;
G4String fEmName;
};
#endif
@@ -23,6 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// Author: Susanna Guatelli susanna@uow.edu.au
//
#ifndef BrachyPhysicsListMessenger_h
#define BrachyPhysicsListMessenger_h 1
@@ -36,17 +38,16 @@ class G4UIcmdWithAString;
class BrachyPhysicsListMessenger: public G4UImessenger
{
public:
BrachyPhysicsListMessenger(BrachyPhysicsList* );
explicit BrachyPhysicsListMessenger(BrachyPhysicsList* );
~BrachyPhysicsListMessenger();
virtual
void SetNewValue(G4UIcommand*, G4String);
void SetNewValue(G4UIcommand*, G4String) override;
private:
BrachyPhysicsList* fPhysicsList;
G4UIdirectory* fPhysDir;
G4UIcmdWithAString* fListCmd;
};
#endif
@@ -32,7 +32,7 @@
// ********************************************
//
// code developed by Susanna Guatelli
//
#ifndef BrachyPrimaryGeneratorAction_h
#define BrachyPrimaryGeneratorAction_h 1
@@ -43,11 +43,11 @@ class G4GeneralParticleSource;
class BrachyPrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction
{
public:
BrachyPrimaryGeneratorAction();
explicit BrachyPrimaryGeneratorAction();
~BrachyPrimaryGeneratorAction();
public:
void GeneratePrimaries(G4Event* anEvent);
void GeneratePrimaries(G4Event* anEvent) override;
private:
G4GeneralParticleSource* fGun;
@@ -24,14 +24,7 @@
// ********************************************************************
//
//
//
//
//
// ********************************************
// * *
// * BrachyRunAction.hh *
// * *
// ********************************************
// Author: Susanna Guatelli
//
#ifndef BrachyRunAction_h
#define BrachyRunAction_h 1
@@ -40,19 +33,18 @@
#include "G4RunManager.hh"
#include "globals.hh"
class G4Run;
class BrachyRunMessenger;
class G4Run;
class BrachyRunAction : public G4UserRunAction
{
public:
BrachyRunAction();
explicit BrachyRunAction();
~BrachyRunAction();
public:
void BeginOfRunAction(const G4Run*);
void EndOfRunAction(const G4Run* );
void BeginOfRunAction(const G4Run*) override;
void EndOfRunAction(const G4Run*) override;
};
#endif
@@ -23,8 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// -------------------------------------------------------------------
// -------------------------------------------------------------------
// Code by Susanna Guatelli
//
//
@@ -37,9 +35,9 @@ class BrachySteppingAction: public G4UserSteppingAction
{
public:
BrachySteppingAction();
explicit BrachySteppingAction();
~BrachySteppingAction();
void UserSteppingAction(const G4Step*);
void UserSteppingAction(const G4Step*) override;
};
#endif
@@ -37,19 +37,15 @@ Original code from geant4/examples/extended/runAndEvent/RE03,
// by M. Asai
*/
//
// class description:
//
//This class represents storing the scored quantity into a file.
//
class BrachyUserScoreWriter:public G4VScoreWriter
{
public:
BrachyUserScoreWriter();
explicit BrachyUserScoreWriter();
virtual ~BrachyUserScoreWriter();
// store a quantity into a file
void DumpQuantityToFile(const G4String & psName,
const G4String & fileName,
const G4String & option);
const G4String & option) override;
};
#endif
@@ -37,6 +37,13 @@
// * *
// ****************************************
//
#include "BrachyFactoryLeipzig.hh"
#include "BrachyFactoryTG186.hh"
#include "BrachyFactoryI.hh"
#include "BrachyFactoryFlexi.hh"
#include "BrachyFactoryOncura6711.hh"
#include "BrachyDetectorMessenger.hh"
#include "BrachyDetectorConstruction.hh"
#include "G4SystemOfUnits.hh"
#include "G4CSGSolid.hh"
#include "G4MaterialPropertyVector.hh"
@@ -52,21 +59,16 @@
#include "G4Colour.hh"
#include "G4UserLimits.hh"
#include "G4VisAttributes.hh"
#include "BrachyMaterial.hh"
#include "BrachyFactoryLeipzig.hh"
#include "BrachyFactoryTG186.hh"
#include "BrachyFactoryI.hh"
#include "BrachyFactoryFlexi.hh"
#include "BrachyFactoryOncura6711.hh"
#include "BrachyDetectorMessenger.hh"
#include "BrachyDetectorConstruction.hh"
#include "G4NistManager.hh"
BrachyDetectorConstruction::BrachyDetectorConstruction():
fDetectorChoice(0), fFactory(nullptr),
fWorld(nullptr), fWorldLog(nullptr), fWorldPhys(nullptr),
fFactory(nullptr), fWorld(nullptr), fWorldLog(nullptr), fWorldPhys(nullptr),
fPhantom(nullptr), fPhantomLog(nullptr), fPhantomPhys(nullptr),
fPhantomAbsorberMaterial(nullptr)
fDetectorChoice(0)
{
// Define the messenger of the Detector component
fDetectorMessenger = new BrachyDetectorMessenger(this);
// Define half size of the phantom along the x, y, z axis
fPhantomSizeX = 15.*cm;
fPhantomSizeY = 15.*cm;
@@ -77,29 +79,18 @@ BrachyDetectorConstruction::BrachyDetectorConstruction():
fWorldSizeY = 4.0*m;
fWorldSizeZ = 4.0*m;
// Define the messenger of the Detector component
// It is possible to modify geometrical parameters through UI
fDetectorMessenger = new BrachyDetectorMessenger(this);
// Define the Flexi source as default source modelled in the geometry
fFactory = new BrachyFactoryFlexi();
// BrachyMaterial defined the all the materials necessary
// for the experimental set-up
fMaterial = new BrachyMaterial();
}
BrachyDetectorConstruction::~BrachyDetectorConstruction()
{
delete fMaterial;
delete fDetectorMessenger;
delete fFactory;
delete fDetectorMessenger;
}
G4VPhysicalVolume* BrachyDetectorConstruction::Construct()
{
fMaterial -> DefineMaterials();
// Model the phantom (water box)
ConstructPhantom();
@@ -113,7 +104,7 @@ void BrachyDetectorConstruction::SwitchBrachytherapicSeed()
{
// Change the source in the water phantom
fFactory -> CleanSource();
G4cout << "Old Source is deleted ..." << G4endl;
G4cout << "Old brachy source is deleted ..." << G4endl;
delete fFactory;
switch(fDetectorChoice)
@@ -139,7 +130,7 @@ void BrachyDetectorConstruction::SwitchBrachytherapicSeed()
}
fFactory -> CreateSource(fPhantomPhys);
G4cout << "... New source is created ..." << G4endl;
G4cout << "New brachy source is created ..." << G4endl;
// Notify run manager that the new geometry has been built
G4RunManager::GetRunManager() -> GeometryHasBeenModified();
@@ -171,7 +162,7 @@ void BrachyDetectorConstruction::SelectBrachytherapicSeed(G4String val)
}
}
}
G4cout << "Now the source is " << val << G4endl;
G4cout << "Now the brachy source is " << val << G4endl;
}
void BrachyDetectorConstruction::ConstructPhantom()
@@ -181,8 +172,10 @@ void BrachyDetectorConstruction::ConstructPhantom()
// Define the light blue color
G4Colour lblue (0.0, 0.0, .75);
G4Material* air = fMaterial -> GetMat("Air") ;
G4Material* water = fMaterial -> GetMat("Water");
//Get nist material manager
G4NistManager* nist = G4NistManager::Instance();
G4Material* air = nist -> FindOrBuildMaterial("G4_AIR");
G4Material* water = nist -> FindOrBuildMaterial("G4_WATER");
// World volume
fWorld = new G4Box("World", fWorldSizeX, fWorldSizeY, fWorldSizeZ);
@@ -222,7 +215,7 @@ void BrachyDetectorConstruction::PrintDetectorParameters()
<< fPhantomSizeZ *2./cm
<< " cm" << G4endl
<< "The phantom is made of "
<< fPhantomAbsorberMaterial -> GetName() <<G4endl
<< fPhantomLog -> GetMaterial() -> GetName() <<G4endl
<< "the source is at the center of the phantom" << G4endl
<< "----------------"
<< G4endl;
@@ -230,17 +223,16 @@ void BrachyDetectorConstruction::PrintDetectorParameters()
void BrachyDetectorConstruction::SetPhantomMaterial(G4String materialChoice)
{
// It is possible to change the material of the phantom
// interactively
// Method to change the material of the phantom
G4NistManager* nist = G4NistManager::Instance();
// Search the material by its name
G4Material* pttoMaterial = G4Material::GetMaterial(materialChoice);
G4Material* pttoMaterial = nist -> FindOrBuildMaterial(materialChoice);
if (pttoMaterial)
{
fPhantomAbsorberMaterial = pttoMaterial;
fPhantomLog -> SetMaterial(pttoMaterial);
PrintDetectorParameters();
} else
{ G4cout << "WARNING: material '" << materialChoice << "' not available!" << G4endl;}
} else G4cout << "WARNING: material '" << materialChoice << "' not available!" << G4endl;
}
@@ -51,9 +51,9 @@
#include "G4Transform3D.hh"
#include "G4RotationMatrix.hh"
#include "G4TransportationManager.hh"
#include "BrachyMaterial.hh"
#include "G4VisAttributes.hh"
#include "G4Colour.hh"
#include "G4NistManager.hh"
BrachyDetectorConstructionFlexi::BrachyDetectorConstructionFlexi()
: fSteelShell(nullptr), fLogicalSteelShell(nullptr), fAirGap(nullptr), fLogicalAirGap(nullptr), fPhysicalAirGap(nullptr),
@@ -62,21 +62,36 @@ BrachyDetectorConstructionFlexi::BrachyDetectorConstructionFlexi()
fCable(nullptr), fLogicalCable(nullptr), fPhysicalCable(nullptr),
fIridiumCore(nullptr), fLogicalIridiumCore(nullptr), fPhysicalIridiumCore(nullptr),
fSteelAttributes(nullptr), fEndAttributes(nullptr), fSimpleIridiumVisAtt(nullptr)
{
fMat = new BrachyMaterial();
}
{}
BrachyDetectorConstructionFlexi::~BrachyDetectorConstructionFlexi()
{
delete fMat;
}
{}
void BrachyDetectorConstructionFlexi::ConstructFlexi(G4VPhysicalVolume* mother)
{
G4Material* steelMat = fMat -> GetMat("Stainless steel 304");
G4Material* iridiumMat = fMat -> GetMat("Iridium");
G4Material* airMat = fMat -> GetMat("Air");
G4NistManager* nist = G4NistManager::Instance();
G4Material* iridiumMat = nist -> FindOrBuildMaterial("G4_Ir");
G4Material* airMat = nist -> FindOrBuildMaterial("G4_AIR");
//Define Stainless-steel-304 - Flexi source
G4int Z; //atomic number of the element
G4Element* elC = nist -> FindOrBuildElement(Z=6);
G4Element* elMn = nist -> FindOrBuildElement(Z=12);
G4Element* elSi = nist -> FindOrBuildElement(Z=14);
G4Element* elCr = nist -> FindOrBuildElement(Z=24);
G4Element* elFe = nist -> FindOrBuildElement(Z=26);
G4Element* elNi = nist -> FindOrBuildElement(Z=28);
constexpr G4double d = 7.999*g/cm3;
G4Material* steelMat = new G4Material("Stainless steel 304",d,6);
steelMat -> AddElement(elMn, 0.02);
steelMat -> AddElement(elSi, 0.01);
steelMat -> AddElement(elCr, 0.19);
steelMat -> AddElement(elNi, 0.10);
steelMat -> AddElement(elFe, 0.6792);
steelMat -> AddElement(elC, 0.0008);
//Define dimensions of the outer Steel shell around the solid source - not including the ends
G4double shellr_min = 0.00 * mm;
@@ -37,9 +37,9 @@
// ****************************************
//
//
#include "BrachyDetectorConstructionI.hh"
#include "globals.hh"
#include "G4SystemOfUnits.hh"
#include "BrachyDetectorConstructionI.hh"
#include "G4CSGSolid.hh"
#include "G4Sphere.hh"
#include "G4MaterialPropertyVector.hh"
@@ -52,33 +52,28 @@
#include "G4Transform3D.hh"
#include "G4RotationMatrix.hh"
#include "G4TransportationManager.hh"
#include "BrachyMaterial.hh"
#include "G4VisAttributes.hh"
#include "G4Colour.hh"
#include "G4NistManager.hh"
BrachyDetectorConstructionI::BrachyDetectorConstructionI():
fDefaultTub(nullptr), fCapsule(nullptr), fCapsuleTip(nullptr), fIodineCore(nullptr), fDefaultTubLog(nullptr),
fCapsuleLog(nullptr), fCapsuleTipLog(nullptr), fIodineCoreLog(nullptr), fDefaultTubPhys(nullptr),
fCapsulePhys(nullptr),fCapsuleTipPhys1(nullptr),fCapsuleTipPhys2(nullptr), fIodineCorePhys(nullptr),
fSimpleIodineVisAtt(nullptr), fSimpleCapsuleVisAtt(nullptr), fSimpleCapsuleTipVisAtt(nullptr)
{
fMaterial = new BrachyMaterial();
}
{}
BrachyDetectorConstructionI::~BrachyDetectorConstructionI()
{
delete fMaterial;
}
{}
void BrachyDetectorConstructionI::ConstructIodine(G4VPhysicalVolume* mother)
{
// source Bebig Isoseed I-125 ...
//Get materials for source construction ...
G4Material* titanium = fMaterial -> GetMat("titanium");
G4Material* air = fMaterial -> GetMat("Air");
G4Material* Iodine = fMaterial -> GetMat("Iodine");
// Model of the Bebig Isoseed I-125 brachy source
G4NistManager* nist = G4NistManager::Instance();
G4Material* titanium = nist -> FindOrBuildMaterial("G4_Ti");
G4Material* iodine = nist -> FindOrBuildMaterial("G4_I");
G4Material* air = nist -> FindOrBuildMaterial("G4_AIR");
G4Colour red (1.0, 0.0, 0.0) ;
G4Colour magenta (1.0, 0.0, 1.0) ;
G4Colour lblue (0.0, 0.0, .75);
@@ -94,8 +89,7 @@ void BrachyDetectorConstructionI::ConstructIodine(G4VPhysicalVolume* mother)
false,
0, true);
// Capsule main body ...
G4double capsuleR = 0.35*mm;
fCapsule = new G4Tubs("fCapsule", capsuleR,0.40*mm,1.84*mm,0.*deg,360.*deg);
fCapsule = new G4Tubs("fCapsule", 0.35*mm,0.40*mm,1.84*mm,0.*deg,360.*deg);
fCapsuleLog = new G4LogicalVolume(fCapsule,titanium,"fCapsuleLog");
fCapsulePhys = new G4PVPlacement(nullptr,
G4ThreeVector(),
@@ -134,7 +128,7 @@ void BrachyDetectorConstructionI::ConstructIodine(G4VPhysicalVolume* mother)
// Radiactive core ...
fIodineCore = new G4Tubs("ICore",0.085*mm,0.35*mm,1.75*mm,0.*deg,360.*deg);
fIodineCoreLog = new G4LogicalVolume(fIodineCore,Iodine,"IodineCoreLog");
fIodineCoreLog = new G4LogicalVolume(fIodineCore,iodine,"IodineCoreLog");
fIodineCorePhys = new G4PVPlacement(nullptr,
G4ThreeVector(0.,0.,0.),
"IodineCorePhys",
@@ -37,13 +37,9 @@
// * *
// *******************************************
//
//
//
// Code by S. Guatelli
//
#include "BrachyDetectorConstructionLeipzig.hh"
#include "globals.hh"
#include "G4SystemOfUnits.hh"
#include "BrachyDetectorConstructionLeipzig.hh"
#include "G4CSGSolid.hh"
#include "G4Sphere.hh"
#include "G4RunManager.hh"
@@ -55,46 +51,55 @@
#include "G4Transform3D.hh"
#include "G4RotationMatrix.hh"
#include "G4TransportationManager.hh"
#include "BrachyMaterial.hh"
#include "G4VisAttributes.hh"
#include "G4Colour.hh"
// Leipzig Applicator ...
#include "G4NistManager.hh"
BrachyDetectorConstructionLeipzig::BrachyDetectorConstructionLeipzig():
fCapsule(nullptr), fCapsuleTip(nullptr), fIridiumCore(nullptr), fApplicator1(nullptr), fApplicator2(nullptr),
fCapsuleLog(nullptr), fCapsuleTipLog(nullptr), fIridiumCoreLog(nullptr), fApplicator1Log(nullptr),
fApplicator2Log(nullptr), fCapsulePhys(nullptr), fCapsuleTipPhys(nullptr), fIridiumCorePhys(nullptr),
fApplicator1Phys(nullptr), fApplicator2Phys(nullptr)
{
fMaterial = new BrachyMaterial();
}
{}
BrachyDetectorConstructionLeipzig::~BrachyDetectorConstructionLeipzig()
{
delete fMaterial;
}
{}
void BrachyDetectorConstructionLeipzig::ConstructLeipzig(G4VPhysicalVolume* mother)
{
G4Colour red (1.0, 0.0, 0.0) ;
G4Colour lblue (0.0, 0.0, .75);
G4Material* capsuleMat = fMaterial -> GetMat("Stainless steel");
G4Material* iridium = fMaterial -> GetMat("Iridium");
G4Material* tungsten = fMaterial -> GetMat("Tungsten");
G4NistManager* nist = G4NistManager::Instance();
G4Material* iridium = nist -> FindOrBuildMaterial("G4_Ir");
G4Material* tungsten = nist -> FindOrBuildMaterial("G4_W");
// Stainless steel (Medical Physics, Vol 25, No 10, Oct 1998)
constexpr G4double d = 8.02*g/cm3;
G4int Z; //atomic number of the element
G4Element* elMn = nist -> FindOrBuildElement(Z=12);
G4Element* elSi = nist -> FindOrBuildElement(Z=14);
G4Element* elCr = nist -> FindOrBuildElement(Z=24);
G4Element* elFe = nist -> FindOrBuildElement(Z=26);
G4Element* elNi = nist -> FindOrBuildElement(Z=28);
G4Material* steel = new G4Material("Stainless steel",d,5);
steel -> AddElement(elMn, 0.02);
steel -> AddElement(elSi, 0.01);
steel -> AddElement(elCr, 0.19);
steel -> AddElement(elNi, 0.10);
steel -> AddElement(elFe, 0.68);
//Iridium source ...
fCapsule = new G4Tubs("Capsule",0,0.55*mm,3.725*mm,0.*deg,360.*deg);
fCapsuleLog = new G4LogicalVolume(fCapsule,capsuleMat,"CapsuleLog");
fCapsuleLog = new G4LogicalVolume(fCapsule,steel,"CapsuleLog");
fCapsulePhys = new G4PVPlacement(nullptr, G4ThreeVector(0,0,-1.975*mm),"CapsulePhys",
fCapsuleLog,mother, //mother volume: phantom
false,0, true);
// Capsule tip
fCapsuleTip = new G4Sphere("CapsuleTip",0.*mm,0.55*mm,0.*deg,360.*deg,0.*deg,90.*deg);
fCapsuleTipLog = new G4LogicalVolume(fCapsuleTip,capsuleMat,"CapsuleTipLog");
fCapsuleTipLog = new G4LogicalVolume(fCapsuleTip,steel,"CapsuleTipLog");
fCapsuleTipPhys = new G4PVPlacement(nullptr,G4ThreeVector(0.,0.,1.75*mm),"CapsuleTipPhys",
fCapsuleTipLog,mother,false,0, true);
// Iridium core
@@ -39,9 +39,9 @@
//
//
//
#include "BrachyDetectorConstructionOncura6711.hh"
#include "globals.hh"
#include "G4SystemOfUnits.hh"
#include "BrachyDetectorConstructionOncura6711.hh"
#include "G4Sphere.hh"
#include "G4RunManager.hh"
#include "G4Box.hh"
@@ -52,7 +52,7 @@
#include "G4Transform3D.hh"
#include "G4RotationMatrix.hh"
#include "G4TransportationManager.hh"
#include "BrachyMaterial.hh"
#include "G4NistManager.hh"
#include "G4VisAttributes.hh"
#include "G4Colour.hh"
@@ -70,41 +70,38 @@ BrachyDetectorConstructionOncura6711::BrachyDetectorConstructionOncura6711()
fOncuraSilverCorePhys(nullptr),
fOncuraCapsuleShellVisAtt(nullptr), fOncuraCapsuleTipVisAtt(nullptr),
fOncuraSilverCoreVisAtt(nullptr)
{
fMat = new BrachyMaterial();
}
{}
BrachyDetectorConstructionOncura6711::~BrachyDetectorConstructionOncura6711()
{
delete fMat;
}
{}
void BrachyDetectorConstructionOncura6711::ConstructOncura6711(G4VPhysicalVolume* mother)
{
G4Colour red (1.0, 0.0, 0.0) ;
G4Colour magenta (1.0, 0.0, 1.0) ;
G4Material* titaniumMat = fMat -> GetMat("titanium");
G4Material* airMat = fMat -> GetMat("Air");
G4Material* silverMat = fMat -> GetMat("Silver");
G4NistManager* nist = G4NistManager::Instance();
G4Material* titanium = nist -> FindOrBuildMaterial("G4_Ti");
G4Material* air = nist -> FindOrBuildMaterial("G4_AIR");
G4Material* silver = nist -> FindOrBuildMaterial("G4_Ag");
//Capsule shell
fOncuraCapsule = new G4Tubs("OncuraCapsule",0,0.4*mm,1.875*mm,0.*deg,360.*deg);
fOncuraCapsuleLog = new G4LogicalVolume(fOncuraCapsule,titaniumMat,"OncuraCapsuleLog", 0,0,0);
fOncuraCapsuleLog = new G4LogicalVolume(fOncuraCapsule,titanium,"OncuraCapsuleLog", 0,0,0);
fOncuraCapsulePhys = new G4PVPlacement(nullptr, G4ThreeVector(0,0,0),
"OncuraCapsulePhys", fOncuraCapsuleLog,
mother, false, 0, true);
//Capsule tips
fOncuraCapsuleTip1 = new G4Sphere("OncuraCapsuleTip1", 0, 0.4*mm, 0., 360*deg, 0., 90*deg);
fOncuraCapsuleTip1Log = new G4LogicalVolume(fOncuraCapsuleTip1, titaniumMat, "OncuraCapsuleTip1Log",0,0,0);
fOncuraCapsuleTip1Log = new G4LogicalVolume(fOncuraCapsuleTip1, titanium, "OncuraCapsuleTip1Log",0,0,0);
fOncuraCapsuleTip1Phys = new G4PVPlacement(nullptr, G4ThreeVector(0,0,1.875*mm),
"OncuraCapsuleTip1Phys", fOncuraCapsuleTip1Log,
mother, false,
0, true);
fOncuraCapsuleTip2 = new G4Sphere("OncuraCapsuleTip2", 0, 0.4*mm, 0., 360*deg, 90*deg, 90*deg);
fOncuraCapsuleTip2Log = new G4LogicalVolume(fOncuraCapsuleTip2, titaniumMat, "OncuraCapsuleTip2Log",0,0,0);
fOncuraCapsuleTip2Log = new G4LogicalVolume(fOncuraCapsuleTip2, titanium, "OncuraCapsuleTip2Log",0,0,0);
fOncuraCapsuleTip2Phys = new G4PVPlacement(nullptr, G4ThreeVector(0,0,-1.875*mm),
"OncuraCapsuleTip2Phys", fOncuraCapsuleTip2Log,
mother, false,
@@ -112,7 +109,7 @@ fOncuraCapsuleTip2Phys = new G4PVPlacement(nullptr, G4ThreeVector(0,0,-1.875*mm)
//Air gap
fOncuraAirGap = new G4Tubs("OncuraAirGap",0,0.33*mm,1.825*mm,0.*deg,360.*deg);
fOncuraAirGapLog = new G4LogicalVolume(fOncuraAirGap, airMat, "OncuraAirGapLog");
fOncuraAirGapLog = new G4LogicalVolume(fOncuraAirGap, air, "OncuraAirGapLog");
fOncuraAirGapPhys = new G4PVPlacement(nullptr, G4ThreeVector(0,0,0),
"OncuraAirGapPhys", fOncuraAirGapLog,
fOncuraCapsulePhys, false,
@@ -120,7 +117,7 @@ fOncuraAirGapPhys = new G4PVPlacement(nullptr, G4ThreeVector(0,0,0),
//Silver core
fOncuraSilverCore = new G4Tubs("OncuraSilverCore",0,0.25*mm,1.4*mm,0.*deg,360.*deg);
fOncuraSilverCoreLog = new G4LogicalVolume(fOncuraSilverCore, silverMat, "silverCoreLog");
fOncuraSilverCoreLog = new G4LogicalVolume(fOncuraSilverCore, silver, "silverCoreLog");
fOncuraSilverCorePhys = new G4PVPlacement(nullptr, G4ThreeVector(0,0,0),
"OncuraSilverCorePhys", fOncuraSilverCoreLog,
fOncuraAirGapPhys, false,
@@ -38,9 +38,9 @@
// ****************************************
//
//
#include "BrachyDetectorConstructionTG186.hh"
#include "globals.hh"
#include "G4SystemOfUnits.hh"
#include "BrachyDetectorConstructionTG186.hh"
#include "G4Sphere.hh"
#include "G4RunManager.hh"
#include "G4Box.hh"
@@ -51,12 +51,11 @@
#include "G4Transform3D.hh"
#include "G4RotationMatrix.hh"
#include "G4TransportationManager.hh"
#include "BrachyMaterial.hh"
#include "G4VisAttributes.hh"
#include "G4Colour.hh"
#include "G4NistManager.hh"
BrachyDetectorConstructionTG186::BrachyDetectorConstructionTG186()
:
BrachyDetectorConstructionTG186::BrachyDetectorConstructionTG186():
fTG186capsule(nullptr), fTG186capsuleLog(nullptr),
fTG186capsulePhys(nullptr),
fTG186capsuleTip(nullptr), fTG186capsuleTipLog(nullptr),
@@ -67,22 +66,34 @@ BrachyDetectorConstructionTG186::BrachyDetectorConstructionTG186()
fTG186cablePhys(nullptr),
fTG186simpleCapsuleVisAtt(nullptr), fTG186simpleCapsuleTipVisAtt(nullptr), fTG186simpleIridiumVisAtt(nullptr),
fTG186simpleCableVisAtt(nullptr)
{
fMat = new BrachyMaterial();
}
{}
BrachyDetectorConstructionTG186::~BrachyDetectorConstructionTG186()
{
delete fMat;
}
{}
void BrachyDetectorConstructionTG186::ConstructTG186(G4VPhysicalVolume* mother)
{
G4Colour red (1.0, 0.0, 0.0) ;
G4Colour magenta (1.0, 0.0, 1.0) ;
G4Material* capsuleMat = fMat -> GetMat("Stainless steel");
G4Material* iridiumMat = fMat -> GetMat("Iridium");
G4NistManager* nist = G4NistManager::Instance();
G4Material* iridium = nist -> FindOrBuildMaterial("G4_Ir");
// Stainless steel (Medical Physics, Vol 25, No 10, Oct 1998)
constexpr G4double d = 8.02*g/cm3;
G4int Z; //atomic number of the element
G4Element* elMn = nist -> FindOrBuildElement(Z=12);
G4Element* elSi = nist -> FindOrBuildElement(Z=14);
G4Element* elCr = nist -> FindOrBuildElement(Z=24);
G4Element* elFe = nist -> FindOrBuildElement(Z=26);
G4Element* elNi = nist -> FindOrBuildElement(Z=28);
G4Material* capsuleMat = new G4Material("Stainless steel",d,5);
capsuleMat -> AddElement(elMn, 0.02);
capsuleMat -> AddElement(elSi, 0.01);
capsuleMat -> AddElement(elCr, 0.19);
capsuleMat -> AddElement(elNi, 0.10);
capsuleMat -> AddElement(elFe, 0.68);
// Capsule main body
fTG186capsule = new G4Tubs("TG186-Capsule",0,0.5*mm,2.25*mm,0.*deg,360.*deg);
@@ -107,6 +118,7 @@ void BrachyDetectorConstructionTG186::ConstructTG186(G4VPhysicalVolume* mother)
fTG186capsuleTipLog = new G4LogicalVolume(fTG186capsuleTip,
capsuleMat,
"CapsuleTipIridumLog");
fTG186capsuleTipPhys = new G4PVPlacement(nullptr,
G4ThreeVector(0.,0.,1.85*mm),
"TG186-CapsuleTipIridiumPhys",
@@ -138,7 +150,7 @@ void BrachyDetectorConstructionTG186::ConstructTG186(G4VPhysicalVolume* mother)
fTG186iridiumCore = new G4Tubs("TG186-IrCore",0,0.30*mm,1.75*mm,0.*deg,360.*deg);
fTG186iridiumCoreLog = new G4LogicalVolume(fTG186iridiumCore,
iridiumMat,
iridium,
"TG186-IridiumCoreLog");
fTG186iridiumCorePhys = new G4PVPlacement(nullptr,
@@ -34,7 +34,8 @@
// *******************************
//
//
#include "globals.hh"
#include "BrachyDetectorMessenger.hh"
#include "BrachyDetectorConstructionFlexi.hh"
#include "BrachyFactoryFlexi.hh"
#include "G4ParticleTable.hh"
#include "Randomize.hh"
@@ -43,8 +44,7 @@
#include "G4IonTable.hh"
#include "G4UImanager.hh"
#include "G4RunManager.hh"
#include "BrachyDetectorMessenger.hh"
#include "BrachyDetectorConstructionFlexi.hh"
#include "globals.hh"
BrachyFactoryFlexi:: BrachyFactoryFlexi()
{
@@ -61,7 +61,7 @@ void BrachyFactoryFlexi::CreateSource(G4VPhysicalVolume* mother)
fFlexiSource -> ConstructFlexi(mother);
}
void BrachyFactoryFlexi::CleanSource()
void BrachyFactoryFlexi::CleanSource()
{
fFlexiSource -> CleanFlexi();
fFlexiSource = nullptr;
@@ -33,7 +33,8 @@
// *******************************
//
//
#include "BrachyDetectorMessenger.hh"
#include "BrachyDetectorConstructionLeipzig.hh"
#include "globals.hh"
#include "BrachyFactoryLeipzig.hh"
#include "G4ParticleTable.hh"
@@ -43,8 +44,6 @@
#include "G4IonTable.hh"
#include "G4UImanager.hh"
#include "G4RunManager.hh"
#include "BrachyDetectorMessenger.hh"
#include "BrachyDetectorConstructionLeipzig.hh"
BrachyFactoryLeipzig:: BrachyFactoryLeipzig()
{
@@ -32,8 +32,9 @@
// * *
// ********************************
//
//
//
#include "BrachyDetectorMessenger.hh"
#include "BrachyDetectorConstructionOncura6711.hh"
#include "globals.hh"
#include "BrachyFactoryOncura6711.hh"
#include "G4ParticleTable.hh"
@@ -43,8 +44,6 @@
#include "G4IonTable.hh"
#include "G4UImanager.hh"
#include "G4RunManager.hh"
#include "BrachyDetectorMessenger.hh"
#include "BrachyDetectorConstructionOncura6711.hh"
BrachyFactoryOncura6711:: BrachyFactoryOncura6711()
{
@@ -33,6 +33,8 @@
// *******************************
//
//
#include "BrachyDetectorMessenger.hh"
#include "BrachyDetectorConstructionTG186.hh"
#include "globals.hh"
#include "BrachyFactoryTG186.hh"
#include "G4ParticleTable.hh"
@@ -42,8 +44,6 @@
#include "G4IonTable.hh"
#include "G4UImanager.hh"
#include "G4RunManager.hh"
#include "BrachyDetectorMessenger.hh"
#include "BrachyDetectorConstructionTG186.hh"
BrachyFactoryTG186:: BrachyFactoryTG186()
{
@@ -1,258 +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. *
// ********************************************************************
//
// Code developed by:
// S.Guatelli, A. Le
//
// *******************************
// * *
// * BrachyMaterial.cc *
// * *
// *******************************
//
//
#include "globals.hh"
#include "Randomize.hh"
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
#include "G4MaterialTable.hh"
#include "G4MaterialPropertiesTable.hh"
#include "G4MaterialPropertyVector.hh"
#include "G4RunManager.hh"
#include "G4Element.hh"
#include "G4ElementTable.hh"
#include "BrachyMaterial.hh"
BrachyMaterial::BrachyMaterial(): fW(nullptr),
fPlexiglass(nullptr), fPb(nullptr), fIr192(nullptr),
fTi(nullptr), fAir(nullptr), fH2O(nullptr),
fSoft(nullptr), fSteel(nullptr), fMat304steel(nullptr),
fAu(nullptr), fI(nullptr), fCeramic(nullptr),
fVacuum(nullptr), fBone(nullptr), fMuscle(nullptr), fAg(nullptr)
{;}
BrachyMaterial::~BrachyMaterial()
{;}
void BrachyMaterial::DefineMaterials()
{
// Define required materials
G4double A; // atomic mass
G4double Z; // atomic number
G4double d; // density
// General elements
A = 1.01*g/mole;
G4Element* elH = new G4Element ("Hydrogen","H",Z = 1.,A);
A = 14.01*g/mole;
G4Element* elN = new G4Element("Nitrogen","N",Z = 7.,A);
A = 16.00*g/mole;
G4Element* elO = new G4Element("Oxygen","O",Z = 8.,A);
A=26.98*g/mole;
G4Element* elAl = new G4Element("Aluminum","Al", Z = 13.,A);
A = 12.011*g/mole;
G4Element* elC = new G4Element("Carbon","C",Z = 6.,A);
A = 22.99*g/mole;
G4Element* elNa = new G4Element("Sodium","Na",Z = 11.,A);
A = 24.305*g/mole;
G4Element* elMg = new G4Element("Magnesium","Mg",Z = 12.,A);
A = 30.974*g/mole;
G4Element* elP = new G4Element("Phosphorus","P",Z = 15.,A);
A = 32.06*g/mole;
G4Element* elS = new G4Element("Sulfur","S",Z = 16.,A);
A = 35.453*g/mole;
G4Element* elCl = new G4Element("Chlorine","Cl",Z = 17.,A);
A = 39.098*g/mole;
G4Element* elK = new G4Element("Potassium","K",Z = 19.,A);
A = 40.08*g/mole;
G4Element* elCa = new G4Element("Calcium","Ca",Z = 20.,A);
A = 65.38*g/mole;
G4Element* elZn = new G4Element("Zinc","Zn",Z = 30.,A);
A = 54.94*g/mole;
G4Element* elMn = new G4Element("Manganese","Mn",Z = 25.,A);
A = 28.09*g/mole;
G4Element* elSi = new G4Element("Silicon","Si",Z = 14.,A);
A = 52.00*g/mole;
G4Element* elCr = new G4Element("Chromium","Cr",Z = 24.,A);
A = 58.70*g/mole;
G4Element* elNi = new G4Element("Nickel","Ni",Z = 28.,A);
A = 55.85*g/mole;
G4Element* elFe = new G4Element("Iron","Fe",Z = 26.,A);
A = 183.84* g/mole;
d = 19.3*g/cm3;
fW = new G4Material("Tungsten",Z = 74.,A,d);
// Perspex, plexiglass, lucite
d = 1.19*g/cm3;
fPlexiglass = new G4Material("Plexiglass",d,3);
fPlexiglass -> AddElement(elH,0.08);
fPlexiglass -> AddElement(elC,0.60);
fPlexiglass -> AddElement(elO,0.32);
// Lead material
A = 207.19*g/mole;
Z = 82;
d = 11.35*g/cm3;
fPb = new G4Material("Lead",Z,A,d);
// Iridium (Medical Physics, Vol 25, No 10, Oct 1998)
d = 22.42*g/cm3;
A = 191.96260*g/mole ;
Z = 77;
fIr192 = new G4Material("Iridium",Z,A,d);
//titanium
A = 47.88*g/mole;
d = 4.50*g/cm3;
fTi = new G4Material("titanium" ,Z = 22.,A,d);
//silver
A = 107.87*g/mole;
d = 10.49*g/cm3;
Z = 22.0;
fAg = new G4Material("Silver", Z, A, d);
// Air material
d = 1.290*mg/cm3;
fAir = new G4Material("Air",d,2);
fAir -> AddElement(elN,0.7);
fAir -> AddElement(elO,0.3);
// Water
d = 1.000*g/cm3;
fH2O = new G4Material("Water",d,2);
fH2O -> AddElement(elH,2);
fH2O -> AddElement(elO,1);
fH2O -> GetIonisation()->SetMeanExcitationEnergy(75.0*eV);
//soft tissue(http://www.nist.gov)
d = 1.0*g/cm3;
fSoft = new G4Material("tissue",d,13);
fSoft -> AddElement(elH,0.104472);
fSoft -> AddElement(elC,0.23219);
fSoft -> AddElement(elN,0.02488);
fSoft -> AddElement(elO,0.630238);
fSoft -> AddElement(elNa,0.00113);
fSoft -> AddElement(elMg,0.00013);
fSoft -> AddElement(elP,0.00133);
fSoft -> AddElement(elS,0.00199);
fSoft -> AddElement(elCl,0.00134);
fSoft -> AddElement(elK,0.00199);
fSoft -> AddElement(elCa,0.00023);
fSoft -> AddElement(elFe,0.00005);
fSoft -> AddElement(elZn,0.00003);
// Stainless steel (Medical Physics, Vol 25, No 10, Oct 1998)
d = 8.02*g/cm3 ;
fSteel = new G4Material("Stainless steel",d,5);
fSteel -> AddElement(elMn, 0.02);
fSteel -> AddElement(elSi, 0.01);
fSteel -> AddElement(elCr, 0.19);
fSteel -> AddElement(elNi, 0.10);
fSteel -> AddElement(elFe, 0.68);
//Define Stainless-steel-304 - Flexi source
d = 7.999*g/cm3;
fMat304steel = new G4Material("Stainless steel 304",d,6);
fMat304steel -> AddElement(elMn, 0.02);
fMat304steel -> AddElement(elSi, 0.01);
fMat304steel -> AddElement(elCr, 0.19);
fMat304steel -> AddElement(elNi, 0.10);
fMat304steel -> AddElement(elFe, 0.6792);
fMat304steel -> AddElement(elC, 0.0008);
//gold
A = 196.97*g/mole;
d = 19.32*g/cm3;
fAu = new G4Material("gold",Z = 79.,A,d);
//Iodine Core
A = 124.9*g/mole;
d = 4.862*g/cm3;
fI = new G4Material("Iodine",Z = 53.,A,d);
//ceramic(Medical Physics, May 2000)
d = 2.88*g/cm3;
fCeramic = new G4Material("allumina",d,2);
fCeramic -> AddElement(elAl,2);
fCeramic -> AddElement(elO,3);
G4double density = universe_mean_density;
G4double pressure = 3.e-18*pascal;
G4double temperature = 2.73*kelvin;
A=1.01*g/mole;
fVacuum = new G4Material("Galactic", Z = 1., A,density,kStateGas,temperature,pressure);
//compact bone (http://www.NIST.gov)
d = 1.85*g/cm3;
fBone = new G4Material("bone",d,8);
fBone -> AddElement(elH,0.063984);
fBone -> AddElement(elC,0.278);
fBone -> AddElement(elN,0.027);
fBone -> AddElement(elO,0.410016);
fBone -> AddElement(elMg,0.002);
fBone -> AddElement(elP,0.07);
fBone -> AddElement(elS,0.002);
fBone -> AddElement(elCa,0.147);
//muscle(http://www.NIST.gov)
fMuscle = new G4Material("muscle",d,9);
fMuscle -> AddElement(elH,0.101997);
fMuscle -> AddElement(elC,0.123);
fMuscle -> AddElement(elN,0.035);
fMuscle -> AddElement(elNa,0.0008);
fMuscle -> AddElement(elO,0.729);
fMuscle -> AddElement(elMg,0.0002);
fMuscle -> AddElement(elP,0.002);
fMuscle -> AddElement(elS,0.005);
fMuscle -> AddElement(elK,0.003);
}
G4Material* BrachyMaterial::GetMat(G4String material)
{
// Returns a material
G4Material* pttoMaterial = G4Material::GetMaterial(material);
return pttoMaterial;
}
@@ -33,6 +33,8 @@ Author: Susanna Guatelli
// * *
// **********************************
//
#include "BrachyPhysicsList.hh"
#include "BrachyPhysicsListMessenger.hh"
#include "G4EmStandardPhysics_option4.hh"
#include "G4EmLivermorePhysics.hh"
#include "G4EmStandardPhysics.hh"
@@ -43,7 +45,6 @@ Author: Susanna Guatelli
#include "G4DecayPhysics.hh"
#include "G4RadioactiveDecayPhysics.hh"
#include "G4EmPenelopePhysics.hh"
#include "BrachyPhysicsList.hh"
#include "G4VPhysicsConstructor.hh"
#include "G4ParticleDefinition.hh"
#include "G4ProductionCutsTable.hh"
@@ -54,14 +55,17 @@ Author: Susanna Guatelli
#include "G4ParticleDefinition.hh"
#include "globals.hh"
#include "G4SystemOfUnits.hh"
#include "BrachyPhysicsListMessenger.hh"
#include "G4UAtomicDeexcitation.hh"
#include "G4LossTableManager.hh"
BrachyPhysicsList::BrachyPhysicsList(): G4VModularPhysicsList()
{
SetVerboseLevel(1);
G4ProductionCutsTable::GetProductionCutsTable()->SetEnergyRange(250*eV, 1*GeV);
SetDefaultCutValue(0.05 *mm);
DumpCutValuesTable();
// EM physics: default
fEmPhysicsList = new G4EmLivermorePhysics();
fEmName="emlivermore";
@@ -159,30 +163,3 @@ void BrachyPhysicsList::AddPhysicsList(const G4String& name)
<< G4endl;
}
void BrachyPhysicsList::SetCuts()
{
// Definition of threshold of production
// of secondary particles
// This is defined in range.
defaultCutValue = 0.05 * mm;
SetCutValue(defaultCutValue, "gamma");
SetCutValue(defaultCutValue, "e-");
SetCutValue(defaultCutValue, "e+");
// By default the low energy limit to produce
// secondary particles is 990 eV.
// This value is correct when using the EM Standard Physics.
// When using the Low Energy Livermore this value can be
// changed to 250 eV corresponding to the limit
// of validity of the physics models.
// Comment out following three lines if the
// Standard electromagnetic Package is adopted.
G4double lowLimit = 250. * eV;
G4double highLimit = 100. * GeV;
G4ProductionCutsTable::GetProductionCutsTable()->SetEnergyRange(lowLimit,
highLimit);
// Print the cuts
if (verboseLevel>0) DumpCutValuesTable();
}
@@ -30,16 +30,15 @@
BrachyPhysicsListMessenger::BrachyPhysicsListMessenger(BrachyPhysicsList* pPhys)
:G4UImessenger(),
fPhysicsList(pPhys),fPhysDir(0),fListCmd(0)
fPhysicsList(pPhys),fPhysDir(nullptr),fListCmd(nullptr)
{
fPhysDir = new G4UIdirectory("/testem/phys/");
fPhysDir->SetGuidance("physics list commands");
fPhysDir -> SetGuidance("physics list commands");
fListCmd = new G4UIcmdWithAString("/testem/phys/addPhysics",this);
fListCmd->SetGuidance("Add modula physics list.");
fListCmd->SetParameterName("PList",false);
fListCmd->AvailableForStates(G4State_PreInit);
fListCmd -> SetGuidance("Add modula physics list.");
fListCmd -> SetParameterName("PList",false);
fListCmd -> AvailableForStates(G4State_PreInit);
}
BrachyPhysicsListMessenger::~BrachyPhysicsListMessenger()
@@ -42,18 +42,18 @@
#include "globals.hh"
#include "BrachyPrimaryGeneratorAction.hh"
#include "BrachyAnalysisManager.hh"
#include "Randomize.hh"
#include "G4Event.hh"
#include "G4GeneralParticleSource.hh"
#include "G4RunManager.hh"
#include "G4SystemOfUnits.hh"
#include "BrachyAnalysisManager.hh"
BrachyPrimaryGeneratorAction::BrachyPrimaryGeneratorAction()
{
// Use the GPS to generate primary particles,
// Particle type, energy position, direction are specified in
//macro files
// macro files
fGun = new G4GeneralParticleSource();
}
@@ -71,9 +71,9 @@ void BrachyPrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent)
auto analysisManager = G4AnalysisManager::Instance();
G4double energy = fGun -> GetParticleEnergy();
// Fill histogram with the energy spectrum of
// the photons emitted the radionuclide
// when modelling the photons directly (not via radioactive decay)
analysisManager->FillH1(0, energy/keV);
// the photons emitted by the radionuclide
// when modelling the photons as primary particles (not via radioactive decay)
analysisManager -> FillH1(0, energy/keV);
}
}
@@ -41,11 +41,11 @@
//
#include "BrachyRunAction.hh"
#include "BrachyAnalysisManager.hh"
#include "G4Run.hh"
#include "G4RunManager.hh"
#include "G4UImanager.hh"
#include "G4ios.hh"
#include "BrachyAnalysisManager.hh"
#include "G4SystemOfUnits.hh"
#include "globals.hh"
@@ -73,7 +73,7 @@ analysisManager -> SetVerboseLevel(1);
// Create histogram with the energy spectrum of the photons emitted by the
// radionucldie
analysisManager-> CreateH1("h10","energy spectrum", 800, 0., 800.);
analysisManager -> CreateH1("h10","energy spectrum", 800, 0., 800.);
}
void BrachyRunAction::EndOfRunAction(const G4Run* aRun)
@@ -23,12 +23,10 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
//
//
//
// Author: Susanna Guatelli (guatelli@ge.infn.it)
//
#include "BrachyAnalysisManager.hh"
#include "BrachySteppingAction.hh"
#include "G4ios.hh"
#include "G4SteppingManager.hh"
#include "G4Step.hh"
@@ -39,8 +37,6 @@
#include "G4TrackStatus.hh"
#include "G4ParticleDefinition.hh"
#include "G4Gamma.hh"
#include "BrachyAnalysisManager.hh"
#include "BrachySteppingAction.hh"
#include "G4SystemOfUnits.hh"
BrachySteppingAction::BrachySteppingAction()
@@ -81,7 +77,7 @@ void BrachySteppingAction::UserSteppingAction(const G4Step* aStep)
G4AnalysisManager* analysisManager = G4AnalysisManager::Instance();
// Fill histogram with energy spectrum of the photons emitted in the
// radioactive decay
analysisManager->FillH1(0, energy/keV);
analysisManager -> FillH1(0, energy/keV);
}
}
}
@@ -30,15 +30,16 @@
//
Original code from geant4/examples/extended/runAndEvent/RE03, by M. Asai
*/
#include <map>
#include <fstream>
#include "BrachyUserScoreWriter.hh"
#include "G4SystemOfUnits.hh"
#include "BrachyAnalysisManager.hh"
#include "G4MultiFunctionalDetector.hh"
#include "G4SDParticleFilter.hh"
#include "G4VPrimitiveScorer.hh"
#include "G4VScoringMesh.hh"
#include "G4SystemOfUnits.hh"
#include <map>
#include <fstream>
// The default output is
// voxelX, voxelY, voxelZ, edep
// The BrachyUserScoreWriter allows to change the format of the output file.
@@ -1,9 +1,6 @@
#----------------------------------------------------------------------------
# Setup the project
cmake_minimum_required(VERSION 3.8...3.18)
if(${CMAKE_VERSION} VERSION_LESS 3.12)
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
endif()
cmake_minimum_required(VERSION 3.12...3.20)
project(CompositeCalorimeter)
#----------------------------------------------------------------------------
@@ -34,7 +34,7 @@
#include "G4PhysListFactory.hh"
#include "G4RunManager.hh"
#include "G4RunManagerFactory.hh"
#include "G4UImanager.hh"
#include "G4VisExecutive.hh"
@@ -45,7 +45,7 @@ int main(int argc,char** argv) {
G4VisManager *visManager = nullptr;
G4RunManager * runManager = new G4RunManager;
auto* runManager = G4RunManagerFactory::CreateRunManager(G4RunManagerType::Default);
runManager->SetUserInitialization(new CCalDetectorConstruction);
G4PhysListFactory factory;
@@ -103,13 +103,7 @@ int main(int argc,char** argv) {
UImanager->ApplyCommand(command+fileName);
}
//Close-out analysis:
// Save histograms
G4AnalysisManager* man = G4AnalysisManager::Instance();
man->Write();
man->CloseFile();
// Complete clean-up
delete G4AnalysisManager::Instance();
delete runManager;
delete visManager;
return 0;
@@ -8,6 +8,35 @@
Example History file
---------------------
24.05.2021 - B. Morgan (ccal-V10-07-02)
- Bump required CMake version range to 3.12...3.20, matching core Geant4
07.05.2021 - A.Ribon (ccal-V10-07-01)
- CCalEcal, CCalHcal, CCalHall, CCalEcalOrganization, CCalHcalOrganization :
fixed compilation warning (overriden virtual member function not marked
as 'override').
04.05.2021 - A.Ribon (ccal-V10-07-00)
- Migrated to multi-threaded, using G4RunManagerFactory.
These are the main changes:
1. Introduced the action initializer.
2. Split the definition of the sensitive part of the detector
from the detector construction itself.
(A new method, sensitiveHandling(), has been introduced in
the base class CCalG4Able.)
3. Made the following three classes thread-local singletons
(instead of global singletons): CCalSDList, CCalSensAssign
and CCalSensitiveDetectors.
(The class CCalSensitiveConfiguration can still remain as a
global singleton.)
4. Multi-threaded use of the G4AnalysisManager in the run action
(with the merging of histograms and ntuple of of all working
threads at the end of the run).
The most tricky part of this migration was the treatment of the
sensitive detectors (i.e. the steps 2. and 3. above), because
it was originally done together with the building of the geometry
and via thread-unsafe singletons.
02.11.2020 - B.Morgan (ccal-V10-06-00)
- Support same CMake version range as core Geant4
+10 -38
View File
@@ -72,7 +72,7 @@
> ./CompositeCalorimeter test.g4mac
which simulate 10 events, each being a 100 GeV pi- incident on the
which simulate a few events, each being a 100 GeV pi- incident on the
electromagnetic crystal calorimeter followed by the hadronic calorimeter,
without magnetic field.
The output is the ROOT file "ccal.root" .
@@ -140,10 +140,6 @@
line must be set as follows (the magnetic field unity is kilo Gauss).
30.0 9 652.0
The default stepper in magnetic field is G4ClassicalRK4, but other
possibilities can be selected by editing the file
src/CCalDetectorConstruction.cc (look at the string "***STEPPER***").
In order to deactivate either the ECAL or the HCAL, it is enough
to comment out the corresponding line in the file g4testbeamhcal96.conf,
using "#" as the comment character. For instance, to have only the HCAL
@@ -233,26 +229,11 @@
4. Physics processes
--------------------
By the default, one of the ufficial High Energy Physics List for
Calorimetry, QGSP_BIC_EMY, is used in this example, so that it
allows to test the low-energy electromagnetic.
However, it is very easy to use instead either LHEP, QGSP, or QGSC.
To do so, it is enough to comment/uncomment a line in the main
CompositeCalorimeter.cc : for example, if you want to use LHEP
instead of the default QGSP_BIC_EMY you have to change it as follows:
//***LOOKHERE*** CHOOSE THE PHYSICS LIST.
runManager->SetUserInitialization(new LHEP); // LHEP
// runManager->SetUserInitialization(new QGSP); // QGSP
// runManager->SetUserInitialization(new QGSC); // QGSC
// runManager->SetUserInitialization(new QGSP_BIC_EMY); // QGSP_BIC_EMY
//***endLOOKHERE***
Notice that, for most of the cases (and certainly also in this case
in which we don't even take into account the beam profile, noise
and digitization!) the faster LHEP Physics List would be good enough
for calorimetry studies.
The factory physics list is used, therefore the choice of the physics list
is steered by the environmental variable PHYSLIST.
(Note: if this environmental variable is not set, the default physics list
which is used is FTFP_BERT).
5. Particle Generator
---------------------
@@ -435,18 +416,6 @@ No Noise and Digitization
and then run some events, for example:
Idle> /run/beamOn 3
Notice that, by default, OGL is used for the visualization,
because it is quite fast and it does not produce any files in
output. However, you can always choose something else, for example
VRML2FILE or DAWNFILE, either interactively as follows:
Idle> /vis/open DAWNFILE
or by changing the default, by editing the file (main program)
CompositeCalorimeter.cc and comment/uncomment the lines
in such a way to have, at the end:
visCommand = "/vis/open DAWNFILE";
// visCommand = "/vis/open VRML2FILE";
// visCommand = "/vis/open OGL";
The tracks that are shown include both charged and neutral particles
of any momentum: if you want instead only charged, or only neutral,
then you have simply to edit src/CCalEndOfEventAction.cc
@@ -530,8 +499,11 @@ No Noise and Digitization
CCalG4Hit derives from G4VHit and CCalHit;
CCaloSD derives from G4VSensitiveDetector.
CCalActionInitializer
User-action initialization.
CCalAnalysis
Analysis manager class which uses Anaphe.
Analysis manager class.
CCalRunAction
User run action class.
File diff suppressed because it is too large Load Diff
@@ -24,29 +24,20 @@
// ********************************************************************
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#ifndef CCalActionInitializer_h
#define CCalActionInitializer_h 1
#include "G4VUserActionInitialization.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class CCalActionInitializer : public G4VUserActionInitialization
{
class CCalActionInitializer : public G4VUserActionInitialization {
public:
CCalActionInitializer();
~CCalActionInitializer(){;};
~CCalActionInitializer() {;};
void Build() const;
void BuildForMaster() const;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
@@ -34,13 +34,19 @@
#include "G4VUserDetectorConstruction.hh"
#include "globals.hh"
class CCalG4Hall;
class CCalDetectorConstruction : public G4VUserDetectorConstruction {
public:
CCalDetectorConstruction();
~CCalDetectorConstruction();
virtual ~CCalDetectorConstruction();
public:
G4VPhysicalVolume* Construct();
virtual G4VPhysicalVolume* Construct();
virtual void ConstructSDandField();
private:
CCalG4Hall* testBeamHCal96;
};
#endif
@@ -73,8 +73,8 @@ public:
protected:
virtual G4int readFile();
virtual void constructDaughters();
virtual G4int readFile() override;
virtual void constructDaughters() override;
private:
G4String genMat; //General material
@@ -39,7 +39,7 @@ public:
CCalEcalOrganization(){};
~CCalEcalOrganization();
virtual unsigned int GetUnitID(const G4Step* aStep) const ;
virtual unsigned int GetUnitID(const G4Step* aStep) const override;
};
@@ -69,8 +69,8 @@ public:
//Set the type of a logical volume to select its vis parameters.
void setVisType(CCalVisualisable::visType, G4LogicalVolume*);
//Sensitivity related
void sensitiveHandling();
void setSensitivity(G4bool sens=true) {sensitivity=sens;}
G4bool isSensitive() const {return sensitivity;}
@@ -78,7 +78,6 @@ public:
G4String G4Name() const {return g4ableName;}
void setName(const G4String& name) {g4ableName = name;}
//Comparison operator needed for CCalG4AbleTable. Compares phys. volumes
G4bool operator==(const CCalG4Able& right) const;
@@ -91,7 +90,7 @@ protected:
//Constructs the sensitive detectors and associates them to the corresponding
//logical volumes
virtual void constructSensitive() {}
virtual void constructSensitive() = 0;
protected:
//////////////////////////////////////////////////////////////////////////
@@ -45,18 +45,18 @@ public:
CCalG4Ecal(const G4String &name);
virtual ~CCalG4Ecal();
void setType(CMType ty) {type = ty;}
void setType(CMType ty) {type = ty;}
//Prefix to all names in the Detector
static G4String idName;
protected:
//This methods actually constructs the volume.
virtual G4VPhysicalVolume* constructIn(G4VPhysicalVolume*);
virtual G4VPhysicalVolume* constructIn(G4VPhysicalVolume*) override;
//Constructs the sensitive detectors and associates them to the corresponding
//logical volumes
virtual void constructSensitive() ;
virtual void constructSensitive() override;
private:
//Methods to construct the different parts of the detector
@@ -41,8 +41,9 @@ public:
protected:
//This methods actually constructs the volume.
virtual G4VPhysicalVolume* constructIn(G4VPhysicalVolume*);
virtual void constructDaughters();
virtual G4VPhysicalVolume* constructIn(G4VPhysicalVolume*) override;
virtual void constructDaughters() override;
virtual void constructSensitive() override;
};
#endif
@@ -45,21 +45,21 @@ public:
protected:
//This methods actually constructs the volume.
virtual G4VPhysicalVolume* constructIn(G4VPhysicalVolume*);
virtual void constructDaughters();
virtual G4VPhysicalVolume* constructIn(G4VPhysicalVolume*) override;
virtual void constructDaughters() override;
//Construct layer of scintillator or absorber
G4LogicalVolume* constructScintillatorLayer (G4int);
G4LogicalVolume* constructAbsorberLayer (G4int);
G4LogicalVolume* constructScintillatorLayer(G4int);
G4LogicalVolume* constructAbsorberLayer(G4int);
//Constructs the sensitive detectors and associates them to the corresponding
//logical volumes
virtual void constructSensitive() ;
virtual void constructSensitive() override;
private:
//Private data members
ptrG4Log* sclLog;
ptrG4Log* absLog;
ptrG4Log* sclLog;
ptrG4Log* absLog;
// Logical volumes for sensitive detectors
std::vector<ptrG4Log> allSensitiveLogs;
@@ -45,8 +45,8 @@ public:
G4double getDx_2Hall() const {return dx_2Hall;}
protected:
virtual G4int readFile();
virtual void constructDaughters();
virtual G4int readFile() override;
virtual void constructDaughters() override;
private:
G4String genMaterial; //General material
@@ -74,8 +74,8 @@ public:
G4double getDx_2Scnt(unsigned int i) const {return dx_2Scintillator[i];}
protected:
virtual G4int readFile();
virtual void constructDaughters();
virtual G4int readFile() override;
virtual void constructDaughters() override;
private:
G4String genMaterial; //General material
@@ -39,7 +39,7 @@ public:
CCalHcalOrganization(){}
~CCalHcalOrganization();
virtual unsigned int GetUnitID(const G4Step* aStep) const ;
virtual unsigned int GetUnitID(const G4Step* aStep) const override;
};
@@ -38,8 +38,8 @@ class G4Run;
class CCalRunAction: public G4UserRunAction
{
public:
CCalRunAction(){};
virtual ~CCalRunAction(){};
CCalRunAction();
virtual ~CCalRunAction();
virtual void BeginOfRunAction(const G4Run* aRun);
virtual void EndOfRunAction(const G4Run* aRun);
@@ -34,11 +34,13 @@
#include <vector>
#include "globals.hh"
#include "G4ThreadLocalSingleton.hh"
typedef G4String nameType;
class CCalSDList
{
friend class G4ThreadLocalSingleton< CCalSDList >;
private:
CCalSDList();
~CCalSDList();
@@ -58,7 +60,7 @@ public:
G4int getNumberOfTrackerSD();
private:
static CCalSDList* theList;
static G4ThreadLocal CCalSDList* theList;
std::vector<nameType> caloSD;
std::vector<nameType> trackerSD;
@@ -36,20 +36,21 @@
#include <map>
#include "globals.hh"
#include "G4VSensitiveDetector.hh"
#include "G4ThreadLocalSingleton.hh"
class CCalSensAssign
{
friend class G4ThreadLocalSingleton< CCalSensAssign >;
public:
~CCalSensAssign(){}
static CCalSensAssign* getInstance();
G4bool assign();
G4bool stackingAction();
G4bool addCaloSD(G4String name, CCalVOrganization* numberingScheme);
private:
CCalSensAssign();
static CCalSensAssign* theInstance;
static G4ThreadLocal CCalSensAssign* theInstance;
std::map<G4String,G4VSensitiveDetector*> sens_;
};

Some files were not shown because too many files have changed in this diff Show More