Import Geant4 11.4.0.beta source tree

This commit is contained in:
Gabriele Cosmo
2025-06-26 09:17:29 +02:00
parent 20a218bbe1
commit a499fb82e9
1941 changed files with 203285 additions and 95593 deletions
-1
View File
@@ -21,7 +21,6 @@ readability-duplicate-include, \
readability-string-compare"
WarningsAsErrors: ''
HeaderFilterRegex: ''
AnalyzeTemporaryDtors: false
FormatStyle: file
CheckOptions:
- key: modernize-use-auto.RemoveStars
+2 -2
View File
@@ -30,8 +30,8 @@ project(Geant4
DESCRIPTION "C++ toolkit for simulating the passage of particles through matter"
HOMEPAGE_URL "https://geant4.cern.ch")
set(${PROJECT_NAME}_VERSION_MAJOR 11)
set(${PROJECT_NAME}_VERSION_MINOR 3)
set(${PROJECT_NAME}_VERSION_PATCH 2)
set(${PROJECT_NAME}_VERSION_MINOR 4)
set(${PROJECT_NAME}_VERSION_PATCH 0)
set(${PROJECT_NAME}_VERSION "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}.${${PROJECT_NAME}_VERSION_PATCH}")
# - Prepend our own CMake Modules to the search path
+802
View File
@@ -0,0 +1,802 @@
Geant4 11.4-beta-01 Release Notes
---------------------------------
26 June 2025
Migration Notes & Main New Features
-----------------------------------
o New "@@" keyword to be used in UI commands taking a macro file name;
it allows to create a temporary macro file with the commands being
defined following it, until a "/control/endRecord" command is specified.
o New utility class G4VSIntegration, for integration of probability density
function and dynamically sampling of final state.
o Enabled voxelisation parallelism by default in G4GeometryManager, when
MT/tasks are enabled. Enabled also for potential 2nd (and later) calls.
o Code optimization in GetPointOnSurface() in specific shapes.
Optimised surface area and cubic volume calculation of several geometrical
primitives.
o Updated implementation of QSS integration method to QSS version-2.
o Extended UI command "/geometry/test/run" to support optional overlap check
mode to check for overlaps in the volume tree without duplication in
identical logical volumes.
o New base class G4VXRayModel for models of X-ray processes.
o New G4LowPAIH2O model for dE/dx in water for p and e-.
o In G4Scintillation and G4Cerenkov, build the integral tables only for
materials that have non-empty material property tables.
o Implemented new option to enable/disable fluctuation of energy loss per
G4Region.
o Introduced usage of the new ion ionisation model in DNA Opt8 physics
configuration.
o New class G4DNABornIonisationModel, a new implementation of the Born model
using a new class G4DNASamplingTable, which allows the sharing of sampling
data between threads.
o New class G4ChemReboundTransportation to handle the rebound transportation
of the molecule.
o New classes with alternative pre-compound model.
o In G4HadronicProcess, removed warning for the case when K0 and anti-K0
are transformed into K0S or K0L.
o Updated algorithms of integration of probabilities and sampling of kinetic
energy for emitted fragment in hadronic de-excitation and pre-equilibrium.
Expected more accurate spectra.
o New alternative hadronic de-excitation FermiBreakUp model, G4FermiBreakUpAN,
and support classes.
o Major update of GIDIplus interface in LEND hadronic model, with refactored
C++ code, including use of official GNDS formatted data. Added feature for
high-fidelity gamma cascades following reactions such as neutron capture
and inelastic scattering.
o Added G4HadronPhysicsLEND in physics-lists to configure neutron and photon
induced processes from LEND.
o First version of generic time windowing of trajectory slices in
visualisation. Introduced Time Window tab in Qt UI.
o Introducing RayTracerQt visualisation driver, enabled when GEANT4_USE_QT
configuration is enabled.
o Set default configuration to use Qt6 when selecting Qt support.
User must set GEANT4_USE_QT_QT5 to force find/use of Qt5.
o Make the TSG driver the "flagship" visualization driver.
o Re-instated transparency slider in visualization GUI.
o In G4OpenGLQtViewer, fixed the original pick feature, which was
inadvertently broken, to show pick info window.
o Introduced the CaloDiT pre-trained ML model for fast simulation
in Par04 example, offering greater accuracy.
o Build option with VecGeom requires VecGeom v1.2.11 or v2.0.0-rc.5.
o Requiring CLHEP-2.4.7.1 for external CLHEP installation.
o New versions of datasets: G4EMLOW-8.7.
----------------------------------------------------------------------------
Technical Notes
---------------
o Tested platforms:
+ Linux, gcc-15.2.0.
Tested on 64 bit architectures (Intel or AMD) with Alma Linux 9
(based on RedHat Linux Enterprise 9). Versions of Geant4 have also
been compiled successfully on other Linux distributions, Ubuntu,
Debian, Suse or other RedHat systems.
+ MacOS 15.5, Apple LLVM/clang-17 (Intel or Apple Silicon), 64 bits.
+ Windows/11 with Visual C++ 14.4 (Visual Studio 2022), 64 bits.
o More verified configurations:
+ Linux, with gcc-11.5/12.1/13.2/14.2, clang-19/20.
+ Linux, with Intel-icx 2024.2.
+ MacOS 13.7/14.7, with Apple LLVM/clang-15/16.
+ Windows/10 with Visual C++ 14.36 (Visual Studio 2022)
o External dependencies
+ CLHEP-2.4.7.1, required for external installation of the CLHEP library.
+ VecGeom v1.2.11 or v2.0.0-rc.5, for optional use of VecGeom primitives.
+ PTL-3.0.1, for external installation of the PTL tasking library.
o New datasets:
+ G4EMLOW-8.7.
Please refer to the Geant4 User Documentation:
https://cern.ch/geant4/support/user_documentation
for further information about using Geant4.
----------------------------------------------------------------------------
List of features and fixes included in this Beta release since 11.3.p02:
o Configuration:
-------------
+ CMake:
o Set default configuration to use Qt6 when selecting Qt support.
User must set GEANT4_USE_QT_QT5 to force find/use of Qt5.
o Include external categories (G4zlib etc) in link resolution for unit
test executables.
o Export CMAKE_EXPORT_COMPILE_COMMANDS setting from toolkit to the build
of any test done by geant4_add_test to assist use of clang-tidy and
other tooling.
o Add ENVIRONMENT to any build step of geant4_add_test for consistency
and to allow easier propagation of additional build settings.
o Updated to datasets: G4EMLOW-8.7.
+ GNUmake:
o Updated system scripts for Qt settings: set Qt6 as default.
o Correction in generation of geant.[c]sh and geant4.bat on Windows.
o Analysis:
--------
+ New implementation of generic 'G4Analysis::GetHnType()' and 'IsProfile()'
functions, which do not rely on the histogram/profile name position in
the long type name provided via tools 's_class()'.
+ Modernized g4tools macro-based for loops with range-based for.
o Externals:
---------
+ g4tools:
o Updated to version 6.5.1.
o Implemented windows_size and render_area_size methods; fixed setting of
mouse position in the wheel_rotation_event. Handle the shift and control
modifiers in the mouse_[down,up,move]_event and wheel_rotation_event.
o In glarea, in mouseMoveEvent() for Qt5, corrected a bad cut/paste when
creating the mouse_move_event.
o In *ntuple, fix in the initialise() method, to switch from "warning" to
"error" and return false if the name of a booking column is not found
in the file. Addressing problem report #2657.
+ zlib:
o Updated zlib to version 1.3.1. Prior Geant4 patches are retained.
o Geometry:
--------
+ magneticfield:
o Updated implementation of QSS integration method to QSS version-2.
+ management:
o Enabled voxelisation parallelism by default in G4GeometryManager, when
MT/tasks are enabled. Enabled also for potential 2nd (and later) calls
in runs after geometry was changed.
o G4VSolid: set seed in EvaluateCubicVolume() and EvaluateSurfaceArea()
to ensure reproducibility of the resulting value.
o G4GeomTools: added functions HyperboloidSurfaceArea(), HypeStereo()
and TwistedTubeBoundingTrap().
o Applied clang-tidy fixes fixes (readability, modernization,
performance, ...) based on llvm version 19.1.17.
+ navigation:
o Extended UI command "/geometry/test/run" to support optional overlap
check mode: depending on the selected mode, it invokes either
'TestRecursiveOverlap' (default and original algorithm) or
'TestOverlapInTree', allowing to check for overlaps in the volume tree
without duplication in identical logical volumes.
o Reorganised and enriched comments in headers to follow Doxygen style.
o Removed declared but not implemented methods in G4VoxelNavigation,
G4ParameterisedNavigation, G4VoxelSafety and G4PathFinder.
+ solids/Boolean:
o G4MultiUnion: fix in GetSurfaceArea() and some optimisation to use
G4QuickRand(). In GetLocalPoint(), GetLocalVector(), GetGlobalPoint()
and GetGlobalVector(), make direct usage of the transformation matrix
elements.
+ solids/CSG:
o G4Box: code restructuring in DistanceToOut() methods.
o G4Orb: provide faster algorithm in GetPointOnSurface().
o G4Para: speedup calculation of surface area in GetSurfaceArea() and
GetPointOnSurface().
o G4Box, G4Para, G4Trd: code optimization in GetPointOnSurface().
o G4Torus: implemented uniform sampling of random points on surface.
+ solids/specific:
o G4Ellipsoid, G4EllipticalTube: code optimization in GetPointOnSurface().
o G4TessellatedSolid, G4TriangularFacet, G4QuadrangularFacet: use
G4QuickRand() for generating points on surface.
o G4EllipticalCone: code optimization in GetPointOnSurface(); moved
setters implementations to source.
o G4Paraboloid: implemented uniform sampling of random points on surface.
o G4Hype: revised surface area calculation and random point sampling.
Code optimization in GetPointOnSurface().
o Use G4QuickRand() in G4PolyPhiFace, G4PolyconeSide, G4PolyhedraSide,
G4TwistedTubs, G4VCSGfaceted and G4VTwistedFaceted for sampling points
on surface.
o G4EllipticalCone, G4EllipticalTube, G4Voxelizer: removed unnecessary
headers.
+ volumes:
o Fix to only delete the logical skin/border surfaces if the geometry
is not closed.
o Reorganised and enriched comments in headers to follow Doxygen style.
o Applied clang-tidy fixes for readability, based on llvm version 19.1.7.
o Global:
------
+ Factored common ieee754 union and helper functions out of G4Log and
G4Exp to remove code duplication.
+ G4VSIntegration: added new utility class for integration of probability
density function and dynamically sampling of final state. This is useful
for the case when sampling tables cannot be prepared and stored, instead
computations are performed for each case again and again.
+ G4QuickRand: Added a possibility to set a seed.
+ Changed date for release 11.4-beta.
o Graphics Representations:
------------------------
+ Re-instated transparency slider in GUI.
+ G4VGraphicsScene: added 'fMaxGeometryDepth' data member and
corresponding access functions.
o Intercoms:
---------
+ In G4UImanager and G4UIcontrolMessenger, introducing "@@" keyword that
can be placed in any UI command taking a macro file name. It creates a
temporary macro file with defined commands until the "/control/endRecord"
command is specified. The "@@" mechanism works recursively.
If a file name is enclosed in a pair of "@", that macro file is created.
The mechanism works for both interactive mode and batch mode. When used
in interactive mode with Qt GUI, one can use up-arrow, tab-key and
clickable menu in left-side bar to complete a command.
o Interfaces:
----------
+ G4UIQt: re-instated transparency slider.
Introduced Time Window tab. This exploits generic time windowing
recently introduced in visualisation. Currently, it doesn't work with
OGL in Qt6. The TSG visualisation driver works fine with both Qt5 and
Qt6, except line width is not implemented.
Simplified and improved touchable dump, using QScrollArea instead of
QMessage. Improved pick info window size.
+ General code tidy.
o Persistency:
-----------
+ gdml:
o Fix to pre-pend '0x' string before the address when writing entities
on Windows platform. Addressing problem report #2322.
o Physics Lists:
-------------
+ Builders:
o In G4HadronPHPBuilder, G4ParticleHPCapture and G4ParticleHPCaptureData
are replaced by G4NeutronRadCaptureHP and G4NeutronHPCaptureData,
respectively.
The first allows the use of the full list of updated PhotonEvaporation
data set, while for the second it is only a change of the name, the
data are the same. Addressing problem report #2660.
+ Constructors:
o electromagnetic:
- G4GeneralGammaProcess: updated destructor according to modification
in electromagnetic/utils.
- G4EmDNABuilder: use G4DNABornIonisationModel1 for proton ionisation.
For Opt8 configuration, use the same configuration of models for e-
and protons as in Opt2.
- In all DNA constructors the upper limit for DNA models for ions is
set to 300 MeV instead of 400 MeV; for increase/decrease processes
it is set to 100 MeV; for ionisation of hydrogen it is set to 100 MeV.
- G4EmDNAPhysics_option6: disabled "fast" flag in order to have
comparisons with Opt4 in the same set of general DNA parameters.
- G4EmDNAPhysics_stationary_X constructors: added deprecation warning,
indicating that these constructors are now obsolete.
- G4EmDNABuilder, G4EmDNAPhysicsActivator: introduced usage of the
new ion ionisation model in DNA Opt8 physics configuration.
- G4EmDNAPhysics, G4EmDNAPhysics_option2, G4EmDNAPhysics_option4,
G4EmDNAPhysics_option6, G4EmDNAPhysics_option8: updated interface to
G4EmDNABuilder.
o gamma_lepto_nuclear:
- G4EmExtraPhysics: removed LEND photo-nuclear; it is now selected by
G4HadronPhysicsLEND.
o hadron_elastic:
- In G4ChargeExchangePhysics, fixed usage of the messenger.
o hadron_inelastic:
- In G4HadrocPhysicsQBBC, disabled General Neutron Process.
Addressing problem reports #2558 and #2559.
- Added G4HadronPhysicsLEND to define neutron and photon induced
processes from LEND.
- G4HadronPhysicsShielding: removed LEND neutron process, now selected
by G4HadronPhysicsLEND.
+ Lists:
o G4PhysListFactory: prevent fallback to default physics list when an
invalid name is provided. Now, if a user specifies an unknown physics
list, Geant4 will throw a fatal error instead of silently using
FTFP_BERT. This ensures that users are aware of incorrect configurations
and helps preventing unintended simulation results.
o In QBBC physics list, added G4ChargeExchangePhysics.
o In Shielding physics list, simplified logic tree for inelastic models
and moved all LEND hadronic inelastic processes to G4HadronPhysicsLEND.
o Electromagnetic Processes:
-------------------------
+ DNA:
o Added new G4DNARuddIonisationDynamicModel, which uses charge from
G4DynamicParticle. The model is applicable for all ions.
o G4DNABornIonisationModel: new implementation of the Born model using
G4DNASamplingTable class; use stationary and fast flags from EM
parameters.
o G4DNARuddIonisationModel, G4DNABornIonisationModel1 and
G4DNABornIonisationModel2: fixed definition of the stationary code via
G4EmParameters.
o G4DNASamplingTable, new class allowing the sharing of sampling data
between threads.
o Updated IRT-syn model for high LET applications.
o Correction in the G4DNAScavengerProcess for IRT-syn model.
o Created G4ChemReboundTransportation to handle the rebound transportation
of the molecule.
o Replaced the G4MoleculeCounter singleton with G4MoleculeCounterManager
for managing counters.
o Replaced shared_ptr with unique_ptr and raw for manager counters.
o Fixed FPE on G4ChemReboundTransportation::calculateNextCoordinate().
o In G4PhysChemIO, removed dependency on 'analysis' module.
+ Low Energy:
o G4LivermorePhotoElectricModel: reorganisation of initialisation and
data destruction.
o In G4AtomicTransitionManager, G4UAtomicDeexcitation, use std::size_t
and few other cosmetic changes.
o In G4hIonEffChargeSquare, fixed reported Coverity defect.
+ Muons:
o G4RiGeMuPairProductionModel, G4RiGeAngularGenerator: fixes to the
angular distribution of electrons and positrons.
o G4MuPairProduction: enable RiGe model via G4EmParameters.
+ Pii:
o Use "const G4String&" in G4hImpactIonisation::InitializeMe() to avoid
unnecessary copy, reported by Coverity.
+ Standard:
o Added G4LowPAIH2O model for dE/dx in water for p and e-.
o G4UrbanMscModel: cosmetic change for Opt3 case; minor code improvement
and updated comments to the code. Not affecting any result.
o Reverted changes introduced in release 11.3 for static data
initialization in G4eBremsstrahlungRelModel.
+ Utils:
o New base class G4VXRayModel for X-ray processes. Adapted classes
G4OpticalParameters, G4OpticalParametersMessenger and G4LossTableManager
to configure and use G4VXRayModel.
o G4EmParametersMessenger: added UI command to enable/disable 5D pair
production model by muons.
o G4EmUtility, G4EmDataHandler, G4EmDataRegistry: removed minor memory
leaks and improved destruction at exit.
o G4EmParameters, G4EmParametersMessenger, G4EmUtility, G4LossTableBuilder,
G4VEnergyLossProcess: implemented new option to enable/disable
fluctuation of energy loss per G4Region.
o G4VEmProcess: added call to StartTracking(..) for all used models,
which need access to G4Track pointer.
+ Xrays:
o In G4Scintillation, build the scintillation integral tables for
materials that have non-empty material property tables and added
method BuildInverseCdfTable().
o In G4Cerenkov, build the Cerenkov integral only for materials that
have non-empty material property tables.
o Hadronic Processes:
------------------
+ cross_sections
o G4NeutronInelasticXS, G4ParticleInelasticXS: added download data for
all elements in class constructor, avoiding lazy initialisation at
run-time. No locks are set any longer by these cross-section classes.
For simple applications, the initialisation CPU time increases by
roughly 10%; no effect on complex applications.
o G4ChargeExchangeXS: fixed selection of reaction for compound materials;
added extra public and private methods; added extra method for sampling
of scattering angle; updated parameterisation using new fit to data.
o Fixed minor memory leaks in classes G4CrossSectionFactory,
G4CrossSectionFactoryRegistry, G4CrossSectionFactory,
G4ElectroNuclearCrossSection and G4ChipsAntiBaryonElasticXS.
o G4EMDissociationCrossSection: fixed several technical inaccuracies
in the code, addressing reported Coverity defects and to correctly
use G4Pow.
o G4ParticleInelasticXS: fixed reported Coverity defect.
o In G4EMDissociationSpectrum, added protection against beta=0, to fix
reported Coverity defect; correctly use G4Pow.
+ management
o G4HadronicProcess: removed warning for the case when K0 and anti-K0
are transformed into K0S or K0L.
+ models/coherent_elastic
o G4ChargeExchange: fixed problem in kinematic computations, allowed
recoil nucleus to be in an excited state. Fixed issue in final state
generation for the case of unstable meson production omega(782) and
f2(1270).
o G4ChargeExchange, G4HadronElastic: cleanup final state generation; use
the numerical limit for argument of the exponent to avoid precision
loss; in case of numerical problems force scattering angle to zero (do
not consider scattering backwards); use similar parameterisation and
code for both models. Fixed reported Coverity defect.
+ models/de_excitation
o Added G4FermiBreakUpAN, new alternative FermiBreakUp model and support
classes, contributed by A. Novikov (Yandex and MIPT) through
[GitHub PR #84](https://github.com/Geant4/geant4/pull/84). The model is
based on: J.P. Bondorf et al., Physics Reports, 257(3):133-221.
o G4ExcitationHandler, G4DeexPrecoParameters: updated initialisation
to allow switching between different FermiBreakUp models.
o G4DeexPrecoUtility: new class, providing common computation, to avoid
code duplication. Use it in classes G4EvaporationProbability,
G4ProtonEvaporationProbability, G4DeuteronEvaporationProbability,
G4TritonEvaporationProbability, G4He3EvaporationProbability and
G4AlphaEvaporationProbability, simplifying code.
o G4DeexPrecoParameters: added extra enumerator to choose variants of
the pre-compound model.
o G4NucLevel, G4PhotonEvaporation: use explicit type conversion from
double to float; use const arguments where possible.
o G4VEmissionProbability, G4EvaporationProbability, G4GEMProbabilityVI:
updated algorithms of integration of probabilities and sampling of
kinetic energy for emitted fragment. Expected more accurate spectra.
o G4GEMChannelVI, G4EvaporationGEMFactoryVI, G4DeexPrecoParameters: new
GEM de-excitation model with 83 decay channels.
o G4VEmissionProbability: use the new utility class G4VSIntegration,
to simplify code; not affecting results.
Updated parameters of integration of the probability density function.
o In G4PhotonEvaporation, G4VEmissionProbability, check life time of
final excitation level; special treatment for the ground state and the
next level. Addressing problem report #2660.
o In G4EvaporationProbability, fixed computation of inverse cross-section.
o G4StatMFMicroPartition: code cleanup, removed non-informative printout,
which can be repeated many times; instead stop MF model and return to
de-excitation handler.
o G4LevelReader: fix for reported Coverity defect.
o G4VFermiFragmentAN, G4FermiBreakUpAN: fixed reported Coverity defects.
o G4CoulombBarrier: some code cleanup.
o G4Evaporation: improved debug printout.
+ models/em_dissociation
o G4EMDissociation: fixed reported Coverity defects.
+ models/inclxx
o Fixed one more reported Coverity defect for use of std::move()
in G4INCLCascade.
o Fixed URL to Root in comments.
Fixes [GitHub PR#87](https://github.com/Geant4/geant4/pull/87).
+ models/lend
o Major update of GIDIplus interface with refactored C++ code, including
use of official GNDS formatted data.
o Added feature for high-fidelity gamma cascades following reactions such
as neutron capture and inelastic scattering.
o Collect all inelastic models (neutron and gamma induced) into
G4HadronPhysicsLEND. Updated and simplified Shielding and
G4EmExtraPhysics accordingly.
o Fix in G4EmExtraPhysics for failing in loading photonuclear from LEND
if G4GammaGeneralProcess existed.
o Fix in G4LENDCombinedModel photofission; check energy function was not
connected to the base class, resulting in a crash.
+ models/nudex
o Address maybe-unitialized warnings when building/linking with LTO,
identified by ATLAS.
+ models/particle_hp
o G4ParticleHPThermalScatteringData: attempt to fix reported Coverity
defect on wrong handling of map iterator. Substituted several calls to
G4HadronicExceptions by one G4Exception inside BuildPhysicsTable(..)
method, which provides a fatal exception if a particle is not a neutron.
Simplified IsApplicable(..) methods called at each step; the directory
path is taken from G4ParticleHPManager to reduce number of calls to
getenv() function; initialisation is performed only once in one
instance of the class; initilised data structures are saved to
G4ParticleHPManager and are accessed from all threads and instances;
end of job destruction is also performed only once; removed commented
lines and extended comments to code.
o In G4ParticleHPInelastic, fixed AllHP physics for initialisation of
neutrons and light ions. Addressing problem report #2591.
o G4ParticleHPThermalScattering, G4ParticleHPThermalScatteringData,
G4ParticleHPJENDLHEData: fixed reported Coverity defects for
unprotected access to maps.
o Fixed reported Coverity defects, mainly in handling of maps and finding
of isotopes.
+ models/pre_equilibrium
o New classes G4PreCompoundInterface, G4PreCompoundTransitionInt and
G4PreCompoundEmissionInt with alternative precompound model.
o G4PreCompoundModel, G4PreCompoundTransition, G4PreCompoundEmission:
added an option to use alternative precompound models, which may be
done via configuration without change of interface to consumer code;
introduced verbose flag and extended printout needed to debug; removed
old commented printout lines.
o G4PreCompoundFragment, G4PreCompoundNucleon, G4PreCompoundIon: updated
computation of inverse cross-section; added factor to cross-section.
o G4VPreCompoundFragment, G4PreCompoundFragment, G4HETCFragment: use the
new utility class G4VSIntegration, to simplify code; not affecting
results.
o G4PreCompoundFragment, G4PreCompoundProton, G4PreCompoundDeuteron,
G4PreCompoundTriton, G4PreCompoundHe3, G4PreCompoundAlpha: use new
utility class G4DeexPrecoUtility.
+ util
o G4HadronicParameters: implemented pretty-print to ostream to allow
users to check values at runtime, a-la G4EmParameters (request from
ATLAS).
o Run:
---
+ Fix in G4RunManager::ReinitializeGeometry(); the logical skin/border
surfaces (used for optical physics) contain pointers to logical/physical
volumes that are deleted when the geometry is reset. Resetting the
geometry will also clear these surface tables.
o Track & Tracking:
----------------
+ G4VTrajectory and G4VTrajectoryPoint: added caching of G4AttValues.
GetAttValues() returns a shared_ptr that points to the object created by
CreateAttValues() if not already created. Thus acts as a cache.
Protected copy and move constructors and copy and move assignment
operators.
+ G4RichTrajectoryPoint: added accessors for Pre/PostStepPointGlobalTime.
This allows fast access for time windowing feature of trajectory modeling.
o Visualization:
-------------
+ management:
o Make the TSG driver the "flagship" visualization driver.
In G4VisExecutive, make nickname/alias OGL synonymous with TSG and make
TSG the default for selection by build flags.
o Re-instated the transparency slider; re-implemented it in a generic way,
i.e., for all drivers; uses a new UI command:
"/vis/viewer/set/transparencyByDepth <d> [option]".
G4UIQt issues this command on signals from the slider. The user may,
of course, use this command directly.
o Split scene processing into its "permanent" (run-duration models) and
"transient" (end-of-event and end-of-run models) parts.
This allows to update just the transient part, e.g., trajectories,
which we might want to display in a different way, leaving the
permanent part (e.g., detector) unchanged, avoiding unnecessary
re-processing. This is exactly the situation for time windowing - the
detector does not change, the trajectories also actually do not change,
just the way they are drawn changes.
o G4VSceneHandler: introduced ProcessTransients() virtual function.
Moved pertinent code from ProcessScene() to ProcessTransients().
Copied time parameters into modeling parameters.
Calculate and maintain 'fMaxGeometryDepth', new base class data member.
Improved some diagnostic printing.
o G4VViewer: introduced ProcessTransients() method. Follow changes in
G4PhysicalVolumeModel.
Initialise fTransientsNeedRedrawing to "false". Previously, this was
initialised "true", but it is up to the viewer to decide if transients
(trajectories) need redrawing. Code tidy.
o Added RayTracerQt in G4VisExecutive.
o G4VVisCommand: in InterpolateViews(), implemented desired time per time
step. Computation time per step may cause this to increase.
o G4VisCommandsViewer: improved guidance of "/vis/viewer/interpolate"
command. In "/vis/viewer/set/timeWindow/displayHeadTime", implemented
"current as default". There might be some minor change of behaviour.
In "/vis/viewer/select", removed subsequent refresh, even for
auto-refresh drivers. Refresh is not required after a select, window
systems keep the image.
o In G4VisCommandsTouchable, disabled "/vis/touchable/centre..." and
"/twinkle" in the case of large process times.
o Added UI command "/vis/scene/add/endOfRunMacro".
The macro is executed at end of run and when rebuild required.
WARNING: some vis commands in the macro cause recursion. Stick to
simple commmands, e.g., which invoke vis manager Draw() methods.
o G4ViewParameters: added 'TransparencyByDepth' and
'TransparencyByDepthOption'. Simplified code; use single TimeParameters
from G4ModelingParameters, to replace 18 time window parameters.
Fixed typo to make "/vis/viewer/set/lightsMove cam" behaving correctly
for "/vis/viewer/set/lightsVector 0 0 1".
Addressing problem report #2460.
o G4VisCommandsViewerSet: updated to "/vis/viewer/set/timeWindow"
commands according to changes in G4ViewParameters.
Added UI command "/vis/viewer/set/transparencyByDepth".
o Minor improvement to listing of histograms (if any).
o In G4VisManager::EndOfRun(), print list of histograms even with vis
disabled.
o Modernised macro-based loops with range-based for.
o Replaced raw for loops with range-for where possible.
+ modeling:
o G4TrajectoryDrawerUtils: first version of generic time windowing of
trajectory slices; draws only slices within the viewer time window.
Note: unless the viewer can handled time-sliced trajectories (only
OGLS can do this at present), the viewer must request a kernel visit
on change of viewer time window.
Trap trajectories with very long global times, e.g, products of
long-lived radioactive isotopes. Draw as non-time-sliced trajectories.
Added fading of trajectory slices if time windowing is active; makes
trajectory slices look like little meteors streaking across the screen.
Applied clang-format.
o G4ModelingParameters: implemented TimeParameters::operator!=().
Adjusted default values in TimeParameters: set fade factor to 1
(maximum fading); set head time display 2D x-coordinate to zero
(centre), while 2D y-coordinate remains at -0.9 (bottom).
Added struct 'TimeParameters', a prerequisite for "Generic Time-Slicing"
for the display of the time evolution of events. With that feature, the
display of tracks moving through time will be available to all vis
drivers (drivers will still be allowed to implement their own time
evolution).
o G4TrajectoriesModel: in DescribeYourselfTo(), draw display head time
if requested and if time windowing is active; removed Begin/EndDraw
around the trajectories loop.
o In G4TrajectoryDrawByEncounteredVolume and
G4TrajectoryEncounteredVolumeFilter, use G4VTrajectory::GetAttValues()
instead of CreateAttValues(), to speedup repeated visits.
o G4VModel: introduced static data member for current modeling parameters
and its static accessor, GetCurrentModelingParameters().
o In G4PhysicalVolumeModel, fixed typo in ModelType.
o G4TrajectoriesModel: call SetCurrentModelingParameters().
o G4ModelingParameters: added 'TransparencyByDepth' and
'TransparencyByDepthOption'.
o G4PhysicalVolumeModel: renamed some data members and access functions
for clarity; added 'fMaxFullDepth' (includes base path, i.e., from
world volume); added code for processing transparency by depth.
+ OpenGL:
o G4OpenGLQtViewer: fixed the original pick feature to show pick info
window.
o G4OpenGLWin32Viewer: added SwitchToMasterThread() method to draw
trajectories at the end of run in MT mode.
o G4OpenGLStoredViewer, G4OpenGLStoredQtViewer: initiate kernel visit if
'TransparencyByDepth' or its options change.
o In G4OpenGLQtViewer, commented calls to TouchableSetVisibility/Colour;
no longer needed since the introduction of the new scene tree.
Commented out some debug printing to std::cout.
o In G4OpenGLStoredViewer, follow changes introduced in G4ViewParameters.
+ OpenInventor:
o G4OpenInventorViewer: initiate kernel visit if 'TransparencyByDepth' or
its options change. In CompareForKernelVisit(), cause kernel visit if
viewer start/end time changes; this is to take advantage of the new
generic time window. Implemented CompareForTransientsRedraw().
Take advantage of ProcessTransients(), which reconstructs that part of
the graphical database for transient objects, e.g., trajectories,
without reconstructing the "permanent" (run-duration) objects, e.g.,
the detector. In other words, something short of a complete "kernel
visit". For example, if the time window changes. Maximises the
efficiency of the recently implemented "generic" time windowing.
+ Qt3D
o G4Qt3DViewer: initiate kernel visit if 'TransparencyByDepth' or its
options change. In CompareForKernelVisit(), cause kernel visit if
viewer start/end time changes; this is to take advantage of the new
generic time window. Implemented CompareForTransientsRedraw().
+ RayTracer:
o Introducing RayTracerQt. Uses multithreading tracer, G4TheMTRayTracer.
With multithreading, image construction is quite fast.
o Introduced nicknames (long names still work): RT (for RayTracer),
RTX (for RayTracerX), RTQt (for RayTracerQt).
o In G4RayTracerViewer, use G4Timer to estimate
KernelVisitElapsedTimeSeconds.
o In G4VRTScanner (and inherited classes), removed misleading and un-used
methods GetGSName() and GetGSNickName().
+ ToolsGS:
o Allow accumulation of transients (trajectories) during multithreading.
o Trajectories are stored in the database during the run, and displayed
at end of run. All events are displayed at end of run.
o In G4ToolsSGViewer, initiate kernel visit if 'TransparencyByDepth' or
its options change. In CompareForKernelVisit(), cause kernel visit if
viewer start/end time changes; this is to take advantage of the new
generic time window. Implemented CompareForTransientsRedraw().
Removed 'SwitchToVisSubThread' and 'SwitchToMasterThread' as no action
is needed on thread switching.
In mouse_move(), use the event.shift_modifier() method, to pass in pan
mode. Have GetWindowSize() and GetRenderAreaSize() methods to retrieve
the actual sizes of the "seen/visible window" and of the "render area"
size; these may return different sizes, for example with Qt/OpenGL on
Mac and Windows. In SetView(), use the new GetWindowSize(),
GetRenderAreaSize() methods to set the "marker scale" on
G4ToolsSGSceneHandler.
o G4ToolsSGQtGLESViewer, G4ToolsSGQtZBViewer, G4ToolsSGOffscreenViewer:
suppressed SetView() method, as no more needed.
o In G4ToolsSGSceneHandler, respect line width in vis attributes and view
parameters. In GetOrCreateNode(), removed restriction on multithreading.
Handle the 'fMarkerScale' field.
o Modernised macro-based loops with range-based for statements.
o Datasets:
---------
+ G4EMLOW-8.7:
o Updated MicroElec data: added new files and updated format of other
files.
o Examples:
--------
+ Updated reference outputs, macros, READMEs and scripts.
+ advanced/dna/cellularPhantom
o Code reorganisation; introduced Run class.
o Simplified analysis of results.
o Updated affiliation.
+ advanced/dna/moleculardna
o Updated new implementation of IRT-syn model.
o Deleted Max Time Step parameter.
o Corrected segmentation error with Root macrofiles, caused when low
damage had been produced.
o Updated reaction list for DNA reactions.
o Define missing variable in some macros.
o Increased default statistics in ecoli.mac.
o Added moleculardna macro, Root macro and geometry files for the
simulation of phages.
o Updated direct damage range for plasmid.mac and cylinders.mac.
o Added fiber.mac macro.
o Increased max number of arguments in main().
o Added protection to all analysis macros to avoid 'nan' in error
calculation.
o Added possibility to activate parallel world using dedicated flag from
executable.
+ advanced/microbeam
o Added n-tuple merging.
+ extended/biasing
o Applied basic clang-tidy fixes and clang-format to code.
+ extended/biasing/GB03
o Instantiate G4GenericBiasingPhysics only if biasing is enabled.
Propagate biasing on/off to detector construction to initialise
biasing classes only if biasing is requested.
+ extended/biasing/GB05
+ extended/biasing/GB07
o Removed explicit call of base class constructor in DetectorConstruction.
+ extended/electromagnetic/TestEm2
o Fixed memory leak at exit in ActionInitialisation, DetectorConstruction
and RunAction. Instantiate the field messenger differently.
+ extended/electromagnetic/TestEm4
o Added G4RayleighScattering in PhysicsList.
+ extended/electromagnetic/TestEm13
+ extended/electromagnetic/TestEm14
o Added G4RayleighScattering in PhysicsList.
+ extended/electromagnetic/TestEm15
o Updated gamma.mac input macro to use emstandard_opt4.
o Removed gamma2mumu.mac input macro.
+ extended/electromagnetic/TestEm18
o Added G4RayleighScattering in PhysicsList.
+ extended/eventgenerator/exgps
o In HistoManager, activated n-tuple merging.
o Fixed python and analysis macros (tested with python 3.13.3).
o Moved plotHisto.C to macros. Removed plottest35.py and plotit.csh.
o Excluded not working tests (needed further investigation).
o Removed exgps_batch.in (identical with exgps.in).
o Copy all macros and run script into the build area in CMake script.
+ extended/eventgenerator/pythia/py8decayer
o Updated to Pythia-8.3.15.
+ extended/exoticphysics/phonon
o Updated build script for CTests definitions.
+ extended/hadronic/NeutronSource
o In main(), added SetUseNRESP71Model(true).
+ extended/medical/DICOM
o Refactored DICOM examples into a single project; now build everything
together for ease of use and demonstration. Code/behaviour otherwise
is unchanged. Including two examples, DICOM1 (renamed from the original
DICOM) and DICOM2, with two libraries that implement capabilities
common to both applications: G4DicomCore, providing the core Geant4
application structure; G4DicomReader, optional utility library to read
DICOM files and RT structure in DICOM format, as well as RT plans.
Both applications can optionally use the DICOM Digital Head.
+ extended/medical/dna/chem4
o Replaced shared_ptr with unique_ptr and raw for manager counters.
+ extended/medical/dna/chem5
o Use the new G4MoleculeCounterManager to manage the G4MoleculeCounter.
o Replaced shared_ptr with unique_ptr and raw for manager counters.
o Code clean up; added plot.py script for plotting the output data.
+ extended/medical/dna/chem6
+ extended/medical/dna/dnadamage1
o Replaced shared_ptr with unique_ptr and raw for manager counters.
+ extended/medical/dna/dnaphysics
o Added possibility to simulate radioactive nuclei; added radioactive.in
macro and plotRadioactive.C.
o Added elastic.in and plotElastic.C macros to show distribution of
scattering angles.
o Added UI command to record first step only; updated elastic.in macro
accordingly.
o Updated PhysicsList and SteppingAction.
+ extended/medical/dna/mfp
o Added n-tuple merging.
+ extended/medical/dna/molcounters
o New example showing how to use the new molecule counter manager system
and how to write custom molecule counters. The custom (spatially-aware)
molecule counter used here is further described in:
Radiat. Phys. Chem. 212 (2023) 111194.
+ extended/medical/dna/radial
o New example showing how to simulate radial dose profiles in liquid
water from incident ions using the Geant4-DNA physics processes and
models.
+ extended/medical/dna/range
o Added beta option8 physics list.
+ extended/medical/dna/scavenger
o Replaced shared_ptr with unique_ptr and raw for manager counters.
+ extended/medical/dna/slowing
o Added n-tuple merging.
+ extended/medical/dna/spower
o Added scoring of secondary electrons.
o PhysicsList: added all DNA Physics Lists and usage of G4EmParameters.
o In lot.C, added selection of electrons by default.
o In spower.in, changed physics constructors.
+ extended/medical/dna/svalue
o Added n-tuple merging.
o Added optional time threshold to iodine macros.
+ extended/medical/dna/wvalue
o Added n-tuple merging.
+ extended/medical/dna/UHDR
o Updated pulseAction for larger pulse size.
o Temporarily use molecule counter for EventScheduler.
o Updated reaction table for scavengers.
o Use the new G4MoleculeCounterManager to manage the G4MoleculeCounter.
o Added pulse structure and interpulse feature.
o Fixed partially diffused-control reactions.
o Fixed crash due to typo in UHDR.in
o Removed dependence of PrimaryGeneratorAction/Physlist/ChemList
and ActionIni classes on DetectorConstruction class.
o Updated macro files.
+ extended/medical/radiobiology
o Primary beam origin can be located outside the detector water tank.
+ extended/parallel
o Retired obsolete TBB example. Functionality fully provided by tasking
run manager with TBB support with no user code changes required.
+ extended/parallel/MPI
o Modernised and simplified library and example build scripts to build
G4mpi library and examples of its use in one project.
o Moved MPI from deprecated C++ interface to C interface (MPI 3+).
Based on [GitHub PR#81](https://github.com/Geant4/geant4/pull/81).
+ extended/parameterisations/Par04
o Introduction of the CaloDiT pre-trained model, offering greater
accuracy.
o Updated VAE training with the new translation script and Condor scripts.
+ extended/radioactivedecay/Activation
o In main(), added SetUseNRESP71Model(true).
----------------------------------------------------------------------------
+29
View File
@@ -6,6 +6,35 @@ It must **not** be used as a substitute for writing good git commit messages!
-------------------------------------------------------------------------------
## 2025-06-10 Ben Morgan (cmake-V11-03-06)
- Include external categories (G4zlib etc) in link resolution for unit test
executables
## 2015-06-09 Ben Morgan (cmake-V11-03-05)
- Update G4EMLOW dataset to version 8.7
- Requested in #251 to support microelec physics
## 2025-05-01 Ben Morgan (cmake-V11-03-04)
- Default to using Qt6 when selecting Qt support
- User must set `GEANT4_USE_QT_QT5` to force find/use of Qt5
## 2025-04-24 Igor Semeniouk (cmake-V11-03-03)
- G4ConfigureGNUMakeHelpers.cmake - correction for windows
- add bin for external dll libraries to PATH
- fix path to share/fonts
## 2025-04-04 John Allison (cmake-V11-03-02)
- Co-works: visman-V11-03-07, raytracer-V11-03-00.
- Code for RayTracerQt.
## 2025-04-02 Ben Morgan (cmake-V11-03-01)
- Export CMAKE_EXPORT_COMPILE_COMMANDS setting from toolkit to the build of
any test done by geant4_add_test to assist use of clang-tidy and other tooling.
## 2025-02-18 Ben Morgan (cmake-V11-03-00)
- Add ENVIRONMENT to any build step of geant4_add_test for consistency and to
allow easier propagation of additional build settings.
## 2024-11-25 Ben Morgan (cmake-V11-02-30)
- Bump RadioactiveDecay dataset version to 6.1.2
- Fixes Issue #237
+156 -122
View File
@@ -351,7 +351,7 @@ endif
IF NOT DEFINED ${VARIABLE_NAME} (
set \"${VARIABLE_NAME}=${VARIABLE_VALUE}\"
)
"
"
PARENT_SCOPE
)
endif()
@@ -382,13 +382,13 @@ fi
elseif(${SHELL_FAMILY} STREQUAL "cshell")
# Again, this is verbatim so final output is formatted correctly
set(${TEMPLATE_NAME}
"
"
if ( ! \${?${PATH_VARIABLE}} ) then
setenv ${PATH_VARIABLE} ${APPEND_VARIABLE}
else
setenv ${PATH_VARIABLE} ${APPEND_VARIABLE}:\${${PATH_VARIABLE}}
endif
"
"
PARENT_SCOPE
)
# -- cmd.exe block
@@ -434,7 +434,7 @@ if ( ! \${?${PATH_VARIABLE}} ) then
else
setenv ${PATH_VARIABLE} \${${PATH_VARIABLE}}:${APPEND_VARIABLE}
endif
"
"
PARENT_SCOPE
)
# -- cmd.exe block
@@ -907,7 +907,8 @@ file(RELATIVE_PATH
"${CMAKE_INSTALL_FULL_BINDIR}"
"${CMAKE_INSTALL_FULL_DATADIR}"
)
set(TOOLS_FONT_PATH "\"`cd \$geant4_envbindir/${G4ENV_BINDIR_TO_DATADIR}/fonts > /dev/null ; pwd`\"")
set(TOOLS_FONT_PATH "\"`cd \$geant4_envbindir/../share/Geant4/fonts > /dev/null ; pwd`\"")
set(TOOLS_FONT_PATHW "\%geant4_envbindir\%\\..\\share\\Geant4\\fonts")
# list of shells
set(shells_list bourne;cshell)
@@ -955,46 +956,68 @@ foreach(_shell IN LISTS shells_list)
set(GEANT4_TC_CLHEP_LIB_PATH_SETUP "# - Builtin CLHEP used")
if(GEANT4_USE_SYSTEM_CLHEP)
# Handle granular vs singular cases
get_target_property(_CLHEP_LIB_DIR CLHEP::CLHEP LOCATION)
get_target_property(_CLHEP_LIB_DIR CLHEP::CLHEP LOCATION)
get_filename_component(_CLHEP_LIB_DIR "${_CLHEP_LIB_DIR}" REALPATH)
get_filename_component(_CLHEP_LIB_DIR "${_CLHEP_LIB_DIR}" DIRECTORY)
if(${CMAKE_SYSTEM_NAME} IN_LIST _oswithldpath)
_g4tc_append_path(GEANT4_TC_CLHEP_LIB_PATH_SETUP
${_shell}
LD_LIBRARY_PATH
"${_CLHEP_LIB_DIR}"
)
_g4tc_append_path(GEANT4_TC_CLHEP_LIB_PATH_SETUP
${_shell}
LD_LIBRARY_PATH
"${_CLHEP_LIB_DIR}"
)
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
# add to PATH on windows
get_filename_component(_CLHEP_LIB_DIR "${_CLHEP_LIB_DIR}/../bin"
REALPATH
)
file(TO_CMAKE_PATH "${_CLHEP_LIB_DIR}" _CLHEP_LIB_DIR)
_g4tc_append_path(GEANT4_TC_CLHEP_LIB_PATH_SETUP
${_shell}
PATH
"${_CLHEP_LIB_DIR}"
)
else()
set(GEANT4_TC_CLHEP_LIB_PATH_SETUP "# System CLHEP in use, no configuration required")
set(GEANT4_TC_CLHEP_LIB_PATH_SETUP "# System CLHEP in use, no configuration required")
endif()
endif()
# - XercesC
set(GEANT4_TC_XERCESC_LIB_PATH_SETUP "# GDML SUPPORT NOT AVAILABLE")
if(GEANT4_USE_GDML)
get_filename_component(_XERCESC_LIB_DIR "${XercesC_LIBRARY}" REALPATH)
get_filename_component(_XERCESC_LIB_DIR "${XercesC_LIBRARY}" DIRECTORY)
get_target_property(_XERCESC_LIB_DIR XercesC::XercesC LOCATION)
get_filename_component(_XERCESC_LIB_DIR "${_XERCESC_LIB_DIR}" REALPATH)
get_filename_component(_XERCESC_LIB_DIR "${_XERCESC_LIB_DIR}" DIRECTORY)
if(${CMAKE_SYSTEM_NAME} IN_LIST _oswithldpath)
_g4tc_append_path(GEANT4_TC_XERCESC_LIB_PATH_SETUP
${_shell}
LD_LIBRARY_PATH
"${_XERCESC_LIB_DIR}"
)
_g4tc_append_path(GEANT4_TC_XERCESC_LIB_PATH_SETUP
${_shell}
LD_LIBRARY_PATH
"${_XERCESC_LIB_DIR}"
)
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
get_filename_component(_XERCESC_LIB_DIR "${_XERCESC_LIB_DIR}/../bin"
REALPATH
)
file(TO_CMAKE_PATH "${_XERCESC_LIB_DIR}" _XERCESC_LIB_DIR)
_g4tc_append_path(GEANT4_TC_XERCESC_LIB_PATH_SETUP
${_shell}
PATH
"${_XERCESC_LIB_DIR}"
)
else()
set(GEANT4_TC_XERCESC_LIB_PATH_SETUP "# GDML Supported, no configuration of Xerces-C required")
set(GEANT4_TC_XERCESC_LIB_PATH_SETUP "# GDML Supported, no configuration of Xerces-C required")
endif()
endif()
# - Set data paths
set(GEANT4_ENV_DATASETS )
_g4tc_setenv_command(_dssetenvcmd ${_shell} GEANT4_DATA_DIR ${GEANT4_DATA_DIR})
_g4tc_setenv_command(_dssetenvcmd ${_shell} GEANT4_DATA_DIR ${GEANT4_DATA_DIR})
set(GEANT4_ENV_DATASETS "${GEANT4_ENV_DATASETS}${_dssetenvcmd}\n")
set(_dssetenvcmd "
# - Variables for individual datasets
# Uncomment the line and edit the path to the dataset if installed in not standard location.")
set(GEANT4_ENV_DATASETS "${GEANT4_ENV_DATASETS}${_dssetenvcmd}\n\n")
foreach(_ds ${GEANT4_EXPORTED_DATASETS})
set(GEANT4_ENV_DATASETS "${GEANT4_ENV_DATASETS}${_dssetenvcmd}\n\n")
foreach(_ds ${GEANT4_EXPORTED_DATASETS})
_g4tc_setenv_command(_dssetenvcmd ${_shell} ${${_ds}_ENVVAR} "$GEANT4_DATA_DIR/${${_ds}_PATH}")
set(GEANT4_ENV_DATASETS "${GEANT4_ENV_DATASETS}# ${_dssetenvcmd}\n")
endforeach()
@@ -1003,10 +1026,10 @@ foreach(_shell IN LISTS shells_list)
set(GEANT4_ENV_TOOLS_FONT_PATH "# FREETYPE SUPPORT NOT AVAILABLE")
if(GEANT4_USE_FREETYPE)
_g4tc_append_path(GEANT4_ENV_TOOLS_FONT_PATH
${_shell}
TOOLS_FONT_PATH
"${TOOLS_FONT_PATH}"
)
${_shell}
TOOLS_FONT_PATH
"${TOOLS_FONT_PATH}"
)
endif()
# Configure the file
@@ -1014,107 +1037,118 @@ foreach(_shell IN LISTS shells_list)
${PROJECT_SOURCE_DIR}/cmake/Templates/geant4-env-skeleton.in
${PROJECT_BINARY_DIR}/InstallTreeFiles/${_scriptfullname}
@ONLY
)
else()
)
else()
# message(STATUS "bat skeleton")
# Set path, which should be where the script itself is installed
# the varible synax differnt
_g4tc_prepend_path(GEANT4_ENV_BINPATH_SETUP
${_shell}
PATH
"%geant4_envbindir%"
)
# Set path, which should be where the script itself is installed
# the varible synax differnt
_g4tc_prepend_path(GEANT4_ENV_BINPATH_SETUP
${_shell}
PATH
"%geant4_envbindir%"
)
## Set library path, based on relative paths between bindir and libdir
#if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
# _g4tc_prepend_path(GEANT4_ENV_LIBPATH_SETUP
# ${_shell}
# LD_LIBRARY_PATH
# "\"`cd $geant4_envbindir/${G4ENV_BINDIR_TO_LIBDIR} > /dev/null ; pwd`\""
# )
# endif()
## Set library path, based on relative paths between bindir and libdir
#if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
# _g4tc_prepend_path(GEANT4_ENV_LIBPATH_SETUP
# ${_shell}
# LD_LIBRARY_PATH
# "\"`cd $geant4_envbindir/${G4ENV_BINDIR_TO_LIBDIR} > /dev/null ; pwd`\""
# )
# endif()
# Third party lib paths
# - CLHEP, if system
set(GEANT4_TC_CLHEP_LIB_PATH_SETUP "rem # - Builtin CLHEP used")
if(GEANT4_USE_SYSTEM_CLHEP)
# Handle granular vs singular cases
get_target_property(_CLHEP_LIB_DIR CLHEP::CLHEP LOCATION)
get_filename_component(_CLHEP_LIB_DIR "${_CLHEP_LIB_DIR}" REALPATH)
get_filename_component(_CLHEP_LIB_DIR "${_CLHEP_LIB_DIR}" DIRECTORY)
# Third party lib paths
# - CLHEP, if system
set(GEANT4_TC_CLHEP_LIB_PATH_SETUP "rem # - Builtin CLHEP used")
if(GEANT4_USE_SYSTEM_CLHEP)
# Handle granular vs singular cases
get_target_property(_CLHEP_LIB_DIR CLHEP::CLHEP LOCATION)
get_filename_component(_CLHEP_LIB_DIR "${_CLHEP_LIB_DIR}" REALPATH)
get_filename_component(_CLHEP_LIB_DIR "${_CLHEP_LIB_DIR}" DIRECTORY)
get_filename_component(_CLHEP_LIB_DIR "${_CLHEP_LIB_DIR}/../bin" REALPATH)
file(TO_NATIVE_PATH "${_CLHEP_LIB_DIR}" _CLHEP_LIB_DIR)
if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
_g4tc_append_path(GEANT4_TC_CLHEP_LIB_PATH_SETUP
${_shell}
PATH
"${_CLHEP_LIB_DIR}"
)
else()
set(GEANT4_TC_CLHEP_LIB_PATH_SETUP "rem # System CLHEP in use, no configuration required")
endif()
if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
_g4tc_append_path(GEANT4_TC_CLHEP_LIB_PATH_SETUP
${_shell}
PATH
"${_CLHEP_LIB_DIR}"
)
else()
set(GEANT4_TC_CLHEP_LIB_PATH_SETUP "rem # System CLHEP in use, no configuration required")
endif()
# - XercesC
set(GEANT4_TC_XERCESC_LIB_PATH_SETUP "rem # GDML SUPPORT NOT AVAILABLE")
if(GEANT4_USE_GDML)
get_filename_component(_XERCESC_LIB_DIR "${XercesC_LIBRARY}" REALPATH)
get_filename_component(_XERCESC_LIB_DIR "${XercesC_LIBRARY}" DIRECTORY)
if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
_g4tc_append_path(GEANT4_TC_XERCESC_LIB_PATH_SETUP
${_shell}
PATH
"${_XERCESC_LIB_DIR}"
)
else()
set(GEANT4_TC_XERCESC_LIB_PATH_SETUP "rem # GDML Supported, no configuration of Xerces-C required")
endif()
endif()
# - Set data paths
set(GEANT4_ENV_DATASETS )
_g4tc_setenv_command(_dssetenvcmd ${_shell} GEANT4_DATA_DIR ${GEANT4_DATA_DIRW})
set(GEANT4_ENV_DATASETS "${GEANT4_ENV_DATASETS}${_dssetenvcmd}\n")
set(_dssetenvcmd "FOR /F %%i IN ( \"%GEANT4_DATA_DIR%\" ) DO set \"GEANT4_DATA_DIR=%%~fi\"")
set(GEANT4_ENV_DATASETS "${GEANT4_ENV_DATASETS}${_dssetenvcmd}\n\n")
set(_dssetenvcmd "
rem - Variables for individual datasets
rem Uncomment the line and edit the path to the dataset if installed in not standard location.")
set(GEANT4_ENV_DATASETS "${GEANT4_ENV_DATASETS}${_dssetenvcmd}\n\n")
foreach(_ds ${GEANT4_EXPORTED_DATASETS})
file(TO_NATIVE_PATH ${${_ds}_PATH} _native_path)
_g4tc_setenv_command(_dssetenvcmd ${_shell} ${${_ds}_ENVVAR} "%GEANT4_DATA_DIR%\\${_native_path}")
set(GEANT4_ENV_DATASETS "${GEANT4_ENV_DATASETS}rem ${_dssetenvcmd}\n")
endforeach()
# - Set Font Path
# ??? We need this variable ?
# ??? path to freetype2 library ???
set(GEANT4_ENV_TOOLS_FONT_PATH "rem # FREETYPE SUPPORT NOT AVAILABLE")
if(GEANT4_USE_FREETYPE)
_g4tc_append_path(GEANT4_ENV_TOOLS_FONT_PATH
${_shell}
TOOLS_FONT_PATH
"${TOOLS_FONT_PATH}"
)
endif()
configure_file(
${PROJECT_SOURCE_DIR}/cmake/Templates/geant4-bat-skeleton.in
${PROJECT_BINARY_DIR}/InstallTreeFiles/${_scriptfullname}
@ONLY
)
unset(_CLHEP_LIB_DIR)
endif()
# Install it to the required location
install(FILES
${PROJECT_BINARY_DIR}/InstallTreeFiles/${_scriptfullname}
DESTINATION ${CMAKE_INSTALL_BINDIR}
PERMISSIONS
OWNER_READ OWNER_WRITE OWNER_EXECUTE
GROUP_READ GROUP_EXECUTE
WORLD_READ WORLD_EXECUTE
COMPONENT Runtime
)
endforeach()
# - XercesC
set(GEANT4_TC_XERCESC_LIB_PATH_SETUP "rem # GDML SUPPORT NOT AVAILABLE")
if(GEANT4_USE_GDML)
get_target_property(_XERCESC_LIB_DIR XercesC::XercesC LOCATION)
get_filename_component(_XERCESC_LIB_DIR "${_XERCESC_LIB_DIR}" REALPATH)
get_filename_component(_XERCESC_LIB_DIR "${_XERCESC_LIB_DIR}" DIRECTORY)
get_filename_component(_XERCESC_LIB_DIR "${_XERCESC_LIB_DIR}/../bin" REALPATH)
file(TO_NATIVE_PATH "${_XERCESC_LIB_DIR}" _XERCESC_LIB_DIR)
if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
_g4tc_append_path(GEANT4_TC_XERCESC_LIB_PATH_SETUP
${_shell}
PATH
"${_XERCESC_LIB_DIR}"
)
else()
set(GEANT4_TC_XERCESC_LIB_PATH_SETUP "rem # GDML Supported, no configuration of Xerces-C required")
endif()
unset(_XERCESC_LIB_DIR)
endif()
# - Set data paths
set(GEANT4_ENV_DATASETS )
_g4tc_setenv_command(_dssetenvcmd ${_shell} GEANT4_DATA_DIR ${GEANT4_DATA_DIRW})
set(GEANT4_ENV_DATASETS "${GEANT4_ENV_DATASETS}${_dssetenvcmd}\n")
set(_dssetenvcmd "FOR /F %%i IN ( \"%GEANT4_DATA_DIR%\" ) DO set \"GEANT4_DATA_DIR=%%~fi\"")
set(GEANT4_ENV_DATASETS "${GEANT4_ENV_DATASETS}${_dssetenvcmd}\n\n")
set(_dssetenvcmd "
rem - Variables for individual datasets
rem Uncomment the line and edit the path to the dataset if installed in not standard location.
" )
set(GEANT4_ENV_DATASETS "${GEANT4_ENV_DATASETS}${_dssetenvcmd}\n\n")
foreach(_ds ${GEANT4_EXPORTED_DATASETS})
file(TO_NATIVE_PATH ${${_ds}_PATH} _native_path)
_g4tc_setenv_command(_dssetenvcmd ${_shell} ${${_ds}_ENVVAR} "%GEANT4_DATA_DIR%\\${_native_path}")
set(GEANT4_ENV_DATASETS "${GEANT4_ENV_DATASETS}rem ${_dssetenvcmd}\n")
endforeach()
# - Set Font Path
# g4tools fonts directory
set(GEANT4_ENV_TOOLS_FONT_PATH "rem # FREETYPE SUPPORT NOT AVAILABLE")
if(GEANT4_USE_FREETYPE)
_g4tc_setenv_command(_freetypecmd ${_shell} _g4_font_path ${TOOLS_FONT_PATHW})
set(GEANT4_ENV_TOOLS_FONT_PATH "${_freetypecmd}\n")
set(_freetypecmd "FOR /F %%i IN ( \"%_g4_font_path%\" ) DO set \"_g4_font_path=%%~fi\"")
set(GEANT4_ENV_TOOLS_FONT_PATH "${GEANT4_ENV_TOOLS_FONT_PATH}${_freetypecmd}\n")
_g4tc_append_path(_freetypecmd ${_shell} TOOLS_FONT_PATH "%_g4_font_path%")
set(GEANT4_ENV_TOOLS_FONT_PATH "${GEANT4_ENV_TOOLS_FONT_PATH}${_freetypecmd}")
_g4tc_setenv_command(_freetypecmd ${_shell} _g4_font_path "")
set(GEANT4_ENV_TOOLS_FONT_PATH "${GEANT4_ENV_TOOLS_FONT_PATH}${_freetypecmd}\n")
endif()
configure_file(
${PROJECT_SOURCE_DIR}/cmake/Templates/geant4-bat-skeleton.in
${PROJECT_BINARY_DIR}/InstallTreeFiles/${_scriptfullname}
@ONLY
)
endif()
# Install it to the required location
install(FILES
${PROJECT_BINARY_DIR}/InstallTreeFiles/${_scriptfullname}
DESTINATION ${CMAKE_INSTALL_BINDIR}
PERMISSIONS
OWNER_READ OWNER_WRITE OWNER_EXECUTE
GROUP_READ GROUP_EXECUTE
WORLD_READ WORLD_EXECUTE
COMPONENT Runtime
)
endforeach()
+2 -2
View File
@@ -18,11 +18,11 @@ geant4_add_dataset(
# - Low energy electromagnetics
geant4_add_dataset(
NAME G4EMLOW
VERSION 8.6.1
VERSION 8.7
FILENAME G4EMLOW
EXTENSION tar.gz
ENVVAR G4LEDATA
MD5SUM 9db67a37acc3eae9b0ffdace41a23b74
MD5SUM 949c9422ae668208562be1b991750df1
)
# - Photon evaporation
+3 -2
View File
@@ -874,8 +874,10 @@ function(geant4_test_link_libraries _target)
)
__geant4_assert_no_unparsed_arguments(G4TESTLINKLIB geant4_test_link_libraries)
# Need defined libraries to be able to resolve between static/shared
# Need defined libraries and externals to be able to resolve between static/shared
get_property(__g4definedlibraries GLOBAL PROPERTY GEANT4_DEFINED_CATEGORIES)
geant4_get_external_categories(__g4externalcategories)
list(APPEND __g4definedlibraries ${__g4externalcategories})
foreach(__prop PUBLIC PRIVATE INTERFACE)
__geant4_resolve_link_libraries(G4TESTLINKLIB_${__prop})
@@ -894,7 +896,6 @@ function(geant4_test_link_libraries _target)
list(APPEND _g4linklibs "${_linklib}")
endif()
endforeach()
message(STATUS "${_g4linklibs}")
set(_linklibs ${_g4linklibs})
else()
set(_linklibs ${G4TESTLINKLIB_${__prop}})
+13 -9
View File
@@ -65,10 +65,13 @@ if(GEANT4_USE_INVENTOR_QT AND NOT GEANT4_USE_QT)
message(STATUS "Forcing GEANT4_USE_QT to ON, required by selection of GEANT4_USE_INVENTOR_QT as ON")
endif()
# TEMPORARY for 11.2 Beta Development
# Decision still required on whether to allow selection of 5/6 in production
cmake_dependent_option(GEANT4_USE_QT_QT6 "Require Qt6 when building Qt support" OFF "GEANT4_USE_QT" OFF)
mark_as_advanced(GEANT4_USE_QT_QT6)
# We default to Qt6 if available, but allow the user to select Qt5
set(GEANT4_USE_QT_QT6 ON)
cmake_dependent_option(GEANT4_USE_QT_QT5 "Require Qt5 when building Qt support" OFF "GEANT4_USE_QT" OFF)
if(GEANT4_USE_QT_QT5)
set(GEANT4_USE_QT_QT6 OFF)
endif()
# - Vtk
option(GEANT4_USE_VTK "Build Geant4 with VTK visualisation" OFF)
@@ -161,15 +164,13 @@ if(GEANT4_USE_QT)
# 5.9 is selected as the min version to support based on the system version on CentOS7
# Once 5.15 is the minimum version, the "Qt${QT_VERSION_MAJOR}_..." variables can be dropped
# - https://doc.qt.io/qt-6/cmake-manual.html
# TEMPORARY for 11.2 beta:
# - Decision still required on whether to allow selection of 5/6 in production
# TODO:
# - Because VTK and SoQt use Qt themselves, we may want to consider checking that we
# have a consistent link to the same Qt version
if(GEANT4_USE_QT_QT6)
find_package(QT NAMES Qt6 COMPONENTS Core REQUIRED)
else()
if(GEANT4_USE_QT_QT5)
find_package(QT 5.9 NAMES Qt5 COMPONENTS Core REQUIRED)
else()
find_package(QT NAMES Qt6 COMPONENTS Core REQUIRED)
endif()
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Gui Widgets OpenGL REQUIRED)
@@ -181,6 +182,9 @@ if(GEANT4_USE_QT)
Qt${QT_VERSION_MAJOR}Widgets_DIR
Qt${QT_VERSION_MAJOR}OpenGL_DIR)
# RayTracerQT
set(GEANT4_USE_RAYTRACER_QT ON)
# G4OpenGL and G4ToolsSG also require OpenGLWidgets in Qt6
if(QT_VERSION_MAJOR GREATER 5)
find_package(Qt${QT_VERSION_MAJOR}OpenGLWidgets REQUIRED)
+4
View File
@@ -175,7 +175,11 @@ function(geant4_add_test test)
-DCMAKE_SHARED_LINKER_FLAGS=${CMAKE_SHARED_LINKER_FLAGS}
-DCMAKE_STATIC_LINKER_FLAGS=${CMAKE_STATIC_LINKER_FLAGS}
-DCMAKE_DISABLE_FIND_PACKAGE_ROOT=$<BOOL:${CMAKE_DISABLE_FIND_PACKAGE_ROOT}>
-DCMAKE_EXPORT_COMPILE_COMMANDS=$<BOOL:${CMAKE_EXPORT_COMPILE_COMMANDS}>
)
if(ARG_ENVIRONMENT)
set_property(TEST ${__build_test_name} PROPERTY ENVIRONMENT ${ARG_ENVIRONMENT})
endif()
# Build part of the test should have additional regex, and *must* have same labels
if(ARG_FAILREGEX)
+3
View File
@@ -6,6 +6,9 @@ It must **not** be used as a substitute for writing good git commit messages!
--------------------------------------------------------------------------------
## 2025-05-12 Gabriele Cosmo (config-V11-03-00)
- Updated system scripts for Qt settings: set Qt6 as default.
## 2023-11-13 Gabriele Cosmo (config-V11-01-03)
- Updated system scripts for Qt settings: removed Qt4 and added Qt6.
+3 -3
View File
@@ -12,11 +12,11 @@
# List of the supported architectures/compilers and related flavors for
# the environment variable G4SYSTEM:
#
# Linux-g++ Linux (CentOS7), gcc-4.8.4 (default)
# Linux-g++ Linux (rhel9), gcc-11.5 (default)
#
# Darwin-clang MacOSX 10.14, clang-7
# Darwin-clang macOS 15.4, clang-17
#
# WIN32-VC Windows 10 and Microsoft Visual C++ 14.11
# WIN32-VC Windows 11 and Microsoft Visual C++ 17.13
#
# -------------------------------------------------------------------------
+2 -2
View File
@@ -1,6 +1,6 @@
#
# ------ macOS ------
# macOS, Apple clang-12 and higher
# macOS, Apple clang-17 and higher
#
# Original author: Gabriele Cosmo - CERN
#
@@ -92,7 +92,7 @@ ifeq ($(G4SYSTEM),Darwin-clang)
QTHOME := /Library/Frameworks
endif
ifndef QT_VERSION
QT_VERSION := 5
QT_VERSION := 6
endif
ifeq ($(QTHOME),/Library/Frameworks)
ifndef QTMOC
+2 -2
View File
@@ -1,6 +1,6 @@
#
# ------ macOS ------
# macOS, gcc-9.3 and higher
# macOS, gcc-11.5 and higher
#
# Original author: Helmut Burkhardt - CERN
# Revisions: Guy Barrand - LAL
@@ -121,7 +121,7 @@ ifeq ($(G4SYSTEM),Darwin-g++)
QTHOME := /Library/Frameworks
endif
ifndef QT_VERSION
QT_VERSION := 5
QT_VERSION := 6
endif
ifeq ($(QTHOME),/Library/Frameworks)
ifndef QTMOC
+2 -2
View File
@@ -1,5 +1,5 @@
#
# ------ GNU/LINUX ------ clang 9.0 and higher
# ------ GNU/LINUX ------ clang 17.0 and higher
#
# Original author: Gabriele Cosmo - CERN
#
@@ -93,7 +93,7 @@ ifeq ($(G4SYSTEM),Linux-clang)
endif
ifndef QT_VERSION
QT_VERSION := 5
QT_VERSION := 6
endif
ifndef QTFLAGS
+2 -2
View File
@@ -1,5 +1,5 @@
#
# ------ GNU/LINUX ------ gcc 9.3 and higher
# ------ GNU/LINUX ------ gcc 11.5 and higher
#
ifeq ($(G4SYSTEM),Linux-g++)
CXX := g++
@@ -90,7 +90,7 @@ ifeq ($(G4SYSTEM),Linux-g++)
endif
ifndef QT_VERSION
QT_VERSION := 5
QT_VERSION := 6
endif
ifndef QTFLAGS
+1 -1
View File
@@ -84,7 +84,7 @@ ifeq ($(G4SYSTEM),Linux-icc)
endif
ifndef QT_VERSION
QT_VERSION := 5
QT_VERSION := 6
endif
ifndef QTFLAGS
+2 -2
View File
@@ -1,5 +1,5 @@
#
# ------ GNU/LINUX ------ Intel OneAPI DPC++ 2022.x and higher
# ------ GNU/LINUX ------ Intel OneAPI DPC++ 2025.x and higher
#
ifeq ($(G4SYSTEM),Linux-icx)
CXX := icpx
@@ -85,7 +85,7 @@ ifeq ($(G4SYSTEM),Linux-icx)
endif
ifndef QT_VERSION
QT_VERSION := 5
QT_VERSION := 6
endif
ifndef QTFLAGS
+2 -2
View File
@@ -1,5 +1,5 @@
#
# ------ WIN32/VC ------ Visual Studio 2019 and higher
# ------ WIN32/VC ------ Visual Studio 2022 and higher
#
ifeq ($(G4SYSTEM),WIN32-VC)
CXX := CL
@@ -42,7 +42,7 @@ ifeq ($(G4SYSTEM),WIN32-VC)
QTHOME := /Qt
endif
ifndef QT_VERSION
QT_VERSION := 5
QT_VERSION := 6
endif
ifndef QTFLAGS
QTFLAGS := -I$(QTHOME)/include
+43
View File
@@ -6,6 +6,49 @@ It must **not** be used as a substitute for writing good git commit messages!
-------------------------------------------------------------------------------
## 2025-06-26 Gabriele Cosmo (examples-V11-03-06)
- Updated reference outputs according to reference tag geant4-11-03-ref-06.
- Included tags: molecularDNA-V11-03-09, testem2-V11-03-00, exgps-V11-03-00,
p8decayer-V11-03-00, molcounter-basic-V11-03-02,
spower-V11-03-02, expar04-V11-03-00.
## 2025-05-31 Gabriele Cosmo (examples-V11-03-05)
- Updated reference outputs according to reference tag geant4-11-03-ref-05.
- Included tags: doxygen-V11-03-01, exadvanced-V11-03-00, exhadr03-V11-03-00,
molecularDNA-V11-03-08, exextended-V11-03-00, exdna-V11-03-01,
exhadr04-V11-03-00, exhadr05-V11-03-00, exhadr06-V11-03-00,
exhadr07-V11-03-00, NeutronSource-V11-03-00, DICOM-V11-03-00
chem4-V11-03-01, chem5-V11-03-02, chem6-V11-03-01,
dnadamage2-V11-03-01, dnaphysics-V11-03-03, range-V11-03-00,
molcounters-V11-03-00, scavenger-V11-03-01, spower-V11-03-01,
UHDR-V11-03-04, activation-V11-03-00.
## 2025-04-30 Gabriele Cosmo (examples-V11-03-04)
- Updated reference outputs according to reference tag geant4-11-03-ref-04.
- Included tags: molecularDNA-V11-03-07, testem15-V11-03-00, chem5-V11-03-00,
UHDR-V11-03-00, exparallel-V11-03-00, MPI-V11-03-01.
## 2025-03-31 Gabriele Cosmo (examples-V11-03-03)
- Updated reference outputs according to reference tag geant4-11-03-ref-03.
- Included tags: exbiasing-V11-03-00, GB01-V11-03-00, GB02-V11-03-00,
GB03-V11-03-01, GB04-V11-03-00, GB05-V11-03-01, GB06-V11-03-01,
GB07-V11-03-01, testem4-V11-03-00, testem13-V11-03-00,
testem14-V11-03-00, testem18-V11-03-00, FlukaCern-V11-03-02,
VecGeomNavigation-V11-03-01, exdna-V11-03-00, radial-V11-03-00,
dnaphysics-V11-03-02, spower-V11-03-00, MPI-V11-03-00.
## 2025-02-28 Gabriele Cosmo (examples-V11-03-02)
- Updated reference outputs according to reference tag geant4-11-03-ref-02.
- Included tags: molecularDNA-V11-03-06, exhgcaltb-V11-03-00, GB03-V11-03-00,
GB06-V11-03-00.
## 2025-01-31 Gabriele Cosmo (examples-V11-03-01)
- Updated reference outputs according to reference tag geant4-11-03-ref-01.
- Included tags: doxygen-V11-03-00, cellularPhantom-V11-03-01, mfp-V11-03-00,
molecularDNA-V11-03-02, microbeam-V11-03-00, svalue-V11-03-01,
dnaphysics-V11-03-01, slowing-V11-03-00, wvalue-V11-03-00,
radiobiology-V11-03-00.
## 2024-12-06 Gabriele Cosmo (examples-V11-03-00)
- Updated reference outputs according to reference tag geant4-11-03-ref-00.
- Included tags: doxygen-V11-02-01, dsbandrepair-V11-02-03, ch3-V11-02-00,
+5 -3
View File
@@ -38,7 +38,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo
**************************************************************
Geant4 version Name: geant4-11-03-patch-02 (25-April-2025)
Geant4 version Name: geant4-11-03-ref-06 (30-June-2025)
Copyright : Geant4 Collaboration
References : NIM A 506 (2003), 250-303
: IEEE-TNS 53 (2006), 270-278
@@ -98,7 +98,7 @@ Lowest triplet kinetic energy 1 MeV
Enable sampling of gamma linear polarisation 0
5D gamma conversion model type 0
5D gamma conversion model on isolated ion 0
Use Ricardo-Gerardo pair production model 0
Use RiGe 5D e+e- pair production model by muons 0
Livermore data directory epics_2017
=======================================================================
====== Ionisation Parameters ========
@@ -751,6 +751,7 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1
=======================================================================
====== Geant4 Native Pre-compound Model Parameters ========
=======================================================================
Type of pre-compound model 0
Type of pre-compound inverse x-section 1
Pre-compound model active 1
Pre-compound excitation low energy 100 keV
@@ -767,6 +768,7 @@ Use HETC submodel for pre-compound model 0
Type of de-excitation inverse x-section 3
Type of de-excitation factory Evaporation+GEM
Number of de-excitation channels 68
Type of Fermi BreakUp model ModelVI
Min excitation energy 10 eV
Min energy per nucleon for multifragmentation 200 GeV
Limit excitation energy for Fermi BreakUp 20 MeV
@@ -781,4 +783,4 @@ Correlated gamma emission flag 0
Max 2J for sampling of angular correlations 10
=======================================================================
writing Event: 0
TimeTotal> 2.324 1.420
TimeTotal> 1.859 1.480
File diff suppressed because it is too large Load Diff
@@ -55,7 +55,7 @@
CexmcHistoWidget::CexmcHistoWidget()
{
/* this is a workaround of the repaint bug in the ROOT Qt backend:
* see http://root.cern.ch/phpBB3/viewtopic.php?f=3&t=17081#p73055 */
* see http://root.cern/phpBB3/viewtopic.php?f=3&t=17081#p73055 */
fCanvas->SetFillColor( 10 );
}
+1 -1
View File
@@ -4,7 +4,7 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry,
which **must** added in reverse chronological order (newest at the top). It must **not**
be used as a substitute for writing good git commit messages!
## 2025-02-28 Soon Yung Jun (exhgcaltb-V11-02-00)
## 2025-02-28 Soon Yung Jun (exhgcaltb-V11-03-00)
- Restore the original beam energy after it is modified
- Ensure non-negative beam energy
@@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo
**************************************************************
Geant4 version Name: geant4-11-03-patch-02 (25-April-2025)
Geant4 version Name: geant4-11-03-ref-06 (30-June-2025)
Copyright : Geant4 Collaboration
References : NIM A 506 (2003), 250-303
: IEEE-TNS 53 (2006), 270-278
@@ -1656,7 +1656,7 @@ Lowest triplet kinetic energy 1 MeV
Enable sampling of gamma linear polarisation 0
5D gamma conversion model type 0
5D gamma conversion model on isolated ion 0
Use Ricardo-Gerardo pair production model 0
Use RiGe 5D e+e- pair production model by muons 0
Livermore data directory epics_2017
=======================================================================
====== Ionisation Parameters ========
@@ -2309,6 +2309,7 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1
=======================================================================
====== Geant4 Native Pre-compound Model Parameters ========
=======================================================================
Type of pre-compound model 0
Type of pre-compound inverse x-section 1
Pre-compound model active 1
Pre-compound excitation low energy 100 keV
@@ -2325,6 +2326,7 @@ Use HETC submodel for pre-compound model 0
Type of de-excitation inverse x-section 3
Type of de-excitation factory Evaporation+GEM
Number of de-excitation channels 68
Type of Fermi BreakUp model ModelVI
Min excitation energy 10 eV
Min energy per nucleon for multifragmentation 200 GeV
Limit excitation energy for Fermi BreakUp 20 MeV
+4
View File
@@ -6,6 +6,10 @@ It must **not** be used as a substitute for writing good git commit messages!
-------------------------------------------------------------------------------
## 2025-05-16 Ben Morgan (exadvanced-V11-03-00)
- Replace the URL root.cern.ch with canonical root.cern
- Fixes [GitHub PR 87](https://github.com/Geant4/geant4/pull/87)
## 2024-10-16 Hoang Tran (exadvanced-V11-02-01)
- Created a new dna category in advanced example
- Moved moleculardna example from extended dna example to advanced dna example.
@@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo
**************************************************************
Geant4 version Name: geant4-11-03-patch-02 (25-April-2025)
Geant4 version Name: geant4-11-03-ref-06 (30-June-2025)
Copyright : Geant4 Collaboration
References : NIM A 506 (2003), 250-303
: IEEE-TNS 53 (2006), 270-278
@@ -31,23 +31,24 @@ Registered graphics systems are:
ASCIITree (ATree)
DAWNFILE (DAWNFILE)
G4HepRepFile (HepRepFile)
RayTracer (RayTracer)
RayTracer (RT)
VRML2FILE (VRML2FILE)
gMocrenFile (gMocrenFile)
TOOLSSG_OFFSCREEN (TSG_OFFSCREEN, TSG_FILE)
OpenGLImmediateQt (OGLIQt, OGLI)
OpenGLStoredQt (OGLSQt, OGL, OGLS)
OpenGLStoredQt (OGLSQt, OGLS)
OpenGLImmediateXm (OGLIXm, OGLIQt_FALLBACK)
OpenGLStoredXm (OGLSXm, OGLSQt_FALLBACK)
OpenGLImmediateX (OGLIX, OGLIQt_FALLBACK, OGLIXm_FALLBACK)
OpenGLStoredX (OGLSX, OGLSQt_FALLBACK, OGLSXm_FALLBACK)
RayTracerX (RayTracerX)
RayTracerX (RTX)
RayTracerQt (RTQt)
Qt3D (Qt3D)
TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK)
TOOLSSG_X11_ZB (TSG_X11_ZB, TSGX11ZB)
TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK)
TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB)
TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG)
TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG, OGL)
TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB)
You may choose a graphics system (driver) with a parameter of
the command "/vis/open" or "/vis/sceneHandler/create",
@@ -193,7 +194,7 @@ Lowest triplet kinetic energy 1 MeV
Enable sampling of gamma linear polarisation 0
5D gamma conversion model type 0
5D gamma conversion model on isolated ion 0
Use Ricardo-Gerardo pair production model 0
Use RiGe 5D e+e- pair production model by muons 0
Livermore data directory epics_2017
=======================================================================
====== Ionisation Parameters ========
@@ -870,7 +871,7 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1
Cr_sctns: NeutronHPInelasticXS: 0 eV ---> 20 MeV
Cr_sctns: G4NeutronInelasticXS: 0 eV ---> 100 TeV
Process: nCapture
Model: NeutronHPCapture: 0 eV ---> 20 MeV
Model: nRadCaptureHP: 0 eV ---> 20 MeV
Model: nRadCapture: 19.9 MeV ---> 100 TeV
Cr_sctns: NeutronHPCaptureXS: 0 eV ---> 100 TeV
Cr_sctns: G4NeutronCaptureXS: 0 eV ---> 100 TeV
@@ -934,6 +935,7 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1
=======================================================================
====== Geant4 Native Pre-compound Model Parameters ========
=======================================================================
Type of pre-compound model 0
Type of pre-compound inverse x-section 1
Pre-compound model active 1
Pre-compound excitation low energy 100 keV
@@ -950,6 +952,7 @@ Use HETC submodel for pre-compound model 0
Type of de-excitation inverse x-section 3
Type of de-excitation factory Evaporation+GEM
Number of de-excitation channels 68
Type of Fermi BreakUp model ModelVI
Min excitation energy 10 eV
Min energy per nucleon for multifragmentation 200 GeV
Limit excitation energy for Fermi BreakUp 20 MeV
@@ -1007,7 +1010,7 @@ Reading AM_organs.dat
Reading OrganMasses.dat
NOrganIDs: 142
Writing output to ICRP110.out
Total energy deposited over all Organs within the Phantom is 1.40721e-09 J
Total absorbed dose over all phantom organs is 3.05384e-09 Gy
Total energy deposited over all Organs within the Phantom is 1.45718e-09 J
Total absorbed dose over all phantom organs is 3.0325e-09 Gy
Graphics systems deleted.
Visualization Manager deleting...
@@ -2,38 +2,38 @@
--------------------------------
OrganID Edep (J) Dose (Gy)
--------------------------------
26 | 3.38183e-10 6.00841e-10
27 | 2.57248e-10 5.7032e-10
39 | 3.75818e-13 4.93717e-12
47 | 4.62163e-12 4.4905e-11
48 | 6.64712e-12 9.03755e-11
61 | 5.26965e-10 3.63424e-10
67 | 3.40238e-20 4.66718e-18
106 | 6.09758e-11 5.00701e-11
116 | 1.32968e-10 1.26817e-10
120 | 2.14719e-11 5.05341e-10
121 | 2.4802e-11 5.83713e-10
122 | 3.29498e-11 1.13097e-10
4 | 7.08775e-13 2.49481e-11
5 | 4.63625e-12 1.5087e-10
26 | 3.53493e-10 6.28042e-10
27 | 2.16199e-10 4.79313e-10
40 | 7.11002e-14 9.62113e-13
61 | 5.71323e-10 3.94016e-10
106 | 9.19666e-11 7.5518e-11
116 | 1.41762e-10 1.35203e-10
120 | 1.5945e-11 3.75266e-10
121 | 2.52925e-11 5.95258e-10
122 | 3.329e-11 1.14265e-10
133 | 2.48777e-12 5.88402e-11
----------------------------------------------------------------------------
-------------------------------ORGAN INFO-----------------------------------
-----------------(of organs where edep/dose was recorded)-------------------
----------------------------------------------------------------------------
ID Organ Name Material ID Density (g/cm^3)
4 Posterior nasal passage down to larynx (ET2) 45 1.030
5 Oral mucosa, tongue 29 1.050
26 Cranium, cortical 2 1.920
27 Cranium, spongiosa 8 1.157
39 Mandible, cortical 2 1.920
47 Cervical spine, cortical 2 1.920
48 Cervical spine, spongiosa 17 1.050
40 Mandible, spongiosa 13 1.228
61 Brain 32 1.050
67 Eye bulb, left 34 1.050
106 Muscle, head 29 1.050
116 Residual tissue, head 49 0.950
120 Salivary glands, left 45 1.030
121 Salivary glands, right 45 1.030
122 Skin, head 27 1.090
133 Tongue (inner part) 29 1.050
Total Edep over all organs = 1.40721e-09 J
Total dose absorbed over all organs = 3.05384e-09 Gy
Total Edep over all organs = 1.45718e-09 J
Total dose absorbed over all organs = 3.0325e-09 Gy
----------------------------------------------------------------------------
----------------ORGAN ENERGY DEPOSITIONS AND ABSORBED DOSE------------------
@@ -42,12 +42,12 @@ Total dose absorbed over all organs = 3.05384e-09 Gy
----------------------------------------------------------------------------
OrganID Edep (J) Dose (Gy)
-------------------------------
0 | 2.66296e-11 0
0 | 1.05008e-10 0
1 | 0 0
2 | 0 0
3 | 0 0
4 | 0 0
5 | 0 0
4 | 7.08775e-13 2.49481e-11
5 | 4.63625e-12 1.5087e-10
6 | 0 0
7 | 0 0
8 | 0 0
@@ -68,8 +68,8 @@ OrganID Edep (J) Dose (Gy)
23 | 0 0
24 | 0 0
25 | 0 0
26 | 3.38183e-10 6.00841e-10
27 | 2.57248e-10 5.7032e-10
26 | 3.53493e-10 6.28042e-10
27 | 2.16199e-10 4.79313e-10
28 | 0 0
29 | 0 0
30 | 0 0
@@ -81,16 +81,16 @@ OrganID Edep (J) Dose (Gy)
36 | 0 0
37 | 0 0
38 | 0 0
39 | 3.75818e-13 4.93717e-12
40 | 0 0
39 | 0 0
40 | 7.11002e-14 9.62113e-13
41 | 0 0
42 | 0 0
43 | 0 0
44 | 0 0
45 | 0 0
46 | 0 0
47 | 4.62163e-12 4.4905e-11
48 | 6.64712e-12 9.03755e-11
47 | 0 0
48 | 0 0
49 | 0 0
50 | 0 0
51 | 0 0
@@ -103,13 +103,13 @@ OrganID Edep (J) Dose (Gy)
58 | 0 0
59 | 0 0
60 | 0 0
61 | 5.26965e-10 3.63424e-10
61 | 5.71323e-10 3.94016e-10
62 | 0 0
63 | 0 0
64 | 0 0
65 | 0 0
66 | 0 0
67 | 3.40238e-20 4.66718e-18
67 | 0 0
68 | 0 0
69 | 0 0
70 | 0 0
@@ -148,7 +148,7 @@ OrganID Edep (J) Dose (Gy)
103 | 0 0
104 | 0 0
105 | 0 0
106 | 6.09758e-11 5.00701e-11
106 | 9.19666e-11 7.5518e-11
107 | 0 0
108 | 0 0
109 | 0 0
@@ -158,13 +158,13 @@ OrganID Edep (J) Dose (Gy)
113 | 0 0
114 | 0 0
115 | 0 0
116 | 1.32968e-10 1.26817e-10
116 | 1.41762e-10 1.35203e-10
117 | 0 0
118 | 0 0
119 | 0 0
120 | 2.14719e-11 5.05341e-10
121 | 2.4802e-11 5.83713e-10
122 | 3.29498e-11 1.13097e-10
120 | 1.5945e-11 3.75266e-10
121 | 2.52925e-11 5.95258e-10
122 | 3.329e-11 1.14265e-10
123 | 0 0
124 | 0 0
125 | 0 0
@@ -175,14 +175,14 @@ OrganID Edep (J) Dose (Gy)
130 | 0 0
131 | 0 0
132 | 0 0
133 | 0 0
133 | 2.48777e-12 5.88402e-11
134 | 0 0
135 | 0 0
136 | 0 0
137 | 0 0
138 | 0 0
139 | 0 0
140 | 2.12997e-14 1.06498e-10
140 | 2.37068e-14 1.18534e-10
141 | 0 0
Total energy depositied over all organs = 1.40721e-09 J
Total absorbed dose over all organs = 3.05384e-09 Gy
Total energy depositied over all organs = 1.45718e-09 J
Total absorbed dose over all organs = 3.0325e-09 Gy
@@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo
**************************************************************
Geant4 version Name: geant4-11-03-patch-02 (25-April-2025)
Geant4 version Name: geant4-11-03-ref-06 (30-June-2025)
Copyright : Geant4 Collaboration
References : NIM A 506 (2003), 250-303
: IEEE-TNS 53 (2006), 270-278
@@ -234,23 +234,24 @@ Registered graphics systems are:
ASCIITree (ATree)
DAWNFILE (DAWNFILE)
G4HepRepFile (HepRepFile)
RayTracer (RayTracer)
RayTracer (RT)
VRML2FILE (VRML2FILE)
gMocrenFile (gMocrenFile)
TOOLSSG_OFFSCREEN (TSG_OFFSCREEN, TSG_FILE)
OpenGLImmediateQt (OGLIQt, OGLI)
OpenGLStoredQt (OGLSQt, OGL, OGLS)
OpenGLStoredQt (OGLSQt, OGLS)
OpenGLImmediateXm (OGLIXm, OGLIQt_FALLBACK)
OpenGLStoredXm (OGLSXm, OGLSQt_FALLBACK)
OpenGLImmediateX (OGLIX, OGLIQt_FALLBACK, OGLIXm_FALLBACK)
OpenGLStoredX (OGLSX, OGLSQt_FALLBACK, OGLSXm_FALLBACK)
RayTracerX (RayTracerX)
RayTracerX (RTX)
RayTracerQt (RTQt)
Qt3D (Qt3D)
TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK)
TOOLSSG_X11_ZB (TSG_X11_ZB, TSGX11ZB)
TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK)
TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB)
TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG)
TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG, OGL)
TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB)
You may choose a graphics system (driver) with a parameter of
the command "/vis/open" or "/vis/sceneHandler/create",
@@ -329,7 +330,7 @@ Lowest triplet kinetic energy 1.00000 MeV
Enable sampling of gamma linear polarisation 0
5D gamma conversion model type 0
5D gamma conversion model on isolated ion 0
Use Ricardo-Gerardo pair production model 0
Use RiGe 5D e+e- pair production model by muons 0
Livermore data directory epics_2017
=======================================================================
====== Ionisation Parameters ========
@@ -1006,7 +1007,7 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1
Cr_sctns: NeutronHPInelasticXS: 0.000000 eV ---> 20.000000 MeV
Cr_sctns: G4NeutronInelasticXS: 0.000000 eV ---> 100.000000 TeV
Process: nCapture
Model: NeutronHPCapture: 0.000000 eV ---> 20.000000 MeV
Model: nRadCaptureHP: 0.000000 eV ---> 20.000000 MeV
Model: nRadCapture: 19.900000 MeV ---> 100.000000 TeV
Cr_sctns: NeutronHPCaptureXS: 0.000000 eV ---> 100.000000 TeV
Cr_sctns: G4NeutronCaptureXS: 0.000000 eV ---> 100.000000 TeV
@@ -1070,6 +1071,7 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1
=======================================================================
====== Geant4 Native Pre-compound Model Parameters ========
=======================================================================
Type of pre-compound model 0
Type of pre-compound inverse x-section 1
Pre-compound model active 1
Pre-compound excitation low energy 100.00000 keV
@@ -1086,6 +1088,7 @@ Use HETC submodel for pre-compound model 0
Type of de-excitation inverse x-section 3
Type of de-excitation factory Evaporation+GEM
Number of de-excitation channels 68
Type of Fermi BreakUp model ModelVI
Min excitation energy 10.00000 eV
Min energy per nucleon for multifragmentation 200.00000 GeV
Limit excitation energy for Fermi BreakUp 20.00000 MeV
@@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo
**************************************************************
Geant4 version Name: geant4-11-03-patch-02 (25-April-2025)
Geant4 version Name: geant4-11-03-ref-06 (30-June-2025)
Copyright : Geant4 Collaboration
References : NIM A 506 (2003), 250-303
: IEEE-TNS 53 (2006), 270-278
@@ -159,14 +159,14 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics
Run terminated.
Run Summary
Number of events processed : 10
User=10.450000s Real=10.453247s Sys=0.000000s
User=10.880000s Real=10.893654s Sys=0.000000s
... write file : SolidTargetCyclotron.root - done
... close file : SolidTargetCyclotron.root - done
G4 kernel has come to Quit state.
Deleting G4Run (id:0)
UserDetectorConstruction deleted 0x9b7020
UserPhysicsList deleted 0x9be580
UserActionInitialization deleted 0xb44ef0
UserDetectorConstruction deleted 0x1f156d0
UserPhysicsList deleted 0x1f1cc30
UserActionInitialization deleted 0x20a43d0
UserWorkerInitialization deleted 0
UserWorkerThreadInitialization deleted 0
UserRunAction deleted.
+19 -18
View File
@@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo
**************************************************************
Geant4 version Name: geant4-11-03-patch-02 (25-April-2025)
Geant4 version Name: geant4-11-03-ref-06 (30-June-2025)
Copyright : Geant4 Collaboration
References : NIM A 506 (2003), 250-303
: IEEE-TNS 53 (2006), 270-278
@@ -156,23 +156,24 @@ Registered graphics systems are:
ASCIITree (ATree)
DAWNFILE (DAWNFILE)
G4HepRepFile (HepRepFile)
RayTracer (RayTracer)
RayTracer (RT)
VRML2FILE (VRML2FILE)
gMocrenFile (gMocrenFile)
TOOLSSG_OFFSCREEN (TSG_OFFSCREEN, TSG_FILE)
OpenGLImmediateQt (OGLIQt, OGLI)
OpenGLStoredQt (OGLSQt, OGL, OGLS)
OpenGLStoredQt (OGLSQt, OGLS)
OpenGLImmediateXm (OGLIXm, OGLIQt_FALLBACK)
OpenGLStoredXm (OGLSXm, OGLSQt_FALLBACK)
OpenGLImmediateX (OGLIX, OGLIQt_FALLBACK, OGLIXm_FALLBACK)
OpenGLStoredX (OGLSX, OGLSQt_FALLBACK, OGLSXm_FALLBACK)
RayTracerX (RayTracerX)
RayTracerX (RTX)
RayTracerQt (RTQt)
Qt3D (Qt3D)
TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK)
TOOLSSG_X11_ZB (TSG_X11_ZB, TSGX11ZB)
TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK)
TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB)
TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG)
TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG, OGL)
TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB)
You may choose a graphics system (driver) with a parameter of
the command "/vis/open" or "/vis/sceneHandler/create",
@@ -298,7 +299,7 @@ Lowest triplet kinetic energy 1 MeV
Enable sampling of gamma linear polarisation 0
5D gamma conversion model type 0
5D gamma conversion model on isolated ion 0
Use Ricardo-Gerardo pair production model 0
Use RiGe 5D e+e- pair production model by muons 0
Livermore data directory epics_2017
=======================================================================
====== Ionisation Parameters ========
@@ -778,8 +779,8 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics
ooo Run 0 starts (global).
--------- Ranlux engine status ---------
Initial seed = 1745424550
float_seed_table[] = 0.0719131 0.622099 0.693342 0.583129 0.453345 0.335303 0.892736 0.113858 0.0750468 0.936936 0.64502 0.915509 0.25001 0.0199363 0.842928 0.117684 0.0681565 0.30302 0.218614 0.764352 0.943045 0.0840406 0.921154 0.242968
Initial seed = 1750481057
float_seed_table[] = 0.944009 0.718055 0.317672 0.319721 0.407741 0.508605 0.478986 0.261606 0.04847 0.625178 0.898724 0.708996 0.939653 0.34942 0.842478 0.972186 0.203706 0.163775 0.328182 0.0692302 0.224796 0.183814 0.152983 0.573314
i_lag = 23, j_lag = 9
carry = 0, count24 = 0
luxury = 3 nskip = 199
@@ -790,15 +791,15 @@ mu- Mono Plane
Run terminated.
Run Summary
Number of events processed : 100
User=0.610000s Real=0.611277s Sys=0.000000s
User=0.600000s Real=0.600162s Sys=0.000000s
### Run 0 (global) ended.
Graphics systems deleted.
Visualization Manager deleting...
G4 kernel has come to Quit state.
Deleting G4Run (id:0)
UserDetectorConstruction deleted 0x15c5f50
UserPhysicsList deleted 0x16070f8
UserActionInitialization deleted 0x179bf60
UserDetectorConstruction deleted 0x925600
UserPhysicsList deleted 0x9667a8
UserActionInitialization deleted 0xafc460
UserWorkerInitialization deleted 0
UserWorkerThreadInitialization deleted 0
UserRunAction deleted.
@@ -808,23 +809,23 @@ G4SDManager deleted.
EventManager deleted.
Units table cleared.
TransportationManager deleted.
Total navigation history collections cleaned: 10
Total navigation history collections cleaned: 9
G4RNGHelper object is deleted.
================== Deleting memory pools ===================
Pool ID '20G4NavigationLevelRep', size : 0.0135 MB
Pool ID '20G4NavigationLevelRep', size : 0.0115 MB
Pool ID '24G4ReferenceCountedHandleIvE', size : 0.000961 MB
Pool ID '17G4DynamicParticle', size : 0.0231 MB
Pool ID '17G4DynamicParticle', size : 0.024 MB
Pool ID '7G4Event', size : 0.000961 MB
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 '7G4Track', size : 0.0461 MB
Pool ID '7G4Track', size : 0.0471 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.00481 MB
Number of memory pools allocated: 12 of which, static: 0
Dynamic pools deleted: 12 / Total memory freed: 0.094 MB
Dynamic pools deleted: 12 / Total memory freed: 0.095 MB
============================================================
G4Allocator objects are deleted.
UImanager deleted.
+5 -5
View File
@@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo
**************************************************************
Geant4 version Name: geant4-11-03-patch-02 (25-April-2025)
Geant4 version Name: geant4-11-03-ref-06 (30-June-2025)
Copyright : Geant4 Collaboration
References : NIM A 506 (2003), 250-303
: IEEE-TNS 53 (2006), 270-278
@@ -199,7 +199,7 @@ N=17 V[N]={906770732717044781, 629165745432651234, 1235682547346241386, 68420008
Run terminated.
Run Summary
Number of events processed : 10000
User=1.710000s Real=1.718713s Sys=0.000000s
User=1.740000s Real=1.742337s Sys=0.000000s
-------------------------------------------------------------
---> The calorimeter is 9 Modules
@@ -326,9 +326,9 @@ N=17 V[N]={2125414173700100552, 2142585805957254368, 76522162894449253, 17841580
---------------------------------------
G4 kernel has come to Quit state.
Deleting G4Run (id:0)
UserDetectorConstruction deleted 0x108b5d0
UserPhysicsList deleted 0x10bf1c0
UserActionInitialization deleted 0x1245c50
UserDetectorConstruction deleted 0x2644c80
UserPhysicsList deleted 0x2678870
UserActionInitialization deleted 0x27ffb70
UserWorkerInitialization deleted 0
UserWorkerThreadInitialization deleted 0
UserRunAction deleted.
+1 -1
View File
@@ -134,7 +134,7 @@ When running in interactive mode there is no scoring mesh.The user has to add it
G4Analysis is used to create and fill histograms in ROOT output files.
The installation of ROOT is required to plot the results of the simulation contained
in primary.root and brachytherapy.root(http://root.cern.ch/drupal/).
in primary.root and brachytherapy.root(http://root.cern/drupal/).
------------------------------------------------------------------------
----> 7. Simulation output
@@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo
**************************************************************
Geant4 version Name: geant4-11-03-patch-02 (25-April-2025)
Geant4 version Name: geant4-11-03-ref-06 (30-June-2025)
Copyright : Geant4 Collaboration
References : NIM A 506 (2003), 250-303
: IEEE-TNS 53 (2006), 270-278
@@ -31,23 +31,24 @@ Registered graphics systems are:
ASCIITree (ATree)
DAWNFILE (DAWNFILE)
G4HepRepFile (HepRepFile)
RayTracer (RayTracer)
RayTracer (RT)
VRML2FILE (VRML2FILE)
gMocrenFile (gMocrenFile)
TOOLSSG_OFFSCREEN (TSG_OFFSCREEN, TSG_FILE)
OpenGLImmediateQt (OGLIQt, OGLI)
OpenGLStoredQt (OGLSQt, OGL, OGLS)
OpenGLStoredQt (OGLSQt, OGLS)
OpenGLImmediateXm (OGLIXm, OGLIQt_FALLBACK)
OpenGLStoredXm (OGLSXm, OGLSQt_FALLBACK)
OpenGLImmediateX (OGLIX, OGLIQt_FALLBACK, OGLIXm_FALLBACK)
OpenGLStoredX (OGLSX, OGLSQt_FALLBACK, OGLSXm_FALLBACK)
RayTracerX (RayTracerX)
RayTracerX (RTX)
RayTracerQt (RTQt)
Qt3D (Qt3D)
TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK)
TOOLSSG_X11_ZB (TSG_X11_ZB, TSGX11ZB)
TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK)
TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB)
TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG)
TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG, OGL)
TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB)
You may choose a graphics system (driver) with a parameter of
the command "/vis/open" or "/vis/sceneHandler/create",
@@ -286,7 +287,7 @@ Lowest triplet kinetic energy 1 MeV
Enable sampling of gamma linear polarisation 0
5D gamma conversion model type 0
5D gamma conversion model on isolated ion 0
Use Ricardo-Gerardo pair production model 0
Use RiGe 5D e+e- pair production model by muons 0
Livermore data directory epics_2017
=======================================================================
====== Ionisation Parameters ========
@@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo
**************************************************************
Geant4 version Name: geant4-11-03-patch-02 (25-April-2025)
Geant4 version Name: geant4-11-03-ref-06 (30-June-2025)
Copyright : Geant4 Collaboration
References : NIM A 506 (2003), 250-303
: IEEE-TNS 53 (2006), 270-278
@@ -127,7 +127,7 @@ Lowest triplet kinetic energy 1 MeV
Enable sampling of gamma linear polarisation 0
5D gamma conversion model type 0
5D gamma conversion model on isolated ion 0
Use Ricardo-Gerardo pair production model 0
Use RiGe 5D e+e- pair production model by muons 0
Livermore data directory epics_2017
=======================================================================
====== Ionisation Parameters ========
@@ -780,6 +780,7 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1
=======================================================================
====== Geant4 Native Pre-compound Model Parameters ========
=======================================================================
Type of pre-compound model 0
Type of pre-compound inverse x-section 1
Pre-compound model active 1
Pre-compound excitation low energy 100 keV
@@ -796,6 +797,7 @@ Use HETC submodel for pre-compound model 0
Type of de-excitation inverse x-section 3
Type of de-excitation factory Evaporation+GEM
Number of de-excitation channels 68
Type of Fermi BreakUp model ModelVI
Min excitation energy 10 eV
Min energy per nucleon for multifragmentation 200 GeV
Limit excitation energy for Fermi BreakUp 20 MeV
@@ -957,15 +959,15 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics
Run terminated.
Run Summary
Number of events processed : 20
User=7.050000s Real=7.069787s Sys=0.000000s
User=7.560000s Real=7.562846s Sys=0.010000s
### Run 0 end.
... write file : ccal.root - done
... close file : ccal.root - done
G4 kernel has come to Quit state.
Deleting G4Run (id:0)
UserDetectorConstruction deleted 0xba44f0
UserPhysicsList deleted 0xba56b0
UserActionInitialization deleted 0xd60db0
UserDetectorConstruction deleted 0x1aa9ba0
UserPhysicsList deleted 0x1aaad60
UserActionInitialization deleted 0x1c66e60
UserWorkerInitialization deleted 0
UserWorkerThreadInitialization deleted 0
UserRunAction deleted.
@@ -976,24 +978,24 @@ G4SDManager deleted.
EventManager deleted.
Units table cleared.
TransportationManager deleted.
Total navigation history collections cleaned: 56
Total navigation history collections cleaned: 49
G4RNGHelper object is deleted.
================== Deleting memory pools ===================
Pool ID '20G4NavigationLevelRep', size : 0.0798 MB
Pool ID '20G4NavigationLevelRep', size : 0.0721 MB
Pool ID '24G4ReferenceCountedHandleIvE', size : 0.000961 MB
Pool ID '17G4DynamicParticle', size : 0.0461 MB
Pool ID '17G4DynamicParticle', size : 0.0798 MB
Pool ID '7G4Event', size : 0.000961 MB
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 '7G4Track', size : 0.0913 MB
Pool ID '18G4TouchableHistory', size : 0.00673 MB
Pool ID '7G4Track', size : 0.159 MB
Pool ID '18G4TouchableHistory', size : 0.00577 MB
Pool ID '15G4CountedObjectIvE', size : 0.000961 MB
Pool ID '17G4ReactionProduct', size : 0.0135 MB
Pool ID '10G4Fragment', size : 0.00481 MB
Pool ID '17G4ReactionProduct', size : 0.0173 MB
Pool ID '10G4Fragment', size : 0.00673 MB
Number of memory pools allocated: 13 of which, static: 0
Dynamic pools deleted: 13 / Total memory freed: 0.25 MB
Dynamic pools deleted: 13 / Total memory freed: 0.35 MB
============================================================
G4Allocator objects are deleted.
UImanager deleted.
@@ -96,21 +96,7 @@ which is commented by default.
\section cellularPhantom_s6 SIMULATION OUTPUT AND RESULT ANALYSIS
The output results consists in a phantom.root file, containing three ntuples,
corresponding to the 3 types of voxels (red, green and blue) of the original image.
The ROOT macro plot.C can be run to extract and display:
- the cellular phantom
- the absorbed energy distribution in the 3 types of voxels
- the absorbed energy 2D map for the 3 types of voxels
- the absorbed dose 2D map for the 3 types of voxels
Simply do, after the simulation:
\verbatim
root plot.C
\endverbatim
In addition, the following quantities are displayed:
The following results are displayed at the end of the simulation:
- total number of voxels in phantom
- total number of RED voxels in phantom
- total number of GREEN voxels in phantom
@@ -122,6 +108,23 @@ In addition, the following quantities are displayed:
- total absorbed dose in GREEN voxels (Gy)
- total absorbed dose in BLUE voxels (Gy)
Results are stored in the results.root file.
A phantom.root result file contain three ntuples,
corresponding to the 3 types of voxels (red, green and blue) of the original image.
The following voxel information is available in these ntuples:
- x, y, z position
- energy deposition
- absorbed dose
- voxel number (ID)
The ROOT macro plot.C can be run to display:
- the cellular phantom
- the absorbed energy distribution in the 3 types of voxels
- the absorbed energy 2D map for the 3 types of voxels
- the absorbed dose 2D map for the 3 types of voxels
Simply do, after the simulation:
\verbatim
root plot.C
\endverbatim
*/
@@ -1,5 +1,13 @@
# Example cellularPhantom History
## 2025-01-25 S. Incerti (cellularPhantom-V11-03-01)
- Reorganized the whole code by introducing Run class
- Simplified analysis of results (plot.C ROOT macro)
- Updated README
## 2025-01-03 S. Incerti (cellularPhantom-V11-03-00)
- Additional affiliation in headers and README
## 2024-10-28 S. Incerti (cellularPhantom-V11-02-01)
- Updated README
+17 -14
View File
@@ -95,19 +95,7 @@ which is commented by default.
---->5. SIMULATION OUTPUT AND RESULT ANALYSIS
The output results consists in a phantom.root file, containing three ntuples,
corresponding to the 3 types of voxels (red, green and blue) of the original image.
The ROOT macro plot.C can be run to extract and display:
- the cellular phantom
- the absorbed energy distribution in the 3 types of voxels
- the absorbed energy 2D map for the 3 types of voxels
- the absorbed dose 2D map for the 3 types of voxels
Simply do, after the simulation:
root plot.C
In addition, the following quantities are displayed:
The following results are displayed at the end of the simulation:
- total number of voxels in phantom
- total number of RED voxels in phantom
- total number of GREEN voxels in phantom
@@ -119,4 +107,19 @@ In addition, the following quantities are displayed:
- total absorbed dose in GREEN voxels (Gy)
- total absorbed dose in BLUE voxels (Gy)
Results are stored in the results.root file.
A phantom.root result file contain three ntuples,
corresponding to the 3 types of voxels (red, green and blue) of the original image.
The following voxel information is available in these ntuples:
- x, y, z position
- energy deposition
- absorbed dose
- voxel number (ID)
The ROOT macro plot.C can be run to display:
- the cellular phantom
- the absorbed energy distribution in the 3 types of voxels
- the absorbed energy 2D map for the 3 types of voxels
- the absorbed dose 2D map for the 3 types of voxels
Simply do, after the simulation:
root plot.C
@@ -23,13 +23,14 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// MONTE CARLO SIMULATION OF REALISTIC GEOMETRY FROM MICROSCOPES IMAGES
//
// Authors and contributors:
// P. Barberet, S. Incerti, N. H. Tran, L. Morelli
// P. Barberet (a), S. Incerti (a), N. H. Tran (a), L. Morelli (a,b)
//
// University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// a) University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// b) Politecnico di Milano, Italy
//
// If you use this code, please cite the following publication:
// P. Barberet et al.,
@@ -37,7 +38,7 @@
// geometry exposed to alpha particles."
// Ph. Barberet et al 2012 Phys. Med. Biol. 57 2189
// doi: 110.1088/0031-9155/57/8/2189
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
#include "G4RunManagerFactory.hh"
#include "G4UIExecutive.hh"
@@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo
**************************************************************
Geant4 version Name: geant4-11-03-patch-02 (25-April-2025)
Geant4 version Name: geant4-11-03-ref-06 (30-June-2025)
Copyright : Geant4 Collaboration
References : NIM A 506 (2003), 250-303
: IEEE-TNS 53 (2006), 270-278
@@ -28,23 +28,24 @@ Registered graphics systems are:
ASCIITree (ATree)
DAWNFILE (DAWNFILE)
G4HepRepFile (HepRepFile)
RayTracer (RayTracer)
RayTracer (RT)
VRML2FILE (VRML2FILE)
gMocrenFile (gMocrenFile)
TOOLSSG_OFFSCREEN (TSG_OFFSCREEN, TSG_FILE)
OpenGLImmediateQt (OGLIQt, OGLI)
OpenGLStoredQt (OGLSQt, OGL, OGLS)
OpenGLStoredQt (OGLSQt, OGLS)
OpenGLImmediateXm (OGLIXm, OGLIQt_FALLBACK)
OpenGLStoredXm (OGLSXm, OGLSQt_FALLBACK)
OpenGLImmediateX (OGLIX, OGLIQt_FALLBACK, OGLIXm_FALLBACK)
OpenGLStoredX (OGLSX, OGLSQt_FALLBACK, OGLSXm_FALLBACK)
RayTracerX (RayTracerX)
RayTracerX (RTX)
RayTracerQt (RTQt)
Qt3D (Qt3D)
TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK)
TOOLSSG_X11_ZB (TSG_X11_ZB, TSGX11ZB)
TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK)
TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB)
TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG)
TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG, OGL)
TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB)
You may choose a graphics system (driver) with a parameter of
the command "/vis/open" or "/vis/sceneHandler/create",
@@ -160,7 +161,7 @@ Lowest triplet kinetic energy 1 MeV
Enable sampling of gamma linear polarisation 0
5D gamma conversion model type 0
5D gamma conversion model on isolated ion 0
Use Ricardo-Gerardo pair production model 0
Use RiGe 5D e+e- pair production model by muons 0
Livermore data directory epics_2017
=======================================================================
====== Ionisation Parameters ========
@@ -633,15 +634,6 @@ Index : 1 used in the geometry : Yes
==================================================================
### Run 0 starts.
-------- WWWW ------- G4Exception-START -------- WWWW -------
*** G4Exception : Analysis_W001
issued by : G4RootNtupleFileManager::SetNtupleMergingMode
Merging ntuples is not applicable in sequential application.
Setting was ignored.
*** This is just a warning message. ***
-------- WWWW -------- G4Exception-END --------- WWWW -------
--> Event 0 starts.
--> Event 100 starts.
--> Event 200 starts.
@@ -745,7 +737,24 @@ Setting was ignored.
Run terminated.
Run Summary
Number of events processed : 10000
User=13.710000s Real=13.788261s Sys=0.000000s
User=13.730000s Real=13.739353s Sys=0.000000s
- Summary --------------------------------------------------
Total number of voxels in phantom = 54300
Total number of RED voxels in phantom = 20230
Total number of GREEN voxels in phantom = 17320
Total number of BLUE voxels in phantom = 16750
Total absorbed energy in RED voxels (MeV) = 83.1248
Total absorbed energy in GREEN voxels (MeV) = 71.1454
Total absorbed energy in BLUE voxels (MeV) = 66.8004
Total absorbed dose in RED voxels (Gy) = 0.0397526
Total absorbed dose in GREEN voxels (Gy) = 0.0397402
Total absorbed dose in BLUE voxels (Gy) = 0.038583
------------------------------------------------------------
Graphics systems deleted.
Visualization Manager deleting...
================== Deleting memory pools ===================
@@ -23,13 +23,14 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// MONTE CARLO SIMULATION OF REALISTIC GEOMETRY FROM MICROSCOPES IMAGES
//
// Authors and contributors:
// P. Barberet, S. Incerti, N. H. Tran, L. Morelli
// P. Barberet (a), S. Incerti (a), N. H. Tran (a), L. Morelli (a,b)
//
// University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// a) University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// b) Politecnico di Milano, Italy
//
// If you use this code, please cite the following publication:
// P. Barberet et al.,
@@ -37,7 +38,7 @@
// geometry exposed to alpha particles."
// Ph. Barberet et al 2012 Phys. Med. Biol. 57 2189
// doi: 110.1088/0031-9155/57/8/2189
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
#ifndef ActionInitialization_h
#define ActionInitialization_h 1
@@ -23,13 +23,14 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// MONTE CARLO SIMULATION OF REALISTIC GEOMETRY FROM MICROSCOPES IMAGES
//
// Authors and contributors:
// P. Barberet, S. Incerti, N. H. Tran, L. Morelli
// P. Barberet (a), S. Incerti (a), N. H. Tran (a), L. Morelli (a,b)
//
// University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// a) University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// b) Politecnico di Milano, Italy
//
// If you use this code, please cite the following publication:
// P. Barberet et al.,
@@ -37,7 +38,7 @@
// geometry exposed to alpha particles."
// Ph. Barberet et al 2012 Phys. Med. Biol. 57 2189
// doi: 110.1088/0031-9155/57/8/2189
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
#ifndef CellParameterisation_H
#define CellParameterisation_H 1
@@ -82,8 +83,8 @@ class CellParameterisation : public G4VPVParameterisation
inline auto GetGreenMass() const { return fGreenMass; }
inline auto GetBlueMass() const { return fBlueMass; }
inline auto GetVoxelThreeVector(G4int i) const { return fMapCell[i]; }
inline auto GetVoxelThreeVectorPixel(G4int i) const { return fMapCellPxl[i]; }
//inline auto GetVoxelThreeVector(G4int i) const { return fMapCell[i]; }
//inline auto GetVoxelThreeVectorPixel(G4int i) const { return fMapCellPxl[i]; }
inline auto GetVoxelThreeVectorOriginal(G4int i) const { return fMapCellOriginal[i]; }
inline auto GetMaterial(G4int i) const { return fMaterial[i]; }
@@ -23,13 +23,14 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// MONTE CARLO SIMULATION OF REALISTIC GEOMETRY FROM MICROSCOPES IMAGES
//
// Authors and contributors:
// P. Barberet, S. Incerti, N. H. Tran, L. Morelli
// P. Barberet (a), S. Incerti (a), N. H. Tran (a), L. Morelli (a,b)
//
// University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// a) University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// b) Politecnico di Milano, Italy
//
// If you use this code, please cite the following publication:
// P. Barberet et al.,
@@ -37,7 +38,7 @@
// geometry exposed to alpha particles."
// Ph. Barberet et al 2012 Phys. Med. Biol. 57 2189
// doi: 110.1088/0031-9155/57/8/2189
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
#ifndef DetectorConstruction_h
#define DetectorConstruction_h 1
@@ -23,13 +23,14 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// MONTE CARLO SIMULATION OF REALISTIC GEOMETRY FROM MICROSCOPES IMAGES
//
// Authors and contributors:
// P. Barberet, S. Incerti, N. H. Tran, L. Morelli
// P. Barberet (a), S. Incerti (a), N. H. Tran (a), L. Morelli (a,b)
//
// University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// a) University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// b) Politecnico di Milano, Italy
//
// If you use this code, please cite the following publication:
// P. Barberet et al.,
@@ -37,7 +38,7 @@
// geometry exposed to alpha particles."
// Ph. Barberet et al 2012 Phys. Med. Biol. 57 2189
// doi: 110.1088/0031-9155/57/8/2189
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
#ifndef DetectorMessenger_h
#define DetectorMessenger_h 1
@@ -23,13 +23,14 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// MONTE CARLO SIMULATION OF REALISTIC GEOMETRY FROM MICROSCOPES IMAGES
//
// Authors and contributors:
// P. Barberet, S. Incerti, N. H. Tran, L. Morelli
// P. Barberet (a), S. Incerti (a), N. H. Tran (a), L. Morelli (a,b)
//
// University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// a) University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// b) Politecnico di Milano, Italy
//
// If you use this code, please cite the following publication:
// P. Barberet et al.,
@@ -37,7 +38,7 @@
// geometry exposed to alpha particles."
// Ph. Barberet et al 2012 Phys. Med. Biol. 57 2189
// doi: 110.1088/0031-9155/57/8/2189
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
#ifndef EventAction_h
#define EventAction_h 1
@@ -23,13 +23,14 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// MONTE CARLO SIMULATION OF REALISTIC GEOMETRY FROM MICROSCOPES IMAGES
//
// Authors and contributors:
// P. Barberet, S. Incerti, N. H. Tran, L. Morelli
// P. Barberet (a), S. Incerti (a), N. H. Tran (a), L. Morelli (a,b)
//
// University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// a) University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// b) Politecnico di Milano, Italy
//
// If you use this code, please cite the following publication:
// P. Barberet et al.,
@@ -37,7 +38,7 @@
// geometry exposed to alpha particles."
// Ph. Barberet et al 2012 Phys. Med. Biol. 57 2189
// doi: 110.1088/0031-9155/57/8/2189
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
#ifndef PhysicsList_h
#define PhysicsList_h 1
@@ -54,8 +55,6 @@ class PhysicsList: public G4VModularPhysicsList
~PhysicsList() override;
void SetCuts() override;
private:
};
#endif
@@ -23,13 +23,14 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// MONTE CARLO SIMULATION OF REALISTIC GEOMETRY FROM MICROSCOPES IMAGES
//
// Authors and contributors:
// P. Barberet, S. Incerti, N. H. Tran, L. Morelli
// P. Barberet (a), S. Incerti (a), N. H. Tran (a), L. Morelli (a,b)
//
// University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// a) University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// b) Politecnico di Milano, Italy
//
// If you use this code, please cite the following publication:
// P. Barberet et al.,
@@ -37,7 +38,7 @@
// geometry exposed to alpha particles."
// Ph. Barberet et al 2012 Phys. Med. Biol. 57 2189
// doi: 110.1088/0031-9155/57/8/2189
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
#ifndef PrimaryGeneratorAction_h
#define PrimaryGeneratorAction_h 1
@@ -0,0 +1,71 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
// -----------------------------------------------------------------------------
// MONTE CARLO SIMULATION OF REALISTIC GEOMETRY FROM MICROSCOPES IMAGES
//
// Authors and contributors:
// P. Barberet (a), S. Incerti (a), N. H. Tran (a), L. Morelli (a,b)
//
// a) University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// b) Politecnico di Milano, Italy
//
// If you use this code, please cite the following publication:
// P. Barberet et al.,
// "Monte-Carlo dosimetry on a realistic cell monolayer
// geometry exposed to alpha particles."
// Ph. Barberet et al 2012 Phys. Med. Biol. 57 2189
// doi: 110.1088/0031-9155/57/8/2189
// -----------------------------------------------------------------------------
#ifndef Run_h
#define Run_h 1
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#include "DetectorConstruction.hh"
#include "G4Run.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
class Run : public G4Run
{
public:
Run();
~Run();
void AddVoxelEdeposit(G4int i, G4double e) { fVoxelEdeposit[i] += e; }
inline G4double GetVoxelEdeposit(G4int i) const { return fVoxelEdeposit[i]; }
void Merge(const G4Run*) override;
void EndOfRun();
private:
G4double * fVoxelEdeposit = nullptr;
const CellParameterisation * fMyPhantomParam = nullptr;
};
#endif
@@ -23,13 +23,14 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// MONTE CARLO SIMULATION OF REALISTIC GEOMETRY FROM MICROSCOPES IMAGES
//
// Authors and contributors:
// P. Barberet, S. Incerti, N. H. Tran, L. Morelli
// P. Barberet (a), S. Incerti (a), N. H. Tran (a), L. Morelli (a,b)
//
// University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// a) University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// b) Politecnico di Milano, Italy
//
// If you use this code, please cite the following publication:
// P. Barberet et al.,
@@ -37,12 +38,12 @@
// geometry exposed to alpha particles."
// Ph. Barberet et al 2012 Phys. Med. Biol. 57 2189
// doi: 110.1088/0031-9155/57/8/2189
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
#ifndef RunAction_h
#define RunAction_h 1
#include "DetectorConstruction.hh"
#include "Run.hh"
#include "G4UserRunAction.hh"
#include "G4AnalysisManager.hh"
@@ -59,14 +60,12 @@ class RunAction : public G4UserRunAction
void BeginOfRunAction(const G4Run*) override;
void EndOfRunAction(const G4Run*) override;
void AddDoseBox(G4int i, G4double x) {fVoxelEnergy[i] +=x;}
G4double GetDoseBox(G4int i) {return fVoxelEnergy[i];}
G4Run* GenerateRun() override;
private:
const CellParameterisation * fMyPhantomParam = nullptr;
G4double * fVoxelEnergy = nullptr;
G4int fNbVoxels = 0;
Run* fRun;
};
#endif
@@ -23,13 +23,14 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// MONTE CARLO SIMULATION OF REALISTIC GEOMETRY FROM MICROSCOPES IMAGES
//
// Authors and contributors:
// P. Barberet, S. Incerti, N. H. Tran, L. Morelli
// P. Barberet (a), S. Incerti (a), N. H. Tran (a), L. Morelli (a,b)
//
// University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// a) University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// b) Politecnico di Milano, Italy
//
// If you use this code, please cite the following publication:
// P. Barberet et al.,
@@ -37,12 +38,12 @@
// geometry exposed to alpha particles."
// Ph. Barberet et al 2012 Phys. Med. Biol. 57 2189
// doi: 110.1088/0031-9155/57/8/2189
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
#ifndef SteppingAction_h
#define SteppingAction_h 1
#include "RunAction.hh"
#include "CellParameterisation.hh"
#include "G4UserSteppingAction.hh"
@@ -51,13 +52,12 @@
class SteppingAction : public G4UserSteppingAction
{
public:
explicit SteppingAction(RunAction*);
explicit SteppingAction();
~SteppingAction() override = default;
void UserSteppingAction(const G4Step*) override;
private:
RunAction* fRunAction = nullptr;
const CellParameterisation * fMyPhantomParam = nullptr;
};
+10 -198
View File
@@ -5,7 +5,7 @@
// To execute this macro under ROOT,
// 1 - launch ROOT (usually type 'root' at your machine's prompt)
// 2 - type '.X plot.C' at the ROOT session prompt
// Written by S. Incerti, 10/09/2024
// Written by S. Incerti, 25/01/2025
// *********************************************************************
{
gROOT->Reset();
@@ -124,10 +124,6 @@ htempTer->SetTitle("RGB phantom XZ view");
// Read ROOT file
//------------------
// IF no merging active in simulation
//system ("rm -rf phantom.root");
//system ("hadd -O phantom.root phantom_t*.root");
TFile *f = new TFile ("phantom.root");
TNtuple* ntuple1;
@@ -138,66 +134,8 @@ ntuple1 = (TNtuple*)f->Get("ntuple1");
ntuple2 = (TNtuple*)f->Get("ntuple2");
ntuple3 = (TNtuple*)f->Get("ntuple3");
//----------------------
// Sum of ntuples
//----------------------
Double_t * tabVoxelXRed = new Double_t [numberVoxTot];
Double_t * tabVoxelXGreen = new Double_t [numberVoxTot];
Double_t * tabVoxelXBlue = new Double_t [numberVoxTot];
Double_t * tabVoxelYRed = new Double_t [numberVoxTot];
Double_t * tabVoxelYGreen = new Double_t [numberVoxTot];
Double_t * tabVoxelYBlue = new Double_t [numberVoxTot];
Double_t * tabVoxelZRed = new Double_t [numberVoxTot];
Double_t * tabVoxelZGreen = new Double_t [numberVoxTot];
Double_t * tabVoxelZBlue = new Double_t [numberVoxTot];
Double_t * tabVoxelEnergyRed = new Double_t [numberVoxTot];
Double_t * tabVoxelEnergyGreen = new Double_t [numberVoxTot];
Double_t * tabVoxelEnergyBlue = new Double_t [numberVoxTot];
Double_t * tabVoxelDoseRed = new Double_t [numberVoxTot];
Double_t * tabVoxelDoseGreen = new Double_t [numberVoxTot];
Double_t * tabVoxelDoseBlue = new Double_t [numberVoxTot];
// Initialisation of the arrays
for (Int_t i = 0; i < numberVoxRed; i++)
{
tabVoxelXRed[i] = 0;
tabVoxelYRed[i] = 0;
tabVoxelZRed[i] = 0;
tabVoxelEnergyRed[i] = 0;
tabVoxelDoseRed[i] = 0;
}
for (Int_t i = 0; i < numberVoxGreen; i++)
{
tabVoxelXGreen[i] = 0;
tabVoxelYGreen[i] = 0;
tabVoxelZGreen[i] = 0;
tabVoxelEnergyGreen[i] = 0;
tabVoxelDoseGreen[i] = 0;
}
for (Int_t i = 0; i < numberVoxBlue; i++)
{
tabVoxelXBlue[i] = 0;
tabVoxelYBlue[i] = 0;
tabVoxelZBlue[i] = 0;
tabVoxelEnergyBlue[i] = 0;
tabVoxelDoseBlue[i] = 0;
}
Double_t x, y, z, energy, dose;
Int_t voxelID;
Double_t nrjRed=0.;
Double_t nrjGreen=0.;
Double_t nrjBlue=0.;
Double_t doseRed=0.;
Double_t doseGreen=0.;
Double_t doseBlue=0.;
//
ntuple1->SetBranchAddress("x",&x);
ntuple1->SetBranchAddress("y",&y);
@@ -206,32 +144,6 @@ ntuple1->SetBranchAddress("energy",&energy);
ntuple1->SetBranchAddress("dose",&dose);
ntuple1->SetBranchAddress("voxelID",&voxelID);
// RED
Long_t nentriesRed = (Long_t)ntuple1->GetEntries();
for (Long_t i=0;i<nentriesRed;i++)
{
x=0;
y=0;
z=0;
energy=0;
dose=0;
voxelID=0;
ntuple1->GetEntry(i);
if (energy > 0)
{
nrjRed=nrjRed+energy;
doseRed=doseRed+dose;
tabVoxelXRed[voxelID] = x;
tabVoxelYRed[voxelID] = y;
tabVoxelZRed[voxelID] = z;
tabVoxelEnergyRed[voxelID] = tabVoxelEnergyRed[voxelID] + energy;
tabVoxelDoseRed[voxelID] = tabVoxelDoseRed[voxelID] + dose;
}
}
ntuple2->SetBranchAddress("x",&x);
ntuple2->SetBranchAddress("y",&y);
ntuple2->SetBranchAddress("z",&z);
@@ -239,34 +151,6 @@ ntuple2->SetBranchAddress("energy",&energy);
ntuple2->SetBranchAddress("dose",&dose);
ntuple2->SetBranchAddress("voxelID",&voxelID);
// GREEN
Long_t nentriesGreen = (Long_t)ntuple2->GetEntries();
for (Long_t i=0;i<nentriesGreen;i++)
{
x=0;
y=0;
z=0;
energy=0;
dose=0;
voxelID=0;
ntuple2->GetEntry(i);
if (energy > 0)
{
nrjGreen=nrjGreen+energy;
doseGreen=doseGreen+dose;
tabVoxelXGreen[voxelID] = x;
tabVoxelYGreen[voxelID] = y;
tabVoxelZGreen[voxelID] = z;
tabVoxelEnergyGreen[voxelID] = tabVoxelEnergyGreen[voxelID] + energy;
tabVoxelDoseGreen[voxelID] = tabVoxelDoseGreen[voxelID] + dose;
}
}
// BLUE
ntuple3->SetBranchAddress("x",&x);
ntuple3->SetBranchAddress("y",&y);
ntuple3->SetBranchAddress("z",&z);
@@ -274,60 +158,13 @@ ntuple3->SetBranchAddress("energy",&energy);
ntuple3->SetBranchAddress("dose",&dose);
ntuple3->SetBranchAddress("voxelID",&voxelID);
Long_t nentriesBlue = (Long_t)ntuple3->GetEntries();
for (Long_t i=0;i<nentriesBlue;i++)
{
x=0;
y=0;
z=0;
energy=0;
dose=0;
voxelID=0;
ntuple3->GetEntry(i);
if (energy > 0)
{
nrjBlue=nrjBlue+energy;
doseBlue=doseBlue+dose;
tabVoxelXBlue[voxelID] = x;
tabVoxelYBlue[voxelID] = y;
tabVoxelZBlue[voxelID] = z;
tabVoxelEnergyBlue[voxelID] = tabVoxelEnergyBlue[voxelID] + energy;
tabVoxelDoseBlue[voxelID] = tabVoxelDoseBlue[voxelID] + dose;
}
}
// To liberate memory
f->Close();
TFile *f2 = new TFile ("results.root","RECREATE");
//
TNtuple *ntupleRED = new TNtuple ("RED","RED","x:y:z:energy:dose");
TNtuple *ntupleGREEN = new TNtuple ("GREEN","GREEN","x:y:z:energy:dose");
TNtuple *ntupleBLUE = new TNtuple ("BLUE","BLUE","x:y:z:energy:dose");
// Global sums
for (Int_t i = 0; i < numberVoxTot; i++)
{
ntupleRED->Fill(tabVoxelXRed[i],tabVoxelYRed[i],tabVoxelZRed[i],tabVoxelEnergyRed[i],tabVoxelDoseRed[i]);
}
for (Int_t i = 0; i < numberVoxTot; i++)
{
ntupleGREEN->Fill(tabVoxelXGreen[i],tabVoxelYGreen[i],tabVoxelZGreen[i],tabVoxelEnergyGreen[i],tabVoxelDoseGreen[i]);
}
for (Int_t i = 0; i < numberVoxTot; i++)
{
ntupleBLUE->Fill(tabVoxelXBlue[i],tabVoxelYBlue[i],tabVoxelZBlue[i],tabVoxelEnergyBlue[i],tabVoxelDoseBlue[i]);
}
//---------------------------------
// Absorbed energy distributions
//---------------------------------
c1->cd(2);
gPad->SetLogy();
ntupleRED->Draw("energy","energy>0");
ntuple1->Draw("energy","energy>0");
TH1F *htemp2 = (TH1F*)gPad->GetPrimitive("htemp");
htemp2->GetXaxis()->SetTitle("Energy (keV)");
htemp2->GetXaxis()->SetLabelSize(0.025);
@@ -339,7 +176,7 @@ htemp2->SetFillColor(2);
c1->cd(6);
gPad->SetLogy();
ntupleGREEN->Draw("energy","energy>0");
ntuple2->Draw("energy","energy>0");
TH1F *htemp3 = (TH1F*)gPad->GetPrimitive("htemp");
htemp3->GetXaxis()->SetTitle("Energy (keV)");
htemp3->GetXaxis()->SetLabelSize(0.025);
@@ -351,7 +188,7 @@ htemp3->SetFillColor(3);
c1->cd(10);
gPad->SetLogy();
ntupleBLUE->Draw("energy","energy>0");
ntuple3->Draw("energy","energy>0");
TH1F *htemp4 = (TH1F*)gPad->GetPrimitive("htemp");
htemp4->GetXaxis()->SetTitle("Energy (keV)");
htemp4->GetXaxis()->SetLabelSize(0.025);
@@ -367,7 +204,7 @@ htemp4->SetFillColor(4);
c1->cd(3);
TH2F *histNrjRed = new TH2F("histNrjRed","histNrjRed",100,0,800,100,0,800);
ntupleRED->Draw("y:x>>histNrjRed","energy","contz");
ntuple1->Draw("y:x>>histNrjRed","energy","contz");
gPad->SetLogz();
histNrjRed->Draw("contz");
histNrjRed->GetXaxis()->SetTitle("X (microns)");
@@ -386,7 +223,7 @@ histNrjRed->SetTitle("Energy map for RED voxels");
c1->cd(7);
TH2F *histNrjGreen = new TH2F("histNrjGreen","histNrjGreen",100,0,800,100,0,800);
ntupleGREEN->Draw("y:x>>histNrjGreen","energy","contz");
ntuple2->Draw("y:x>>histNrjGreen","energy","contz");
gPad->SetLogz();
histNrjGreen->Draw("contz");
histNrjGreen->GetXaxis()->SetTitle("X (microns)");
@@ -405,7 +242,7 @@ histNrjGreen->SetTitle("Energy map for GREEN voxels");
c1->cd(11);
TH2F *histNrjBlue = new TH2F("histNrjBlue","histNrjBlue",100,0,800,100,0,800);
ntupleBLUE->Draw("y:x>>histNrjBlue","energy","contz");
ntuple3->Draw("y:x>>histNrjBlue","energy","contz");
gPad->SetLogz();
histNrjBlue->Draw("contz");
histNrjBlue->GetXaxis()->SetTitle("X (microns)");
@@ -429,7 +266,7 @@ histNrjBlue->SetTitle("Energy map for BLUE voxels");
c1->cd(4);
TH2F *histDoseRed = new TH2F("histDoseRed","histDoseRed",100,0,800,100,0,800);
// WARNING : dose scaling to mGy
ntupleRED->Draw("y:x>>histDoseRed","dose/1000","contz");
ntuple1->Draw("y:x>>histDoseRed","dose/1000","contz");
//gPad->SetLogz();
histDoseRed->Draw("contz");
histDoseRed->GetXaxis()->SetTitle("X (microns)");
@@ -449,7 +286,7 @@ histDoseRed->SetTitle("Dose map for RED voxels");
c1->cd(8);
TH2F *histDoseGreen = new TH2F("histDoseGreen","histDoseGreen",100,0,800,100,0,800);
// WARNING : dose scaling to mGy
ntupleGREEN->Draw("y:x>>histDoseGreen","dose/1000","contz");
ntuple2->Draw("y:x>>histDoseGreen","dose/1000","contz");
//gPad->SetLogz();
histDoseGreen->Draw("contz");
histDoseGreen->GetXaxis()->SetTitle("X (microns)");
@@ -469,7 +306,7 @@ histDoseGreen->SetTitle("Dose map for GREEN voxels");
c1->cd(12);
TH2F *histDoseBlue = new TH2F("histDoseBlue","histDoseBlue",100,0,800,100,0,800);
// WARNING : dose scaling to mGy
ntupleBLUE->Draw("y:x>>histDoseBlue","dose/1000","contz");
ntuple3->Draw("y:x>>histDoseBlue","dose/1000","contz");
//gPad->SetLogz();
histDoseBlue->Draw("contz");
histDoseBlue->GetXaxis()->SetTitle("X (microns)");
@@ -486,29 +323,4 @@ histDoseBlue->GetYaxis()->SetTitleOffset(1.4);
histDoseBlue->GetZaxis()->SetTitleOffset(.6);
histDoseBlue->SetTitle("Dose map for BLUE voxels");
//----------------------------
// SUMMARY
//----------------------------
cout << endl;
cout << "- Summary --------------------------------------------------" << endl;
cout << endl;
cout << " Total number of voxels in phantom = " << numberVoxTot << endl;
cout << " Total number of RED voxels in phantom = " << numberVoxRed << endl;
cout << " Total number of GREEN voxels in phantom = " << numberVoxGreen << endl;
cout << " Total number of BLUE voxels in phantom = " << numberVoxBlue << endl;
cout << endl;
cout << " Total absorbed energy in RED voxels (MeV) = " << nrjRed/1E3 << endl;
cout << " Total absorbed energy in GREEN voxels (MeV) = " << nrjGreen/1E3 << endl;
cout << " Total absorbed energy in BLUE voxels (MeV) = " << nrjBlue/1E3 << endl;
cout << endl;
cout << " Total absorbed dose in RED voxels (Gy) = " << doseRed << endl;
cout << " Total absorbed dose in GREEN voxels (Gy) = " << doseGreen << endl;
cout << " Total absorbed dose in BLUE voxels (Gy) = " << doseBlue << endl;
cout << endl;
cout << "------------------------------------------------------------" << endl;
// End
f2->Write();
}
@@ -23,13 +23,14 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// MONTE CARLO SIMULATION OF REALISTIC GEOMETRY FROM MICROSCOPES IMAGES
//
// Authors and contributors:
// P. Barberet, S. Incerti, N. H. Tran, L. Morelli
// P. Barberet (a), S. Incerti (a), N. H. Tran (a), L. Morelli (a,b)
//
// University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// a) University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// b) Politecnico di Milano, Italy
//
// If you use this code, please cite the following publication:
// P. Barberet et al.,
@@ -37,10 +38,11 @@
// geometry exposed to alpha particles."
// Ph. Barberet et al 2012 Phys. Med. Biol. 57 2189
// doi: 110.1088/0031-9155/57/8/2189
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
#include "ActionInitialization.hh"
#include "PrimaryGeneratorAction.hh"
#include "RunAction.hh"
#include "EventAction.hh"
#include "SteppingAction.hh"
@@ -69,5 +71,5 @@ void ActionInitialization::Build() const
SetUserAction(new EventAction());
SetUserAction(new SteppingAction(runAction));
SetUserAction(new SteppingAction());
}
@@ -23,13 +23,14 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// MONTE CARLO SIMULATION OF REALISTIC GEOMETRY FROM MICROSCOPES IMAGES
//
// Authors and contributors:
// P. Barberet, S. Incerti, N. H. Tran, L. Morelli
// P. Barberet (a), S. Incerti (a), N. H. Tran (a), L. Morelli (a,b)
//
// University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// a) University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// b) Politecnico di Milano, Italy
//
// If you use this code, please cite the following publication:
// P. Barberet et al.,
@@ -37,7 +38,7 @@
// geometry exposed to alpha particles."
// Ph. Barberet et al 2012 Phys. Med. Biol. 57 2189
// doi: 110.1088/0031-9155/57/8/2189
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
#include "CellParameterisation.hh"
@@ -23,13 +23,14 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// MONTE CARLO SIMULATION OF REALISTIC GEOMETRY FROM MICROSCOPES IMAGES
//
// Authors and contributors:
// P. Barberet, S. Incerti, N. H. Tran, L. Morelli
// P. Barberet (a), S. Incerti (a), N. H. Tran (a), L. Morelli (a,b)
//
// University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// a) University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// b) Politecnico di Milano, Italy
//
// If you use this code, please cite the following publication:
// P. Barberet et al.,
@@ -37,8 +38,7 @@
// geometry exposed to alpha particles."
// Ph. Barberet et al 2012 Phys. Med. Biol. 57 2189
// doi: 110.1088/0031-9155/57/8/2189
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
#include "DetectorConstruction.hh"
#include "DetectorMessenger.hh"
@@ -23,13 +23,14 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// MONTE CARLO SIMULATION OF REALISTIC GEOMETRY FROM MICROSCOPES IMAGES
//
// Authors and contributors:
// P. Barberet, S. Incerti, N. H. Tran, L. Morelli
// P. Barberet (a), S. Incerti (a), N. H. Tran (a), L. Morelli (a,b)
//
// University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// a) University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// b) Politecnico di Milano, Italy
//
// If you use this code, please cite the following publication:
// P. Barberet et al.,
@@ -37,7 +38,7 @@
// geometry exposed to alpha particles."
// Ph. Barberet et al 2012 Phys. Med. Biol. 57 2189
// doi: 110.1088/0031-9155/57/8/2189
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
#include "DetectorMessenger.hh"
#include "DetectorConstruction.hh"
@@ -23,13 +23,14 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// MONTE CARLO SIMULATION OF REALISTIC GEOMETRY FROM MICROSCOPES IMAGES
//
// Authors and contributors:
// P. Barberet, S. Incerti, N. H. Tran, L. Morelli
// P. Barberet (a), S. Incerti (a), N. H. Tran (a), L. Morelli (a,b)
//
// University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// a) University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// b) Politecnico di Milano, Italy
//
// If you use this code, please cite the following publication:
// P. Barberet et al.,
@@ -37,7 +38,7 @@
// geometry exposed to alpha particles."
// Ph. Barberet et al 2012 Phys. Med. Biol. 57 2189
// doi: 110.1088/0031-9155/57/8/2189
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
#include "EventAction.hh"
@@ -23,13 +23,14 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// MONTE CARLO SIMULATION OF REALISTIC GEOMETRY FROM MICROSCOPES IMAGES
//
// Authors and contributors:
// P. Barberet, S. Incerti, N. H. Tran, L. Morelli
// P. Barberet (a), S. Incerti (a), N. H. Tran (a), L. Morelli (a,b)
//
// University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// a) University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// b) Politecnico di Milano, Italy
//
// If you use this code, please cite the following publication:
// P. Barberet et al.,
@@ -37,7 +38,7 @@
// geometry exposed to alpha particles."
// Ph. Barberet et al 2012 Phys. Med. Biol. 57 2189
// doi: 110.1088/0031-9155/57/8/2189
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
#include "PhysicsList.hh"
@@ -23,13 +23,14 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// MONTE CARLO SIMULATION OF REALISTIC GEOMETRY FROM MICROSCOPES IMAGES
//
// Authors and contributors:
// P. Barberet, S. Incerti, N. H. Tran, L. Morelli
// P. Barberet (a), S. Incerti (a), N. H. Tran (a), L. Morelli (a,b)
//
// University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// a) University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// b) Politecnico di Milano, Italy
//
// If you use this code, please cite the following publication:
// P. Barberet et al.,
@@ -37,7 +38,7 @@
// geometry exposed to alpha particles."
// Ph. Barberet et al 2012 Phys. Med. Biol. 57 2189
// doi: 110.1088/0031-9155/57/8/2189
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
#include "PrimaryGeneratorAction.hh"
@@ -0,0 +1,141 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
// -----------------------------------------------------------------------------
// MONTE CARLO SIMULATION OF REALISTIC GEOMETRY FROM MICROSCOPES IMAGES
//
// Authors and contributors:
// P. Barberet (a), S. Incerti (a), N. H. Tran (a), L. Morelli (a,b)
//
// a) University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// b) Politecnico di Milano, Italy
//
// If you use this code, please cite the following publication:
// P. Barberet et al.,
// "Monte-Carlo dosimetry on a realistic cell monolayer
// geometry exposed to alpha particles."
// Ph. Barberet et al 2012 Phys. Med. Biol. 57 2189
// doi: 110.1088/0031-9155/57/8/2189
// -----------------------------------------------------------------------------
#include "Run.hh"
#include "G4SystemOfUnits.hh"
#include "G4UnitsTable.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
Run::Run()
:G4Run()
{
G4int nbVoxel = CellParameterisation::Instance()->GetPhantomTotalPixels();
fVoxelEdeposit = new G4double[nbVoxel];
for (G4int i=0; i<nbVoxel; ++i) fVoxelEdeposit[i] = 0;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
Run::~Run()
{
delete[] fVoxelEdeposit;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void Run::Merge(const G4Run* run)
{
const Run* localRun = static_cast<const Run*>(run);
// Accumulate energy deposits per voxel
G4int nbVoxel = CellParameterisation::Instance()->GetPhantomTotalPixels();
for (G4int i=0; i<nbVoxel; ++i)
fVoxelEdeposit[i] += localRun->fVoxelEdeposit[i];
G4Run::Merge(run);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void Run::EndOfRun()
{
G4double nrjRed=0;
G4double doseRed=0;
G4double nrjGreen=0;
G4double doseGreen=0;
G4double nrjBlue=0;
G4double doseBlue=0;
fMyPhantomParam = CellParameterisation::Instance();
G4double redMassTot = fMyPhantomParam->GetRedMass();
G4double greenMassTot = fMyPhantomParam->GetGreenMass();
G4double blueMassTot = fMyPhantomParam->GetBlueMass();
for (G4int i = 0; i < fMyPhantomParam->GetPhantomTotalPixels(); i++)
{
if (fVoxelEdeposit[i] > 0.)
{
if (fMyPhantomParam->GetMaterial(i) == 1)
{
nrjRed=nrjRed+fVoxelEdeposit[i];
doseRed=doseRed+(fVoxelEdeposit[i]/redMassTot);
}
else if (fMyPhantomParam->GetMaterial(i) == 2)
{
nrjGreen=nrjGreen+fVoxelEdeposit[i];
doseGreen=doseGreen+(fVoxelEdeposit[i]/greenMassTot);
}
else if (fMyPhantomParam->GetMaterial(i) == 3)
{
nrjBlue=nrjBlue+fVoxelEdeposit[i];
doseBlue=doseBlue+(fVoxelEdeposit[i]/blueMassTot);
}
}
}
G4int numberVoxTot = fMyPhantomParam->GetPhantomTotalPixels();
G4int numberVoxRed = fMyPhantomParam->GetRedTotalPixels();
G4int numberVoxGreen = fMyPhantomParam->GetGreenTotalPixels();
G4int numberVoxBlue = fMyPhantomParam->GetBlueTotalPixels();
G4cout << G4endl;
G4cout << "- Summary --------------------------------------------------" << G4endl;
G4cout << G4endl;
G4cout << " Total number of voxels in phantom = " << numberVoxTot << G4endl;
G4cout << " Total number of RED voxels in phantom = " << numberVoxRed << G4endl;
G4cout << " Total number of GREEN voxels in phantom = " << numberVoxGreen << G4endl;
G4cout << " Total number of BLUE voxels in phantom = " << numberVoxBlue << G4endl;
G4cout << G4endl;
G4cout << " Total absorbed energy in RED voxels (MeV) = " << nrjRed/MeV << G4endl;
G4cout << " Total absorbed energy in GREEN voxels (MeV) = " << nrjGreen/MeV << G4endl;
G4cout << " Total absorbed energy in BLUE voxels (MeV) = " << nrjBlue/MeV << G4endl;
G4cout << G4endl;
G4cout << " Total absorbed dose in RED voxels (Gy) = " << doseRed/(joule/kg) << G4endl;
G4cout << " Total absorbed dose in GREEN voxels (Gy) = " << doseGreen/(joule/kg) << G4endl;
G4cout << " Total absorbed dose in BLUE voxels (Gy) = " << doseBlue/(joule/kg) << G4endl;
G4cout << G4endl;
G4cout << "------------------------------------------------------------" << G4endl;
}
@@ -23,13 +23,14 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// MONTE CARLO SIMULATION OF REALISTIC GEOMETRY FROM MICROSCOPES IMAGES
//
// Authors and contributors:
// P. Barberet, S. Incerti, N. H. Tran, L. Morelli
// P. Barberet (a), S. Incerti (a), N. H. Tran (a), L. Morelli (a,b)
//
// University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// a) University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// b) Politecnico di Milano, Italy
//
// If you use this code, please cite the following publication:
// P. Barberet et al.,
@@ -37,7 +38,7 @@
// geometry exposed to alpha particles."
// Ph. Barberet et al 2012 Phys. Med. Biol. 57 2189
// doi: 110.1088/0031-9155/57/8/2189
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
#include "RunAction.hh"
@@ -48,153 +49,164 @@
RunAction::RunAction()
:G4UserRunAction()
{
auto man = G4AnalysisManager::Instance();
man->SetDefaultFileType("root");
man->SetNtupleMerging(true);
man->SetFirstNtupleId(1);
if (isMaster)
{
// Declare ntuples
auto man = G4AnalysisManager::Instance();
man->SetDefaultFileType("root");
man->SetFirstNtupleId(1);
// Create 1st ntuple (id = 1)
man->CreateNtuple("ntuple1", "RED");
man->CreateNtupleDColumn("x");
man->CreateNtupleDColumn("y");
man->CreateNtupleDColumn("z");
man->CreateNtupleDColumn("energy");
man->CreateNtupleDColumn("dose");
man->CreateNtupleIColumn("voxelID");
man->FinishNtuple();
// Create 1st ntuple (id = 1)
man->CreateNtuple("ntuple1", "RED");
man->CreateNtupleDColumn("x");
man->CreateNtupleDColumn("y");
man->CreateNtupleDColumn("z");
man->CreateNtupleDColumn("energy");
man->CreateNtupleDColumn("dose");
man->CreateNtupleIColumn("voxelID");
man->FinishNtuple();
// Create 2nd ntuple (id = 2)
man->CreateNtuple("ntuple2", "GREEN");
man->CreateNtupleDColumn("x");
man->CreateNtupleDColumn("y");
man->CreateNtupleDColumn("z");
man->CreateNtupleDColumn("energy");
man->CreateNtupleDColumn("dose");
man->CreateNtupleIColumn("voxelID");
man->FinishNtuple();
// Create 2nd ntuple (id = 2)
man->CreateNtuple("ntuple2", "GREEN");
man->CreateNtupleDColumn("x");
man->CreateNtupleDColumn("y");
man->CreateNtupleDColumn("z");
man->CreateNtupleDColumn("energy");
man->CreateNtupleDColumn("dose");
man->CreateNtupleIColumn("voxelID");
man->FinishNtuple();
// Create 3rd ntuple (id = 3)
man->CreateNtuple("ntuple3", "BLUE");
man->CreateNtupleDColumn("x");
man->CreateNtupleDColumn("y");
man->CreateNtupleDColumn("z");
man->CreateNtupleDColumn("energy");
man->CreateNtupleDColumn("dose");
man->CreateNtupleIColumn("voxelID");
man->FinishNtuple();
// Create 3rd ntuple (id = 3)
man->CreateNtuple("ntuple3", "BLUE");
man->CreateNtupleDColumn("x");
man->CreateNtupleDColumn("y");
man->CreateNtupleDColumn("z");
man->CreateNtupleDColumn("energy");
man->CreateNtupleDColumn("dose");
man->CreateNtupleIColumn("voxelID");
man->FinishNtuple();
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
RunAction::~RunAction()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4Run* RunAction::GenerateRun()
{
delete[] fVoxelEnergy;
fRun = new Run();
return fRun;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void RunAction::BeginOfRunAction(const G4Run *)
{
// Analysis manager
auto man = G4AnalysisManager::Instance();
man->OpenFile("phantom");
if (isMaster)
{
// Analysis manager
auto man = G4AnalysisManager::Instance();
man->OpenFile("phantom");
// Access phantom singleton
fMyPhantomParam = CellParameterisation::Instance();
fNbVoxels = fMyPhantomParam->GetPhantomTotalPixels();
// Allocates the array receiving the energy per voxel
fVoxelEnergy = new G4double[fNbVoxels];
// Initialisation of the energy array
for (G4int i = 0; i < fNbVoxels; i++) fVoxelEnergy[i] = 0;
// Access phantom singleton
fMyPhantomParam = CellParameterisation::Instance();
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void RunAction::EndOfRunAction(const G4Run * /*aRun*/)
{
auto man = G4AnalysisManager::Instance();
G4double X, Y, Z;
// Total mass of voxel
G4double redMassTot=0.;
G4double greenMassTot=0.;
G4double blueMassTot=0.;
redMassTot = fMyPhantomParam->GetRedMass();
greenMassTot = fMyPhantomParam->GetGreenMass();
blueMassTot = fMyPhantomParam->GetBlueMass();
// (Optional) Numbers of voxel
//G4double redVox=0;
//G4double greenVox=0;
//G4double blueVox=0;
//redVox = fMyPhantomParam->GetRedTotalPixels();
//greenVox = fMyPhantomParam->GetGreenTotalPixels();
//blueVox = fMyPhantomParam->GetBlueTotalPixels();
// (Optional) Single voxel mass
//G4double redMass=0.;
//G4double greenMass=0.;
//G4double blueMass=0.;
//redMass = redMassTot/redVox;
//greenMass = greenMassTot/greenVox;
//blueMass = blueMassTot/blueVox;
// Save x, y, z and energy for every voxel having absorbed an energy above 0.
// Energy is in keV
// Dose is in Gy
for (G4int i = 0; i < fMyPhantomParam->GetPhantomTotalPixels(); i++)
if (isMaster)
{
if (fVoxelEnergy[i] > 0.)
// Display results from merged local runs
fRun->EndOfRun();
// Fill ntuples
auto man = G4AnalysisManager::Instance();
G4double X, Y, Z;
// Total mass of voxels
G4double redMassTot=0.;
G4double greenMassTot=0.;
G4double blueMassTot=0.;
redMassTot = fMyPhantomParam->GetRedMass();
greenMassTot = fMyPhantomParam->GetGreenMass();
blueMassTot = fMyPhantomParam->GetBlueMass();
// (Optional) Numbers of voxel
//G4double redVox=0;
//G4double greenVox=0;
//G4double blueVox=0;
//redVox = fMyPhantomParam->GetRedTotalPixels();
//greenVox = fMyPhantomParam->GetGreenTotalPixels();
//blueVox = fMyPhantomParam->GetBlueTotalPixels();
// (Optional) Single voxel mass
//G4double redMass=0.;
//G4double greenMass=0.;
//G4double blueMass=0.;
//redMass = redMassTot/redVox;
//greenMass = greenMassTot/greenVox;
//blueMass = blueMassTot/blueVox;
// Save x, y, z and energy for every voxel having absorbed an energy above 0.
// Energy is in keV
// Dose is in Gy
G4double cumulatedDeposit = 0;
// Loop on voxels and collect energy and dose from merged local runs
for (G4int i = 0; i < fMyPhantomParam->GetPhantomTotalPixels(); i++)
{
X = (fMyPhantomParam->GetVoxelThreeVectorOriginal(i).x()) / um;
Y = (fMyPhantomParam->GetVoxelThreeVectorOriginal(i).y()) / um;
Z = (fMyPhantomParam->GetVoxelThreeVectorOriginal(i).z()) / um;
cumulatedDeposit = fRun->GetVoxelEdeposit(i);
if (fMyPhantomParam->GetMaterial(i) == 1)
if (cumulatedDeposit > 0.)
{
man->FillNtupleDColumn(1,0,X);
man->FillNtupleDColumn(1,1,Y);
man->FillNtupleDColumn(1,2,Z);
man->FillNtupleDColumn(1,3,fVoxelEnergy[i]/keV);
man->FillNtupleDColumn(1,4,((fVoxelEnergy[i]/joule)/(redMassTot/kg)));
man->FillNtupleIColumn(1,5,i);
man->AddNtupleRow(1);
}
X = (fMyPhantomParam->GetVoxelThreeVectorOriginal(i).x()) / um;
Y = (fMyPhantomParam->GetVoxelThreeVectorOriginal(i).y()) / um;
Z = (fMyPhantomParam->GetVoxelThreeVectorOriginal(i).z()) / um;
else if (fMyPhantomParam->GetMaterial(i) == 2)
{
man->FillNtupleDColumn(2,0,X);
man->FillNtupleDColumn(2,1,Y);
man->FillNtupleDColumn(2,2,Z);
man->FillNtupleDColumn(2,3,fVoxelEnergy[i]/keV);
man->FillNtupleDColumn(2,4,((fVoxelEnergy[i]/joule)/(greenMassTot/kg)));
man->FillNtupleIColumn(2,5,i);
man->AddNtupleRow(2);
}
else if (fMyPhantomParam->GetMaterial(i) == 3)
{
man->FillNtupleDColumn(3,0,X);
man->FillNtupleDColumn(3,1,Y);
man->FillNtupleDColumn(3,2,Z);
man->FillNtupleDColumn(3,3,fVoxelEnergy[i]/keV);
man->FillNtupleDColumn(3,4,((fVoxelEnergy[i]/joule)/(blueMassTot/kg)));
man->FillNtupleIColumn(3,5,i);
man->AddNtupleRow(3);
if (fMyPhantomParam->GetMaterial(i) == 1)
{
man->FillNtupleDColumn(1,0,X);
man->FillNtupleDColumn(1,1,Y);
man->FillNtupleDColumn(1,2,Z);
man->FillNtupleDColumn(1,3,cumulatedDeposit/keV);
man->FillNtupleDColumn(1,4,((cumulatedDeposit/joule)/(redMassTot/kg)));
man->FillNtupleIColumn(1,5,i);
man->AddNtupleRow(1);
}
else if (fMyPhantomParam->GetMaterial(i) == 2)
{
man->FillNtupleDColumn(2,0,X);
man->FillNtupleDColumn(2,1,Y);
man->FillNtupleDColumn(2,2,Z);
man->FillNtupleDColumn(2,3,cumulatedDeposit/keV);
man->FillNtupleDColumn(2,4,((cumulatedDeposit/joule)/(greenMassTot/kg)));
man->FillNtupleIColumn(2,5,i);
man->AddNtupleRow(2);
}
else if (fMyPhantomParam->GetMaterial(i) == 3)
{
man->FillNtupleDColumn(3,0,X);
man->FillNtupleDColumn(3,1,Y);
man->FillNtupleDColumn(3,2,Z);
man->FillNtupleDColumn(3,3,cumulatedDeposit/keV);
man->FillNtupleDColumn(3,4,((cumulatedDeposit/joule)/(blueMassTot/kg)));
man->FillNtupleIColumn(3,5,i);
man->AddNtupleRow(3);
}
}
}
// Save histograms
man->Write();
man->CloseFile();
man->Clear();
}
// Save histograms
man->Write();
man->CloseFile();
// Complete clean-up
man->Clear();
}
@@ -23,13 +23,14 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// MONTE CARLO SIMULATION OF REALISTIC GEOMETRY FROM MICROSCOPES IMAGES
//
// Authors and contributors:
// P. Barberet, S. Incerti, N. H. Tran, L. Morelli
// P. Barberet (a), S. Incerti (a), N. H. Tran (a), L. Morelli (a,b)
//
// University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// a) University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
// b) Politecnico di Milano, Italy
//
// If you use this code, please cite the following publication:
// P. Barberet et al.,
@@ -37,19 +38,19 @@
// geometry exposed to alpha particles."
// Ph. Barberet et al 2012 Phys. Med. Biol. 57 2189
// doi: 110.1088/0031-9155/57/8/2189
// --------------------------------------------------------------------------------
// -----------------------------------------------------------------------------
#include "SteppingAction.hh"
#include "Run.hh"
#include "G4SteppingManager.hh"
#include "G4RunManager.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
SteppingAction::SteppingAction(RunAction* runAction)
:G4UserSteppingAction(), fRunAction(runAction)
SteppingAction::SteppingAction()
:G4UserSteppingAction()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void SteppingAction::UserSteppingAction(const G4Step* aStep)
@@ -63,22 +64,12 @@ void SteppingAction::UserSteppingAction(const G4Step* aStep)
G4int preReplicaNumber = preStep->GetTouchableHandle()->GetReplicaNumber();
G4int voxelMaterial = fMyPhantomParam->GetMaterial(preReplicaNumber);
// The absorbed energy is added to the "voxel energy" array in RunAction
// Added protection to make sure Replica Number has been identified
Run* run
= static_cast<Run*>(G4RunManager::GetRunManager()->GetNonConstCurrentRun());
if (aStep->GetTotalEnergyDeposit()>0. && preReplicaNumber>0)
{
if (voxelMaterial == 1)
{
fRunAction->AddDoseBox(preReplicaNumber, aStep->GetTotalEnergyDeposit());
}
else if (voxelMaterial == 2)
{
fRunAction->AddDoseBox(preReplicaNumber, aStep->GetTotalEnergyDeposit());
}
else if (voxelMaterial == 3)
{
fRunAction->AddDoseBox(preReplicaNumber, aStep->GetTotalEnergyDeposit());
}
}
if (voxelMaterial == 1 || voxelMaterial == 2 || voxelMaterial == 3)
run->AddVoxelEdeposit(preReplicaNumber, aStep->GetTotalEnergyDeposit());
}
@@ -1,4 +1,4 @@
Initial Seed for random engine: 1745424599
Initial Seed for random engine: 1750481146
Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Forcing G4RunManager type...
############################################
@@ -12,7 +12,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo
**************************************************************
Geant4 version Name: geant4-11-03-patch-02 (25-April-2025)
Geant4 version Name: geant4-11-03-ref-06 (30-June-2025)
Copyright : Geant4 Collaboration
References : NIM A 506 (2003), 250-303
: IEEE-TNS 53 (2006), 270-278
@@ -81,7 +81,7 @@ Lowest triplet kinetic energy 1 MeV
Enable sampling of gamma linear polarisation 0
5D gamma conversion model type 0
5D gamma conversion model on isolated ion 0
Use Ricardo-Gerardo pair production model 0
Use RiGe 5D e+e- pair production model by muons 0
Livermore data directory epics_2017
=======================================================================
====== Ionisation Parameters ========
@@ -287,7 +287,9 @@ DNARPWBAIonisationModel : Emin= 100 MeV Emax= 300 MeV deltaBorn Fluo
proton_G4DNAChargeDecrease: for proton SubType=56 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 600 MeV
DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 100 MeV
DummyModel : Emin= 100 MeV Emax= 600 MeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
msc: for GenericIon SubType= 10
===== EM models for the G4Region DefaultRegionForTheWorld ======
@@ -303,7 +305,7 @@ ionIoni: for GenericIon XStype:3 SubType=2
GenericIon_G4DNAIonisation: for GenericIon SubType=53 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
DNARuddIonisationExtendedModel : Emin= 0 eV Emax= 300 MeV deltaRudd Fluo
DNAIonIonisationModel : Emin= 0 eV Emax= 300 MeV
DummyModel : Emin= 300 MeV Emax= 600 MeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
@@ -331,19 +333,21 @@ alpha_G4DNAElastic: for alpha SubType=51 BuildTable=0
alpha_G4DNAExcitation: for alpha SubType=52 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 400 MeV
DummyModel : Emin= 400 MeV Emax= 600 MeV
DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 300 MeV
DummyModel : Emin= 300 MeV Emax= 600 MeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
alpha_G4DNAIonisation: for alpha SubType=53 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
DNARuddIonisationExtendedModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo
DummyModel : Emin= 400 MeV Emax= 600 MeV
DNARuddIonisationExtendedModel : Emin= 0 eV Emax= 300 MeV deltaRudd Fluo
DummyModel : Emin= 300 MeV Emax= 600 MeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
alpha_G4DNAChargeDecrease: for alpha SubType=56 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 600 MeV
DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 300 MeV
DummyModel : Emin= 300 MeV Emax= 600 MeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
msc: for alpha+ SubType= 10
===== EM models for the G4Region DefaultRegionForTheWorld ======
@@ -365,23 +369,27 @@ alpha+_G4DNAElastic: for alpha+ SubType=51 BuildTable=0
alpha+_G4DNAExcitation: for alpha+ SubType=52 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 400 MeV
DummyModel : Emin= 400 MeV Emax= 600 MeV
DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 300 MeV
DummyModel : Emin= 300 MeV Emax= 600 MeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
alpha+_G4DNAIonisation: for alpha+ SubType=53 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
DNARuddIonisationExtendedModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo
DummyModel : Emin= 400 MeV Emax= 600 MeV
DNARuddIonisationExtendedModel : Emin= 0 eV Emax= 300 MeV deltaRudd Fluo
DummyModel : Emin= 300 MeV Emax= 600 MeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
alpha+_G4DNAChargeIncrease: for alpha+ SubType=57 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 600 MeV
DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 300 MeV
DummyModel : Emin= 300 MeV Emax= 600 MeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
alpha+_G4DNAChargeDecrease: for alpha+ SubType=56 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 600 MeV
DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 300 MeV
DummyModel : Emin= 300 MeV Emax= 600 MeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
msc: for anti_proton SubType= 10
===== EM models for the G4Region DefaultRegionForTheWorld ======
@@ -404,19 +412,21 @@ helium_G4DNAElastic: for helium SubType=51 BuildTable=0
helium_G4DNAExcitation: for helium SubType=52 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 400 MeV
DummyModel : Emin= 400 MeV Emax= 600 MeV
DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 300 MeV
DummyModel : Emin= 300 MeV Emax= 600 MeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
helium_G4DNAIonisation: for helium SubType=53 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
DNARuddIonisationExtendedModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo
DummyModel : Emin= 400 MeV Emax= 600 MeV
DNARuddIonisationExtendedModel : Emin= 0 eV Emax= 300 MeV deltaRudd Fluo
DummyModel : Emin= 300 MeV Emax= 600 MeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
helium_G4DNAChargeIncrease: for helium SubType=57 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 600 MeV
DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 300 MeV
DummyModel : Emin= 300 MeV Emax= 600 MeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
hydrogen_G4DNAElastic: for hydrogen SubType=51 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
@@ -426,8 +436,8 @@ hydrogen_G4DNAElastic: for hydrogen SubType=51 BuildTable=0
hydrogen_G4DNAExcitation: for hydrogen SubType=52 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 300 MeV
DummyModel : Emin= 300 MeV Emax= 600 MeV
DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 500 keV
DummyModel : Emin= 500 keV Emax= 600 MeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
hydrogen_G4DNAIonisation: for hydrogen SubType=53 BuildTable=0
@@ -438,7 +448,9 @@ DNARuddIonisationExtendedModel : Emin= 0 eV Emax= 300 MeV deltaRudd Fluo
hydrogen_G4DNAChargeIncrease: for hydrogen SubType=57 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 600 MeV
DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 100 MeV
DummyModel : Emin= 100 MeV Emax= 600 MeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
msc: for kaon+ SubType= 10
===== EM models for the G4Region DefaultRegionForTheWorld ======
+16 -8
View File
@@ -53,6 +53,7 @@ To run the example:
# -m : macro file
# -t : number of threads to run
# -p : physics list option
# -v : visualization option
\endverbatim
Macro files can control every aspect of the simulation, see this introduction:
@@ -70,6 +71,11 @@ ecoli (ecoli.mac) and human cell (human_cell*.mac) geometries.
long straight DNA segments in a 100×30×30 nm placement volume.
This is a geometry used for parameter (optimization) studies.
- fiber.mac: to visualize a fiber of DNA
- phage.mac: to model the irradiation of a DNA phage containing 141158 bp,
placed in a cylinder with radius 3.5 um and height 7 um.
- plasmid.mac: to model a cube of liquid water (side 4.84 um) containing around
10 000 plasmids (pBR322, 4367 base pairs) randomly oriented in a supercoiled conformation.
@@ -147,7 +153,7 @@ Macro commands can be used to control the geometry parameters
# For the visualisation of DNA geometries, the following line can be used
/control/execute vis.mac
# More specifically, start moleculardna using the command ./molecular, to
# More specifically, start moleculardna using the command ./molecular -t 1 -v 1
# to open the Qt visualiser. Then use the mac file that you want, e.g.
# /control/execute cylinders.mac
# For the visualization, large amount of RAM is needed. For example
@@ -155,12 +161,6 @@ Macro commands can be used to control the geometry parameters
# are needed. For 2000 cylinders, ~11 GB are needed.
\endverbatim
The DNA parallel world can be activated using the "useParallelPhysicsWorld" flag
in the PhysicsList.cc and DetectorConstruction.cc files for the physics stage.
Setting "useParallelPhysicsWorld = false" means that particles will only interact
with the water volume. Energy deposition in water caused by direct damage is
recorded using octree data structures associated with DNA volumes.
\section MOLECULARDNA_s2 PHYSICS LIST
The physics list can use the recommended G4EmDNAPhysics_option2,
@@ -229,8 +229,11 @@ root human_cell.C
# to plot damage and fragments distribution from human_cell* geometries.
The human_cell_alphas.C macro can be used as shown in [1].
root phage.C
# to plot damage and fragments distribution from phage geometry
root plasmid.C
#to plot damage and fragments distribution from plasmid geometries
# to plot damage and fragments distribution from plasmid geometries
root human_cell_chromosomes.C
# to plot damage and fragments distribution from human_cell_chromosomes geometries.
@@ -262,6 +265,11 @@ molecularDNAsurvival.py
# the human-cell.mac macro.
\endverbatim
Note on ROOT import from python:
If python cannot import ROOT, please configure your ROOT version to include PyROOT.
For further instruction, refer to the documentation of ROOT, paragraph 19.1.4.2:
https://root.cern/root/htmldoc/guides/users-guide/ROOTUsersGuide.html#python-interface
\section MOLECULARDNA_s6 PHASE SPACE READING
The example can read a phase space file as source for the primary generation,
@@ -28,8 +28,8 @@ set(GEOMETRY_FILE_NAME "geometries.tar.gz")
set(GEOMETRY_FOlDER_NAME "geometries")
set(GEOMETRY_LOCAL_FILENAME "${PROJECT_BINARY_DIR}/${GEOMETRY_FILE_NAME}")
set(GEOMETRY_DATASETS_URL
"https://cern.ch/geant4-data/datasets/examples/advanced/dna/moleculardna/1/${GEOMETRY_FILE_NAME}")
set(HASH_MD5 "0bb690a782ce951b1a1973c6be2b1324")
"https://cern.ch/geant4-data/datasets/examples/advanced/dna/moleculardna/2/${GEOMETRY_FILE_NAME}")
set(HASH_MD5 "0bb821758b648106d752349778fc6ecb")
if (EXISTS "${GEOMETRY_FOlDER_NAME}")
set(GEOMETRY_NEEDS_DOWNLOAD FALSE)
@@ -39,8 +39,8 @@ endif ()
if (GEOMETRY_NEEDS_DOWNLOAD)
message(STATUS "geometries-data: attempting download: ${GEOMETRY_DATASETS_URL} ...")
file(DOWNLOAD "${GEOMETRY_DATASETS_URL}" "${GEOMETRY_LOCAL_FILENAME}"
INACTIVITY_TIMEOUT 500
TIMEOUT 500
INACTIVITY_TIMEOUT 1000
TIMEOUT 1000
STATUS DownloadStatus
)
@@ -93,7 +93,7 @@ target_link_libraries(molecular ${Geant4_LIBRARIES})
#----------------------------------------------------------------------------
# Copy all scripts to the build directory, i.e. the directory in which we
# build molecular_proj. This is so that we can run the executable directly because
# build molecular_proj. This is so that we can run the executable directly because
# it relies on these scripts being in the current working directory.
#
file(GLOB molecular_SCRIPTS
@@ -6,6 +6,46 @@ It must **not** be used as a substitute for writing good git commit messages!
-------------------------------------------------------------------------------
## 2025-06-03 H. Tran (molecularDNA-V11-03-09)
- fixed updated reaction list for each DNA reactions.
## 2025-05-05 H. Tran (molecularDNA-V11-03-08)
- fixed compilation warnings on cxx23
## 2025-04-01 H. Tran (molecularDNA-V11-03-07)
- updated the new implementation of IRT-syn model.
- Deleted the Max Time Step parameter.
## 2025-02-17 S. Incerti, K. Chatzipapas, H. Tran (molecularDNA-V11-03-06)
- Added moleculardna macro, ROOT macro and geomety files for the simulation of phages
- Updated direct damage range for plasmid.mac and cylinders.mac
- Added fiber.mac
- Increased max number of arguments in main
## 2025-02-11 S. Incerti, K. Chatzipapas (molecularDNA-V11-03-05)
- Added protection to all ROOT macros to avoid nan in error calculation
## 2025-02-11 K. Chatzipapas, S. Incerti (molecularDNA-V11-03-04)
- Added message in README related to ROOT import from python
## 2025-01-30 S. Incerti (molecularDNA-V11-03-03)
- Added possibility to activate parallel word using dedicated flag from executable
## 2025-01-23 S. Incerti (molecularDNA-V11-03-02)
- Increased default statistics in ecoli.mac
## 2025-01-03 S. Incerti (molecularDNA-V11-03-01)
- Added auto to cylinders.C
## 2024-12-13 K. Chatzipapas (molecularDNA-V11-03-00)
- Correct segmentation error of the root macrofile
"human_cell.C", "ecoli.C", "human_cell_alphas.C",
"human_cell_chromosome.C" and "plasmid.C". This error
was caused when low damage had been produced.
- Define the definition of one missing variable in the
"human_cell.C", "ecoli.C", "human_cell_alphas.C",
"human_cell_chromosome.C" and "plasmid.C".
## 2024-11-05 H. Tran (molecularDNA-V11-02-13)
- added missing plasmid analysis root macro file
+13 -7
View File
@@ -57,6 +57,7 @@ http://geant4-dna.org
# -m : macro file
# -t : number of threads to run
# -p : physics list option
# -v : visualization option
Macro files can control every aspect of the simulation, see this introduction:
https://geant4-dna.github.io/molecular-docs/docs/overview/macro-anatomy
@@ -73,6 +74,11 @@ http://geant4-dna.org
long straight DNA segments in a 100×30×30 nm placement volume.
This is a geometry used for parameter (optimization) studies.
- fiber.mac: to visualize a fiber of DNA
- phage.mac: to model the irradiation of a DNA phage containing 141158 bp,
placed in a cylinder with radius 3.5 um and height 7 um.
- plasmid.mac: to model a cube of liquid water (side 4.84 um) containing around
10 000 plasmids (pBR322, 4367 base pairs) randomly oriented in a supercoiled conformation.
@@ -149,19 +155,13 @@ http://geant4-dna.org
# For the visualisation of DNA geometries, the following line can be used
/control/execute vis.mac
# More specifically, start moleculardna using the command ./molecular, to
# More specifically, start moleculardna using the command ./molecular -t 1 -v 1
# to open the Qt visualiser. Then use the mac file that you want, e.g.
# /control/execute cylinders.mac
# For the visualization, large amount of RAM is needed. For example
# using cylinders DNA geometries, to visualize 200 cylinders, ~2.5 GB
# are needed. For 2000 cylinders, ~11 GB are needed.
The DNA parallel world can be activated using the "useParallelPhysicsWorld" flag
in the PhysicsList.cc and DetectorConstruction.cc files for the physics stage.
Setting "useParallelPhysicsWorld = false" means that particles will only interact
with the water volume. Energy deposition in water caused by direct damage is
recorded using octree data structures associated with DNA volumes.
2 - PHYSICS LIST
The physics list can use the recommended G4EmDNAPhysics_option2,
@@ -221,6 +221,7 @@ http://geant4-dna.org
- ecoli.C: to plot damage from ecoli geometry
- human_cell.C: to plot damage and fragments distribution from human_cell*
geometries. The human_cell_alphas.C macro can be used as shown in [1].
- phage.C: to plot damage and fragments distribution from phage geometry
- plasmid.C: to plot damage and fragments distribution from plasmid geometries
- human_cell_chromosomes.C: to plot damage and fragments distribution
from human_cell_chromosomes geometries.
@@ -249,6 +250,11 @@ http://geant4-dna.org
The molecular-dna.root file is needed to run it, as produced by
the human-cell.mac macro.
*** Note on ROOT import from python:
If python cannot import ROOT, please configure your ROOT version to include PyROOT.
For further instruction, refer to the documentation of ROOT, paragraph 19.1.4.2:
https://root.cern/root/htmldoc/guides/users-guide/ROOTUsersGuide.html#python-interface
6 - PHASE SPACE READING
The example can read a phase space file as source for the primary generation,
+23 -20
View File
@@ -6,7 +6,7 @@
system ("hadd -O -f molecular-dna.root molecular-dna_t*.root");
c1 = new TCanvas("c1", "Damages", 120, 60, 1000, 1000);
auto c1 = new TCanvas("c1", "Damages", 120, 60, 1000, 1000);
c1->SetBorderSize(0);
c1->SetFillColor(0);
c1->SetFillStyle(4000);
@@ -65,6 +65,11 @@
TTree *tree = (TTree *) f->Get("tuples/primary_source");
Float_t number = (Float_t) tree->GetEntries();
if (number<2) {
std::cout << "Not enough entries in the \"primary_source\" TTree (" << (long)number << " entries)\n";
gApplication->Terminate(0);
}
tree = (TTree *) f->Get("tuples/source");
tree->SetBranchAddress("Primary",&Primary);
tree->SetBranchAddress("Energy",&Energy);
@@ -142,15 +147,14 @@
mean_DSBm = (Float_t) total_DSBm / number;
mean_DSBh = (Float_t) total_DSBh / number;
Double_t SD_SSBd = sqrt(((total_SSBd2 / number) - pow(total_SSBd / number,2))/(number -1));
Double_t SD_SSBi = sqrt(((total_SSBi2 / number) - pow(total_SSBi / number,2))/(number -1));
Double_t SD_SSBm = sqrt(((total_SSBm2 / number) - pow(total_SSBm / number,2))/(number -1));
Double_t SD_DSBd = sqrt(((total_DSBd2 / number) - pow(total_DSBd / number,2))/(number -1));
Double_t SD_DSBi = sqrt(((total_DSBi2 / number) - pow(total_DSBi / number,2))/(number -1));
Double_t SD_DSBm = sqrt(((total_DSBm2 / number) - pow(total_DSBm / number,2))/(number -1));
Double_t SD_DSBh = sqrt(((total_DSBh2 / number) - pow(total_DSBh / number,2))/(number -1));
Double_t SD_SSBd = sqrt(abs(((total_SSBd2 / number) - pow(total_SSBd / number,2)))/(number -1));
Double_t SD_SSBi = sqrt(abs(((total_SSBi2 / number) - pow(total_SSBi / number,2)))/(number -1));
Double_t SD_SSBm = sqrt(abs(((total_SSBm2 / number) - pow(total_SSBm / number,2)))/(number -1));
Double_t SD_DSBd = sqrt(abs(((total_DSBd2 / number) - pow(total_DSBd / number,2)))/(number -1));
Double_t SD_DSBi = sqrt(abs(((total_DSBi2 / number) - pow(total_DSBi / number,2)))/(number -1));
Double_t SD_DSBm = sqrt(abs(((total_DSBm2 / number) - pow(total_DSBm / number,2)))/(number -1));
Double_t SD_DSBh = sqrt(abs(((total_DSBh2 / number) - pow(total_DSBh / number,2)))/(number -1));
mean_SSB = (Float_t) total_SSB / number;
mean_SSBp = (Float_t) total_SSBp / number;
@@ -160,18 +164,18 @@
mean_DSBp = (Float_t) total_DSBp / number;
mean_DSBpp = (Float_t) total_DSBpp / number;
Double_t SD_SSB = sqrt(((total_SSB2 / number) - pow(total_SSB / number,2))/(number -1));
Double_t SD_SSBp = sqrt(((total_SSBp2 / number) - pow(total_SSBp / number,2))
/(number -1));
Double_t SD_twoSSB = sqrt(((total_twoSSB2 / number) - pow(total_twoSSB /
Double_t SD_SSB = sqrt(abs(((total_SSB2 / number) - pow(total_SSB / number,2))/(number -1)));
Double_t SD_SSBp = sqrt(abs(((total_SSBp2 / number) - pow(total_SSBp / number,2))
/(number -1)));
Double_t SD_twoSSB = sqrt(abs(((total_twoSSB2 / number) - pow(total_twoSSB /
number,2))
/(number -1));
/(number -1)));
Double_t SD_DSB = sqrt(((total_DSB2 / number) - pow(total_DSB / number,2))/(number -1));
Double_t SD_DSBp = sqrt(((total_DSBp2 / number) - pow(total_DSBp / number,2))
/(number -1));
Double_t SD_DSBpp = sqrt(((total_DSBpp2 / number) - pow(total_DSBpp / number,2))
/(number -1));
Double_t SD_DSB = sqrt(abs(((total_DSB2 / number) - pow(total_DSB / number,2))/(number -1)));
Double_t SD_DSBp = sqrt(abs(((total_DSBp2 / number) - pow(total_DSBp / number,2))
/(number -1)));
Double_t SD_DSBpp = sqrt(abs(((total_DSBpp2 / number) - pow(total_DSBpp / number,2))
/(number -1)));
cout<<"Paricle : "<<Primary<<'\t'
<<"Energy [/MeV] : "<<Energy<<'\t'
@@ -227,7 +231,6 @@
gr2->GetXaxis()->SetBinLabel(90,"DSBpp");
gr2->SetFillColor(49);
//Draw
c1->cd(1);
gr1->Draw("ba");
@@ -63,7 +63,7 @@
/dnageom/radicalKillDistance 9 nm
# Geometry: deposited energy accumulation range limit to start recording SBs from direct effects
/dnageom/interactionDirectRange 7 angstrom
/dnageom/interactionDirectRange 6 angstrom
# Geometry: activate Histone scavenging function
/dnageom/activateHistoneScavenging true
@@ -100,8 +100,12 @@
# Run: initialization
/run/initialize
# Visualization: uncomment the next line to visualize cylinder DNA geometry
# Visualization: to visualize cylinder DNA geometry
# - uncomment the next line and save
#/control/execute vis.mac
# - comment the last line (/run/beamOn ...) and save
# - then, run ./moleculardna -t 1 -v 1
# - then, in the Session window of the Qt interface, do /control/execute cylinders.mac
# Unit tests only
#/dnatests/uniqueid
+55 -43
View File
@@ -1,16 +1,15 @@
//-------------------------------------------------------------------------------//
// This macrofile was developed by Konstantinos Chatzipapas at LP2iB (ex. CENBG) //
// in collaboration with the whole team of molecularDNA Geant4-DNA example //
// Publication: .................................... //
// For any question please contact through: //
// chatzipa@cenbg.in2p3.fr (or k.chatzipapas@yahoo.com) //
// k.chatzipapas@yahoo.com //
//-------------------------------------------------------------------------------//
//
// This macro requires the molecular-dna.root file generated from molecularDNA example
// To run this file just insert this command to the terminal:
// root .X analysis.C
// root .X ecoli.C
// ROOT6.x should be installed
//
//***************************************//
// Please define the parameters below //
// ifile, r3, Nbp (as shown in terminal) //
@@ -100,7 +99,7 @@ Int_t EB, ES, OHB, OHS, HB, HS, FL;
Int_t total_EB, total_ES, total_OHB, total_OHS, total_HB, total_HS, total_FL;
Float_t total_EB2, total_ES2, total_OHB2, total_OHS2, total_HB2, total_HS2, total_FL2;
Float_t SD_EB, SD_ES, SD_OHB, SD_OHS, SD_HB, SD_HS;
Float_t SD_SSB, SD_SSBp, SD_SSB2p, SD_sSSB, SD_SSBd, SD_SSBi;
Float_t SD_SSB, SD_SSBp, SD_SSB2p, SD_sSSB, SD_SSBd, SD_SSBi, SD_SSBm;
Float_t SD_DSB, SD_DSBp, SD_DSBpp, SD_sDSB, SD_DSBd, SD_DSBi, SD_DSBm, SD_DSBh;
Int_t SSB, SSBp, SSB2p;
@@ -160,6 +159,11 @@ char *type= new char[256];
TTree* tree = (TTree*) f->Get("tuples/primary_source");
Float_t number = (Float_t) tree->GetEntries();
if (number<2) {
std::cout << "Not enough entries in the \"primary_source\" TTree (" << (long)number << " entries)\n";
gApplication->Terminate(0);
}
vector<pair<int,int64_t>> DSBBPID;
// For reading species production
@@ -200,26 +204,35 @@ for(int i = 0;i<nentries;i++){
}
// Sort DSBs from the one with lower ID value to the one with higher ID value
// Then find the number of fragments that have been produced
sort(DSBBPID.begin(), DSBBPID.end(), smallerPair);
for(int ie = 0;ie<DSBBPID.size()-1;ie++){
int64_t dsbfragment = DSBBPID[ie+1].second-DSBBPID[ie].second;
// Find the number of fragments that have been produced, but first test if there are enough breaks.
// If no more than 2 DSBs exist in the DSBBPID vector ( DSBBPID.size() is 0 or 1 ),
// the subtraction DSBBPID.size() - 1 makes the loop condition evaluate to ie < -1 (in unsigned terms,
// this becomes a large number, which is incorrect) and leads to undefined behavior (crash).
if (DSBBPID.size() < 2) {
std::cerr << "Not enough damage to create fragments distribution." << std::endl;
//return;
}
if (DSBBPID.size() >= 2) {
// Sort DSBs from the one with lower ID value to the one with higher ID value
sort(DSBBPID.begin(), DSBBPID.end(), smallerPair);
for(int ie = 0;ie<DSBBPID.size()-1;ie++){
int64_t dsbfragment = DSBBPID[ie+1].second-DSBBPID[ie].second;
double val = (double)dsbfragment/1000.;
double meanw = h1fragments->GetBinCenter(h1fragments->FindBin(val));
double binw = h1fragments->GetBinWidth (h1fragments->FindBin(val));
h1fragments->Fill(val,1./binw/1000);//bp-1
//cout <<"val:"<<val<<endl;
}
double val = (double)dsbfragment/1000.;
double meanw = h1fragments->GetBinCenter(h1fragments->FindBin(val));
double binw = h1fragments->GetBinWidth (h1fragments->FindBin(val));
h1fragments->Fill(val,1./binw/1000);//bp-1
//cout <<"val:"<<val<<endl;
}
}
// Calculate the standard deviation of species
SD_EB = sqrt(((total_EB2 / number) - pow(total_EB / number,2))/(number -1));
SD_ES = sqrt(((total_ES2 / number) - pow(total_ES / number,2))/(number -1));
SD_OHB = sqrt(((total_OHB2 / number) - pow(total_OHB / number,2))/(number -1));
SD_OHS = sqrt(((total_OHS2 / number) - pow(total_OHS / number,2))/(number -1));
SD_HB = sqrt(((total_HB2 / number) - pow(total_HB / number,2))/(number -1));
SD_HS = sqrt(((total_HS2 / number) - pow(total_HS / number,2))/(number -1));
// Calculate the SEM
SD_EB = sqrt(abs(((total_EB2 / number) - pow(total_EB / number,2)))/(number -1));
SD_ES = sqrt(abs(((total_ES2 / number) - pow(total_ES / number,2)))/(number -1));
SD_OHB = sqrt(abs(((total_OHB2 / number) - pow(total_OHB / number,2)))/(number -1));
SD_OHS = sqrt(abs(((total_OHS2 / number) - pow(total_OHS / number,2)))/(number -1));
SD_HB = sqrt(abs(((total_HB2 / number) - pow(total_HB / number,2)))/(number -1));
SD_HS = sqrt(abs(((total_HS2 / number) - pow(total_HS / number,2)))/(number -1));
// Read damage classification SSB, SSB+, 2SSB, DSB, DSB+, DSB++
// As they have been defined in: Nikjoo, H., ONeill, O., Goodhead, T., & Terrissol, M. 1997,
@@ -256,14 +269,14 @@ for(int i = 0;i<nentriesC;i++){
}
// Calculate the standard deviation
SD_SSB = sqrt(((total_SSB2 / number) - pow(total_SSB / number,2))/(number -1));
SD_SSBp = sqrt(((total_SSBp2 / number) - pow(total_SSBp / number,2))/(number -1));
SD_SSB2p = sqrt(((total_SSB2p2 / number) - pow(total_SSB2p / number,2))/(number -1));
// Calculate the SEM
SD_SSB = sqrt(abs(((total_SSB2 / number) - pow(total_SSB / number,2)))/(number -1));
SD_SSBp = sqrt(abs(((total_SSBp2 / number) - pow(total_SSBp / number,2)))/(number -1));
SD_SSB2p = sqrt(abs(((total_SSB2p2 / number) - pow(total_SSB2p / number,2)))/(number -1));
SD_DSB = sqrt(((total_DSB2 / number) - pow(total_DSB / number,2))/(number -1));
SD_DSBp = sqrt(((total_DSBp2 / number) - pow(total_DSBp / number,2))/(number -1));
SD_DSBpp = sqrt(((total_DSBpp2 / number) - pow(total_DSBpp / number,2))/(number -1));
SD_DSB = sqrt(abs(((total_DSB2 / number) - pow(total_DSB / number,2)))/(number -1));
SD_DSBp = sqrt(abs(((total_DSBp2 / number) - pow(total_DSBp / number,2)))/(number -1));
SD_DSBpp = sqrt(abs(((total_DSBpp2 / number) - pow(total_DSBpp / number,2)))/(number -1));
// Read damage classification SSBd, SSBi, SSBm, DSBd, DSBi, DSBm, DSBh
// As they have been defined in: Nikjoo, H., ONeill, O., Goodhead, T., & Terrissol, M. 1997,
@@ -306,18 +319,17 @@ for(int i = 0;i<nentriesS;i++){
}
// Calculate the standard deviation
SD_sSSB = sqrt(((total_sSSB2 / number) - pow(total_sSSB / number,2))/(number -1));
SD_SSBd = sqrt(((total_SSBd2 / number) - pow(total_SSBd / number,2))/(number -1));
SD_SSBi = sqrt(((total_SSBi2 / number) - pow(total_SSBi / number,2))/(number -1));
SD_SSBm = sqrt(((total_SSBm2 / number) - pow(total_SSBm / number,2))/(number -1));
SD_sDSB = sqrt(((total_sDSB2 / number) - pow(total_sDSB / number,2))/(number -1));
SD_DSBd = sqrt(((total_DSBd2 / number) - pow(total_DSBd / number,2))/(number -1));
SD_DSBi = sqrt(((total_DSBi2 / number) - pow(total_DSBi / number,2))/(number -1));
SD_DSBm = sqrt(((total_DSBm2 / number) - pow(total_DSBm / number,2))/(number -1));
SD_DSBh = sqrt(((total_DSBh2 / number) - pow(total_DSBh / number,2))/(number -1));
// Calculate the SEM
SD_sSSB = sqrt(abs(((total_sSSB2 / number) - pow(total_sSSB / number,2)))/(number -1));
SD_SSBd = sqrt(abs(((total_SSBd2 / number) - pow(total_SSBd / number,2)))/(number -1));
SD_SSBi = sqrt(abs(((total_SSBi2 / number) - pow(total_SSBi / number,2)))/(number -1));
SD_SSBm = sqrt(abs(((total_SSBm2 / number) - pow(total_SSBm / number,2)))/(number -1));
SD_sDSB = sqrt(abs(((total_sDSB2 / number) - pow(total_sDSB / number,2)))/(number -1));
SD_DSBd = sqrt(abs(((total_DSBd2 / number) - pow(total_DSBd / number,2)))/(number -1));
SD_DSBi = sqrt(abs(((total_DSBi2 / number) - pow(total_DSBi / number,2)))/(number -1));
SD_DSBm = sqrt(abs(((total_DSBm2 / number) - pow(total_DSBm / number,2)))/(number -1));
SD_DSBh = sqrt(abs(((total_DSBh2 / number) - pow(total_DSBh / number,2)))/(number -1));
// Measure the Deposited Energy in the whole volume that includes DNA chain (chromosome)
@@ -348,7 +360,7 @@ dose = acc_edep * eVtoJ / mass;
// It changes Mbp to Gbp. Some other changes may be needed in graphs section (name of axes)
double norm = 1;
// Calculate the yields, together with their standard deviation
// Calculate the yields, together with their error
EB_yield = (Double_t) total_EB / dose / Nbp;
ES_yield = (Double_t) total_ES / dose / Nbp;
OHB_yield = (Double_t) total_OHB / dose / Nbp;
+1 -1
View File
@@ -104,4 +104,4 @@
/gps/energy 9.999 keV
# Beam on
/run/beamOn 10
/run/beamOn 500
@@ -0,0 +1,133 @@
### Single DNA fiber visualization
#
# See more details on moleculardna specific UI commands:
# - https://geant4-dna.github.io/molecular-docs/docs/overview/configuration
# - https://geant4-dna.github.io/molecular-docs/docs/overview/macro-anatomy
# - the README file
# - the messenger classes of the moleculardna example
#
# Verbosity: settings
/control/verbose 1
/run/verbose 2
/material/verbose 2
/dnageom/verbose 1
# Chemistry: selection of IRT_syn
/process/chem/TimeStepModel IRT_syn
# Chemistry: activation
/chem/activate false
# Chemistry: verbosity
/scheduler/verbose 0
# Chemistry: end time of chemistry stage
/scheduler/endTime 1 us
# Geometry: size of World volume
/world/worldSize 300 nm
# Geometry: size of cell volume
# See https://geant4-dna.github.io/molecular-docs/docs/examples/parameter-study
/cell/radiusSize 100 100 100 nm
# Geometry: optimisation of voxelisation
/dnageom/setSmartVoxels 1
# Geometry: check overlaps in DNA geometry region
/dnageom/checkOverlaps false
# Geometry: creation
# See https://geant4-dna.github.io/molecular-docs/docs/examples/parameter-study
# - Side length for each placement
/dnageom/placementSize 30 30 100 nm
# - Scaling of XYZ in fractal definition file
/dnageom/fractalScaling 1 1 1 nm
# - Path to file that defines placement locations
/dnageom/definitionFile geometries/prisms1.txt
# - Set a placement volume
/dnageom/placementVolume prism geometries/straight-216-0.txt
# Geometry: take the angles in the voxel placement file as multiples of pi
/dnageom/setVoxelPlacementAnglesAsMultiplesOfPi false
# Geometry: enable custom molecule sizes
/dnageom/useCustomMoleculeSizes false
# Geometry: draw cell/chromosome volumes rather than DNA
/dnageom/drawCellVolumes false
# Geometry: distance from base pairs at which radicals are killed
/dnageom/radicalKillDistance 9 nm
# Geometry: deposited energy accumulation range limit to start recording SBs from direct effects
/dnageom/interactionDirectRange 6 angstrom
# Geometry: activate Histone scavenging function
/dnageom/activateHistoneScavenging true
# Damage: model settings
/dnadamage/directDamageLower 17.5 eV
/dnadamage/directDamageUpper 17.5 eV
/dnadamage/indirectOHBaseChance 1.0
/dnadamage/indirectOHStrandChance 0.65
/dnadamage/inductionOHChance 0.0
/dnadamage/indirectHBaseChance 1.0
/dnadamage/indirectHStrandChance 0.65
/dnadamage/inductionHChance 0.0
/dnadamage/indirectEaqBaseChance 1.0
/dnadamage/indirectEaqStrandChance 0.65
/dnadamage/inductionEaqChance 0.0
# Analysis: add spherical chromosomal region of interest, with the name "fiber"
/chromosome/add fiber sphere 2000 0 0 0 nm
# Analysis: set whether strands ought be saved
/analysisDNA/saveStrands false
# Analysis: gap between DNA fragments in base pair
# Set to zero to score placement volumes independently
/analysisDNA/fragmentGap 0
# Analysis: save the position of hits histones only on one chain
#/analysisDNA/diagnosticChain
# Run: initialization
/run/initialize
# Visualization: to visualize fiber DNA geometry
# - uncomment the next line and save
/control/execute vis.mac
# - then, run ./moleculardna -t 1 -v 1
# - then, in the Session window of the Qt interface, do /control/execute fiber.mac
# Unit tests only
#/dnatests/uniqueid
#/dnatests/basepairs
#/dnatests/chromosome
#/analysisDNA/testClassifier
# End unit tests
# Run: progress display
/run/printProgress 100
# Source geometry
#/gps/pos/type Volume
#/gps/pos/shape Sphere
#/gps/pos/radius 500 nm
#/gps/pos/centre 0 0 0 nm
# Source particle, energy and angular distribution
/gps/particle e-
/gps/energy 100 eV
/gps/ang/type iso
# Beam on
/tracking/verbose 0
/run/beamOn 10
+55 -42
View File
@@ -1,16 +1,15 @@
//-------------------------------------------------------------------------------//
// This macrofile was developed by Konstantinos Chatzipapas at LP2iB (ex. CENBG) //
// in collaboration with the whole team of molecularDNA Geant4-DNA example //
// Publication: .................................... //
// For any question please contact through: //
// chatzipa@cenbg.in2p3.fr (or k.chatzipapas@yahoo.com) //
// k.chatzipapas@yahoo.com //
//-------------------------------------------------------------------------------//
//
// This macro requires the molecular-dna.root file generated from molecularDNA example
// To run this file just insert this command to the terminal:
// root .X analysis.C
// root .X human_cell.C
// ROOT6.x should be installed
//
//***************************************//
// Please define the parameters below //
// ifile, r3, Nbp (as shown in terminal) //
@@ -100,7 +99,7 @@ Int_t EB, ES, OHB, OHS, HB, HS, FL;
Int_t total_EB, total_ES, total_OHB, total_OHS, total_HB, total_HS, total_FL;
Float_t total_EB2, total_ES2, total_OHB2, total_OHS2, total_HB2, total_HS2, total_FL2;
Float_t SD_EB, SD_ES, SD_OHB, SD_OHS, SD_HB, SD_HS;
Float_t SD_SSB, SD_SSBp, SD_SSB2p, SD_sSSB, SD_SSBd, SD_SSBi;
Float_t SD_SSB, SD_SSBp, SD_SSB2p, SD_sSSB, SD_SSBd, SD_SSBi, SD_SSBm;
Float_t SD_DSB, SD_DSBp, SD_DSBpp, SD_sDSB, SD_DSBd, SD_DSBi, SD_DSBm, SD_DSBh;
Int_t SSB, SSBp, SSB2p;
@@ -160,6 +159,11 @@ char *type= new char[256];
TTree* tree = (TTree*) f->Get("tuples/primary_source");
Float_t number = (Float_t) tree->GetEntries();
if (number<2) {
std::cout << "Not enough entries in the \"primary_source\" TTree (" << (long)number << " entries)\n";
gApplication->Terminate(0);
}
vector<pair<int,int64_t>> DSBBPID;
// For reading species production
@@ -200,26 +204,35 @@ for(int i = 0;i<nentries;i++){
}
// Sort DSBs from the one with lower ID value to the one with higher ID value
// Then find the number of fragments that have been produced
sort(DSBBPID.begin(), DSBBPID.end(), smallerPair);
for(int ie = 0;ie<DSBBPID.size()-1;ie++){
int64_t dsbfragment = DSBBPID[ie+1].second-DSBBPID[ie].second;
// Find the number of fragments that have been produced, but first test if there are enough breaks.
// If no more than 2 DSBs exist in the DSBBPID vector ( DSBBPID.size() is 0 or 1 ),
// the subtraction DSBBPID.size() - 1 makes the loop condition evaluate to ie < -1 (in unsigned terms,
// this becomes a large number, which is incorrect) and leads to undefined behavior (crash).
if (DSBBPID.size() < 2) {
std::cerr << "Not enough damage to create fragments distribution." << std::endl;
//return;
}
if (DSBBPID.size() >= 2) {
// Sort DSBs from the one with lower ID value to the one with higher ID value
sort(DSBBPID.begin(), DSBBPID.end(), smallerPair);
for(int ie = 0;ie<DSBBPID.size()-1;ie++){
int64_t dsbfragment = DSBBPID[ie+1].second-DSBBPID[ie].second;
double val = (double)dsbfragment/1000.;
double meanw = h1fragments->GetBinCenter(h1fragments->FindBin(val));
double binw = h1fragments->GetBinWidth (h1fragments->FindBin(val));
h1fragments->Fill(val,1./binw/1000);//bp-1
//cout <<"val:"<<val<<endl;
}
double val = (double)dsbfragment/1000.;
double meanw = h1fragments->GetBinCenter(h1fragments->FindBin(val));
double binw = h1fragments->GetBinWidth (h1fragments->FindBin(val));
h1fragments->Fill(val,1./binw/1000);//bp-1
//cout <<"val:"<<val<<endl;
}
}
// Calculate the standard deviation of species
SD_EB = sqrt(((total_EB2 / number) - pow(total_EB / number,2))/(number -1));
SD_ES = sqrt(((total_ES2 / number) - pow(total_ES / number,2))/(number -1));
SD_OHB = sqrt(((total_OHB2 / number) - pow(total_OHB / number,2))/(number -1));
SD_OHS = sqrt(((total_OHS2 / number) - pow(total_OHS / number,2))/(number -1));
SD_HB = sqrt(((total_HB2 / number) - pow(total_HB / number,2))/(number -1));
SD_HS = sqrt(((total_HS2 / number) - pow(total_HS / number,2))/(number -1));
// Calculate the SEM
SD_EB = sqrt(abs(((total_EB2 / number) - pow(total_EB / number,2)))/(number -1));
SD_ES = sqrt(abs(((total_ES2 / number) - pow(total_ES / number,2)))/(number -1));
SD_OHB = sqrt(abs(((total_OHB2 / number) - pow(total_OHB / number,2)))/(number -1));
SD_OHS = sqrt(abs(((total_OHS2 / number) - pow(total_OHS / number,2)))/(number -1));
SD_HB = sqrt(abs(((total_HB2 / number) - pow(total_HB / number,2)))/(number -1));
SD_HS = sqrt(abs(((total_HS2 / number) - pow(total_HS / number,2)))/(number -1));
// Read damage classification SSB, SSB+, 2SSB, DSB, DSB+, DSB++
// As they have been defined in: Nikjoo, H., ONeill, O., Goodhead, T., & Terrissol, M. 1997,
@@ -256,14 +269,14 @@ for(int i = 0;i<nentriesC;i++){
}
// Calculate the standard deviation
SD_SSB = sqrt(((total_SSB2 / number) - pow(total_SSB / number,2))/(number -1));
SD_SSBp = sqrt(((total_SSBp2 / number) - pow(total_SSBp / number,2))/(number -1));
SD_SSB2p = sqrt(((total_SSB2p2 / number) - pow(total_SSB2p / number,2))/(number -1));
// Calculate the SEM
SD_SSB = sqrt(abs(((total_SSB2 / number) - pow(total_SSB / number,2)))/(number -1));
SD_SSBp = sqrt(abs(((total_SSBp2 / number) - pow(total_SSBp / number,2)))/(number -1));
SD_SSB2p = sqrt(abs(((total_SSB2p2 / number) - pow(total_SSB2p / number,2)))/(number -1));
SD_DSB = sqrt(((total_DSB2 / number) - pow(total_DSB / number,2))/(number -1));
SD_DSBp = sqrt(((total_DSBp2 / number) - pow(total_DSBp / number,2))/(number -1));
SD_DSBpp = sqrt(((total_DSBpp2 / number) - pow(total_DSBpp / number,2))/(number -1));
SD_DSB = sqrt(abs(((total_DSB2 / number) - pow(total_DSB / number,2)))/(number -1));
SD_DSBp = sqrt(abs(((total_DSBp2 / number) - pow(total_DSBp / number,2)))/(number -1));
SD_DSBpp = sqrt(abs(((total_DSBpp2 / number) - pow(total_DSBpp / number,2)))/(number -1));
// Read damage classification SSBd, SSBi, SSBm, DSBd, DSBi, DSBm, DSBh
// As they have been defined in: Nikjoo, H., ONeill, O., Goodhead, T., & Terrissol, M. 1997,
@@ -306,17 +319,17 @@ for(int i = 0;i<nentriesS;i++){
}
// Calculate the standard deviation
SD_sSSB = sqrt(((total_sSSB2 / number) - pow(total_sSSB / number,2))/(number -1));
SD_SSBd = sqrt(((total_SSBd2 / number) - pow(total_SSBd / number,2))/(number -1));
SD_SSBi = sqrt(((total_SSBi2 / number) - pow(total_SSBi / number,2))/(number -1));
SD_SSBm = sqrt(((total_SSBm2 / number) - pow(total_SSBm / number,2))/(number -1));
// Calculate the SEM
SD_sSSB = sqrt(abs(((total_sSSB2 / number) - pow(total_sSSB / number,2)))/(number -1));
SD_SSBd = sqrt(abs(((total_SSBd2 / number) - pow(total_SSBd / number,2)))/(number -1));
SD_SSBi = sqrt(abs(((total_SSBi2 / number) - pow(total_SSBi / number,2)))/(number -1));
SD_SSBm = sqrt(abs(((total_SSBm2 / number) - pow(total_SSBm / number,2)))/(number -1));
SD_sDSB = sqrt(((total_sDSB2 / number) - pow(total_sDSB / number,2))/(number -1));
SD_DSBd = sqrt(((total_DSBd2 / number) - pow(total_DSBd / number,2))/(number -1));
SD_DSBi = sqrt(((total_DSBi2 / number) - pow(total_DSBi / number,2))/(number -1));
SD_DSBm = sqrt(((total_DSBm2 / number) - pow(total_DSBm / number,2))/(number -1));
SD_DSBh = sqrt(((total_DSBh2 / number) - pow(total_DSBh / number,2))/(number -1));
SD_sDSB = sqrt(abs(((total_sDSB2 / number) - pow(total_sDSB / number,2)))/(number -1));
SD_DSBd = sqrt(abs(((total_DSBd2 / number) - pow(total_DSBd / number,2)))/(number -1));
SD_DSBi = sqrt(abs(((total_DSBi2 / number) - pow(total_DSBi / number,2)))/(number -1));
SD_DSBm = sqrt(abs(((total_DSBm2 / number) - pow(total_DSBm / number,2)))/(number -1));
SD_DSBh = sqrt(abs(((total_DSBh2 / number) - pow(total_DSBh / number,2)))/(number -1));
// Measure the Deposited Energy in the whole volume that includes DNA chain (chromosome)
@@ -348,7 +361,7 @@ dose = acc_edep * eVtoJ / mass;
// It changes Mbp to Gbp. Some other changes may be needed in graphs section (name of axes)
double norm = 1000;
// Calculate the yields, together with their standard deviation
// Calculate the yields, together with their error
EB_yield = (Double_t) total_EB / dose / Nbp;
ES_yield = (Double_t) total_ES / dose / Nbp;
OHB_yield = (Double_t) total_OHB / dose / Nbp;
@@ -1,17 +1,20 @@
//-------------------------------------------------------------------------------//
// This macrofile was developed by Konstantinos Chatzipapas at LP2iB (ex. CENBG) //
// in collaboration with the whole team of molecularDNA Geant4-DNA example //
// Publication: K. Chatzipapas, et al., Phys. Med. 112 (2023) 102613 //
// For any question please contact through: //
// chatzipa@cenbg.in2p3.fr //
// k.chatzipapas@yahoo.com //
//-------------------------------------------------------------------------------//
//
// This macro requires the molecular-dna.root file generated from molecularDNA example
// To run this file just insert this command to the terminal:
// root .X human_cell_alphas.C
// ROOT6.x should be installed
//
{
//*******************************************************************************//
// If you need to add multiple root outputs, by multithreading, use this command:
// system ("hadd -O -f molecular-dna.root molecular-dna_t*.root");
system ("hadd -O -f molecular-dna.root molecular-dna_t*.root");
// Define these parameters of the simulation
char ifile[256] = "molecular-dna.root"; // input filepath to be replaced
@@ -99,7 +102,7 @@ Int_t EB, ES, OHB, OHS, HB, HS, FL;
Int_t total_EB, total_ES, total_OHB, total_OHS, total_HB, total_HS, total_FL;
Float_t total_EB2, total_ES2, total_OHB2, total_OHS2, total_HB2, total_HS2, total_FL2;
Float_t SD_EB, SD_ES, SD_OHB, SD_OHS, SD_HB, SD_HS;
Float_t SD_SSB, SD_SSBp, SD_SSB2p, SD_sSSB, SD_SSBd, SD_SSBi;
Float_t SD_SSB, SD_SSBp, SD_SSB2p, SD_sSSB, SD_SSBd, SD_SSBi, SD_SSBm;
Float_t SD_DSB, SD_DSBp, SD_DSBpp, SD_sDSB, SD_DSBd, SD_DSBi, SD_DSBm, SD_DSBh;
Int_t SSB, SSBp, SSB2p;
@@ -159,6 +162,11 @@ char *type= new char[256];
TTree* tree = (TTree*) f->Get("tuples/primary_source");
Float_t number = (Float_t) tree->GetEntries();
if (number<2) {
std::cout << "Not enough entries in the \"primary_source\" TTree (" << (long)number << " entries)\n";
gApplication->Terminate(0);
}
vector<pair<int,int64_t>> DSBBPID;
// For reading species production
@@ -199,26 +207,35 @@ for(int i = 0;i<nentries;i++){
}
// Sort DSBs from the one with lower ID value to the one with higher ID value
// Then find the number of fragments that have been produced
sort(DSBBPID.begin(), DSBBPID.end(), smallerPair);
for(int ie = 0;ie<DSBBPID.size()-1;ie++){
int64_t dsbfragment = DSBBPID[ie+1].second-DSBBPID[ie].second;
// Find the number of fragments that have been produced, but first test if there are enough breaks.
// If no more than 2 DSBs exist in the DSBBPID vector ( DSBBPID.size() is 0 or 1 ),
// the subtraction DSBBPID.size() - 1 makes the loop condition evaluate to ie < -1 (in unsigned terms,
// this becomes a large number, which is incorrect) and leads to undefined behavior (crash).
if (DSBBPID.size() < 2) {
std::cerr << "Not enough damage to create fragments distribution." << std::endl;
//return;
}
if (DSBBPID.size() >= 2) {
// Sort DSBs from the one with lower ID value to the one with higher ID value
sort(DSBBPID.begin(), DSBBPID.end(), smallerPair);
for(int ie = 0;ie<DSBBPID.size()-1;ie++){
int64_t dsbfragment = DSBBPID[ie+1].second-DSBBPID[ie].second;
double val = (double)dsbfragment/1000.;
double meanw = h1fragments->GetBinCenter(h1fragments->FindBin(val));
double binw = h1fragments->GetBinWidth (h1fragments->FindBin(val));
h1fragments->Fill(val,1./binw/1000);//bp-1
//cout <<"val:"<<val<<endl;
}
double val = (double)dsbfragment/1000.;
double meanw = h1fragments->GetBinCenter(h1fragments->FindBin(val));
double binw = h1fragments->GetBinWidth (h1fragments->FindBin(val));
h1fragments->Fill(val,1./binw/1000);//bp-1
//cout <<"val:"<<val<<endl;
}
}
// Calculate the standard deviation of species
SD_EB = sqrt(((total_EB2 / number) - pow(total_EB / number,2))/(number -1));
SD_ES = sqrt(((total_ES2 / number) - pow(total_ES / number,2))/(number -1));
SD_OHB = sqrt(((total_OHB2 / number) - pow(total_OHB / number,2))/(number -1));
SD_OHS = sqrt(((total_OHS2 / number) - pow(total_OHS / number,2))/(number -1));
SD_HB = sqrt(((total_HB2 / number) - pow(total_HB / number,2))/(number -1));
SD_HS = sqrt(((total_HS2 / number) - pow(total_HS / number,2))/(number -1));
// Calculate the SEM
SD_EB = sqrt(abs(((total_EB2 / number) - pow(total_EB / number,2)))/(number -1));
SD_ES = sqrt(abs(((total_ES2 / number) - pow(total_ES / number,2)))/(number -1));
SD_OHB = sqrt(abs(((total_OHB2 / number) - pow(total_OHB / number,2)))/(number -1));
SD_OHS = sqrt(abs(((total_OHS2 / number) - pow(total_OHS / number,2)))/(number -1));
SD_HB = sqrt(abs(((total_HB2 / number) - pow(total_HB / number,2)))/(number -1));
SD_HS = sqrt(abs(((total_HS2 / number) - pow(total_HS / number,2)))/(number -1));
// Read damage classification SSB, SSB+, 2SSB, DSB, DSB+, DSB++
// As they have been defined in: Nikjoo, H., ONeill, O., Goodhead, T., & Terrissol, M. 1997,
@@ -258,14 +275,14 @@ for(int i = 0;i<nentriesC;i++){
}
// Calculate the standard deviation
SD_SSB = sqrt(((total_SSB2 / number) - pow(total_SSB / number,2))/(number -1));
SD_SSBp = sqrt(((total_SSBp2 / number) - pow(total_SSBp / number,2))/(number -1));
SD_SSB2p = sqrt(((total_SSB2p2 / number) - pow(total_SSB2p / number,2))/(number -1));
// Calculate the SEM
SD_SSB = sqrt(abs(((total_SSB2 / number) - pow(total_SSB / number,2)))/(number -1));
SD_SSBp = sqrt(abs(((total_SSBp2 / number) - pow(total_SSBp / number,2)))/(number -1));
SD_SSB2p = sqrt(abs(((total_SSB2p2 / number) - pow(total_SSB2p / number,2)))/(number -1));
SD_DSB = sqrt(((total_DSB2 / number) - pow(total_DSB / number,2))/(number -1));
SD_DSBp = sqrt(((total_DSBp2 / number) - pow(total_DSBp / number,2))/(number -1));
SD_DSBpp = sqrt(((total_DSBpp2 / number) - pow(total_DSBpp / number,2))/(number -1));
SD_DSB = sqrt(abs(((total_DSB2 / number) - pow(total_DSB / number,2)))/(number -1));
SD_DSBp = sqrt(abs(((total_DSBp2 / number) - pow(total_DSBp / number,2)))/(number -1));
SD_DSBpp = sqrt(abs(((total_DSBpp2 / number) - pow(total_DSBpp / number,2)))/(number -1));
// Read damage classification SSBd, SSBi, SSBm, DSBd, DSBi, DSBm, DSBh
// As they have been defined in: Nikjoo, H., ONeill, O., Goodhead, T., & Terrissol, M. 1997,
@@ -308,17 +325,17 @@ for(int i = 0;i<nentriesS;i++){
}
// Calculate the standard deviation
SD_sSSB = sqrt(((total_sSSB2 / number) - pow(total_sSSB / number,2))/(number -1));
SD_SSBd = sqrt(((total_SSBd2 / number) - pow(total_SSBd / number,2))/(number -1));
SD_SSBi = sqrt(((total_SSBi2 / number) - pow(total_SSBi / number,2))/(number -1));
SD_SSBm = sqrt(((total_SSBm2 / number) - pow(total_SSBm / number,2))/(number -1));
// Calculate the SEM
SD_sSSB = sqrt(abs(((total_sSSB2 / number) - pow(total_sSSB / number,2)))/(number -1));
SD_SSBd = sqrt(abs(((total_SSBd2 / number) - pow(total_SSBd / number,2)))/(number -1));
SD_SSBi = sqrt(abs(((total_SSBi2 / number) - pow(total_SSBi / number,2)))/(number -1));
SD_SSBm = sqrt(abs(((total_SSBm2 / number) - pow(total_SSBm / number,2)))/(number -1));
SD_sDSB = sqrt(((total_sDSB2 / number) - pow(total_sDSB / number,2))/(number -1));
SD_DSBd = sqrt(((total_DSBd2 / number) - pow(total_DSBd / number,2))/(number -1));
SD_DSBi = sqrt(((total_DSBi2 / number) - pow(total_DSBi / number,2))/(number -1));
SD_DSBm = sqrt(((total_DSBm2 / number) - pow(total_DSBm / number,2))/(number -1));
SD_DSBh = sqrt(((total_DSBh2 / number) - pow(total_DSBh / number,2))/(number -1));
SD_sDSB = sqrt(abs(((total_sDSB2 / number) - pow(total_sDSB / number,2)))/(number -1));
SD_DSBd = sqrt(abs(((total_DSBd2 / number) - pow(total_DSBd / number,2)))/(number -1));
SD_DSBi = sqrt(abs(((total_DSBi2 / number) - pow(total_DSBi / number,2)))/(number -1));
SD_DSBm = sqrt(abs(((total_DSBm2 / number) - pow(total_DSBm / number,2)))/(number -1));
SD_DSBh = sqrt(abs(((total_DSBh2 / number) - pow(total_DSBh / number,2)))/(number -1));
// Measure the Deposited Energy in the whole volume that includes DNA chain
@@ -351,7 +368,7 @@ cout << acc_edep << "\n";
// It changes Mbp to Gbp. Some other changes may be needed in graphs section (name of axes)
double norm = 1000;
// Calculate the yields, together with their standard deviation
// Calculate the yields, together with their error
EB_yield = (Double_t) total_EB / dose / Nbp;
ES_yield = (Double_t) total_ES / dose / Nbp;
OHB_yield = (Double_t) total_OHB / dose / Nbp;
@@ -1,15 +1,15 @@
//-------------------------------------------------------------------------------//
// This macrofile was developed by Konstantinos Chatzipapas at LP2iB (ex. CENBG) //
// in collaboration with the whole team of molecularDNA Geant4-DNA example //
// Publication: .................................... //
// For any question please contact through: //
// chatzipa@cenbg.in2p3.fr (or k.chatzipapas@yahoo.com) //
// k.chatzipapas@yahoo.com //
//-------------------------------------------------------------------------------//
//
// This macro requires the molecular-dna.root file generated from molecularDNA example
// To run this file just insert this command to the terminal:
// root .X analysis.C
// root .X human_cell_chromosomes.C
// ROOT6.x should be installed
//
//***************************************//
// Please define the parameters below //
@@ -100,7 +100,7 @@ Int_t EB, ES, OHB, OHS, HB, HS, FL;
Int_t total_EB, total_ES, total_OHB, total_OHS, total_HB, total_HS, total_FL;
Float_t total_EB2, total_ES2, total_OHB2, total_OHS2, total_HB2, total_HS2, total_FL2;
Float_t SD_EB, SD_ES, SD_OHB, SD_OHS, SD_HB, SD_HS;
Float_t SD_SSB, SD_SSBp, SD_SSB2p, SD_sSSB, SD_SSBd, SD_SSBi;
Float_t SD_SSB, SD_SSBp, SD_SSB2p, SD_sSSB, SD_SSBd, SD_SSBi, SD_SSBm;
Float_t SD_DSB, SD_DSBp, SD_DSBpp, SD_sDSB, SD_DSBd, SD_DSBi, SD_DSBm, SD_DSBh;
Int_t SSB, SSBp, SSB2p;
@@ -160,6 +160,11 @@ char *type= new char[256];
TTree* tree = (TTree*) f->Get("tuples/primary_source");
Float_t number = (Float_t) tree->GetEntries();
if (number<2) {
std::cout << "Not enough entries in the \"primary_source\" TTree (" << (long)number << " entries)\n";
gApplication->Terminate(0);
}
vector<pair<int,int64_t>> DSBBPID;
// For reading species production
@@ -200,26 +205,35 @@ for(int i = 0;i<nentries;i++){
}
// Sort DSBs from the one with lower ID value to the one with higher ID value
// Then find the number of fragments that have been produced
sort(DSBBPID.begin(), DSBBPID.end(), smallerPair);
for(int ie = 0;ie<DSBBPID.size()-1;ie++){
int64_t dsbfragment = DSBBPID[ie+1].second-DSBBPID[ie].second;
// Find the number of fragments that have been produced, but first test if there are enough breaks.
// If no more than 2 DSBs exist in the DSBBPID vector ( DSBBPID.size() is 0 or 1 ),
// the subtraction DSBBPID.size() - 1 makes the loop condition evaluate to ie < -1 (in unsigned terms,
// this becomes a large number, which is incorrect) and leads to undefined behavior (crash).
if (DSBBPID.size() < 2) {
std::cerr << "Not enough damage to create fragments distribution." << std::endl;
//return;
}
if (DSBBPID.size() >= 2) {
// Sort DSBs from the one with lower ID value to the one with higher ID value
sort(DSBBPID.begin(), DSBBPID.end(), smallerPair);
for(int ie = 0;ie<DSBBPID.size()-1;ie++){
int64_t dsbfragment = DSBBPID[ie+1].second-DSBBPID[ie].second;
double val = (double)dsbfragment/1000.;
double meanw = h1fragments->GetBinCenter(h1fragments->FindBin(val));
double binw = h1fragments->GetBinWidth (h1fragments->FindBin(val));
h1fragments->Fill(val,1./binw/1000);//bp-1
//cout <<"val:"<<val<<endl;
}
double val = (double)dsbfragment/1000.;
double meanw = h1fragments->GetBinCenter(h1fragments->FindBin(val));
double binw = h1fragments->GetBinWidth (h1fragments->FindBin(val));
h1fragments->Fill(val,1./binw/1000);//bp-1
//cout <<"val:"<<val<<endl;
}
}
// Calculate the standard deviation of species
SD_EB = sqrt(((total_EB2 / number) - pow(total_EB / number,2))/(number -1));
SD_ES = sqrt(((total_ES2 / number) - pow(total_ES / number,2))/(number -1));
SD_OHB = sqrt(((total_OHB2 / number) - pow(total_OHB / number,2))/(number -1));
SD_OHS = sqrt(((total_OHS2 / number) - pow(total_OHS / number,2))/(number -1));
SD_HB = sqrt(((total_HB2 / number) - pow(total_HB / number,2))/(number -1));
SD_HS = sqrt(((total_HS2 / number) - pow(total_HS / number,2))/(number -1));
// Calculate the SEM
SD_EB = sqrt(abs(((total_EB2 / number) - pow(total_EB / number,2)))/(number -1));
SD_ES = sqrt(abs(((total_ES2 / number) - pow(total_ES / number,2)))/(number -1));
SD_OHB = sqrt(abs(((total_OHB2 / number) - pow(total_OHB / number,2)))/(number -1));
SD_OHS = sqrt(abs(((total_OHS2 / number) - pow(total_OHS / number,2)))/(number -1));
SD_HB = sqrt(abs(((total_HB2 / number) - pow(total_HB / number,2)))/(number -1));
SD_HS = sqrt(abs(((total_HS2 / number) - pow(total_HS / number,2)))/(number -1));
// Read damage classification SSB, SSB+, 2SSB, DSB, DSB+, DSB++
// As they have been defined in: Nikjoo, H., ONeill, O., Goodhead, T., & Terrissol, M. 1997,
@@ -256,14 +270,14 @@ for(int i = 0;i<nentriesC;i++){
}
// Calculate the standard deviation
SD_SSB = sqrt(((total_SSB2 / number) - pow(total_SSB / number,2))/(number -1));
SD_SSBp = sqrt(((total_SSBp2 / number) - pow(total_SSBp / number,2))/(number -1));
SD_SSB2p = sqrt(((total_SSB2p2 / number) - pow(total_SSB2p / number,2))/(number -1));
// Calculate the SEM
SD_SSB = sqrt(abs(((total_SSB2 / number) - pow(total_SSB / number,2)))/(number -1));
SD_SSBp = sqrt(abs(((total_SSBp2 / number) - pow(total_SSBp / number,2)))/(number -1));
SD_SSB2p = sqrt(abs(((total_SSB2p2 / number) - pow(total_SSB2p / number,2)))/(number -1));
SD_DSB = sqrt(((total_DSB2 / number) - pow(total_DSB / number,2))/(number -1));
SD_DSBp = sqrt(((total_DSBp2 / number) - pow(total_DSBp / number,2))/(number -1));
SD_DSBpp = sqrt(((total_DSBpp2 / number) - pow(total_DSBpp / number,2))/(number -1));
SD_DSB = sqrt(abs(((total_DSB2 / number) - pow(total_DSB / number,2)))/(number -1));
SD_DSBp = sqrt(abs(((total_DSBp2 / number) - pow(total_DSBp / number,2)))/(number -1));
SD_DSBpp = sqrt(abs(((total_DSBpp2 / number) - pow(total_DSBpp / number,2)))/(number -1));
// Read damage classification SSBd, SSBi, SSBm, DSBd, DSBi, DSBm, DSBh
// As they have been defined in: Nikjoo, H., ONeill, O., Goodhead, T., & Terrissol, M. 1997,
@@ -306,17 +320,17 @@ for(int i = 0;i<nentriesS;i++){
}
// Calculate the standard deviation
SD_sSSB = sqrt(((total_sSSB2 / number) - pow(total_sSSB / number,2))/(number -1));
SD_SSBd = sqrt(((total_SSBd2 / number) - pow(total_SSBd / number,2))/(number -1));
SD_SSBi = sqrt(((total_SSBi2 / number) - pow(total_SSBi / number,2))/(number -1));
SD_SSBm = sqrt(((total_SSBm2 / number) - pow(total_SSBm / number,2))/(number -1));
// Calculate the SEM
SD_sSSB = sqrt(abs(((total_sSSB2 / number) - pow(total_sSSB / number,2)))/(number -1));
SD_SSBd = sqrt(abs(((total_SSBd2 / number) - pow(total_SSBd / number,2)))/(number -1));
SD_SSBi = sqrt(abs(((total_SSBi2 / number) - pow(total_SSBi / number,2)))/(number -1));
SD_SSBm = sqrt(abs(((total_SSBm2 / number) - pow(total_SSBm / number,2)))/(number -1));
SD_sDSB = sqrt(((total_sDSB2 / number) - pow(total_sDSB / number,2))/(number -1));
SD_DSBd = sqrt(((total_DSBd2 / number) - pow(total_DSBd / number,2))/(number -1));
SD_DSBi = sqrt(((total_DSBi2 / number) - pow(total_DSBi / number,2))/(number -1));
SD_DSBm = sqrt(((total_DSBm2 / number) - pow(total_DSBm / number,2))/(number -1));
SD_DSBh = sqrt(((total_DSBh2 / number) - pow(total_DSBh / number,2))/(number -1));
SD_sDSB = sqrt(abs(((total_sDSB2 / number) - pow(total_sDSB / number,2)))/(number -1));
SD_DSBd = sqrt(abs(((total_DSBd2 / number) - pow(total_DSBd / number,2)))/(number -1));
SD_DSBi = sqrt(abs(((total_DSBi2 / number) - pow(total_DSBi / number,2)))/(number -1));
SD_DSBm = sqrt(abs(((total_DSBm2 / number) - pow(total_DSBm / number,2)))/(number -1));
SD_DSBh = sqrt(abs(((total_DSBh2 / number) - pow(total_DSBh / number,2)))/(number -1));
// Measure the Deposited Energy in the whole volume that includes DNA chain (chromosome)
@@ -348,7 +362,7 @@ dose = acc_edep * eVtoJ / mass;
// It changes Mbp to Gbp. Some other changes may be needed in graphs section (name of axes)
double norm = 1000;
// Calculate the yields, together with their standard deviation
// Calculate the yields, together with their error
EB_yield = (Double_t) total_EB / dose / Nbp;
ES_yield = (Double_t) total_ES / dose / Nbp;
OHB_yield = (Double_t) total_OHB / dose / Nbp;
@@ -285,7 +285,7 @@ std::size_t constexpr Hash<const char*>(const char*&& str)
inline namespace literals
{
std::size_t constexpr operator"" _hash(const char* s, size_t)
std::size_t constexpr operator""_hash(const char* s, size_t)
{
return hasher<std::string>()(s);
}
@@ -53,7 +53,7 @@ class G4Material;
class DetectorConstruction : public G4VUserDetectorConstruction
{
public:
DetectorConstruction();
DetectorConstruction(G4int vis);
~DetectorConstruction() override;
@@ -40,7 +40,7 @@ class G4VPhysicsConstructor;
class PhysicsList : public G4VModularPhysicsList
{
public:
explicit PhysicsList(G4int list);
explicit PhysicsList(G4int list, G4int vis);
~PhysicsList() override = default;
};
@@ -47,7 +47,7 @@ namespace
void PrintUsage()
{
G4cout << " Usage: " << G4endl;
G4cout << " molecular [-m macro ] [-t nThreads] [-p PhysicsList]" << G4endl;
G4cout << " molecular [-m macro ] [-t nThreads] [-p PhysicsList] [-v vis]" << G4endl;
G4cout << " -p is the G4DNA Physics List option. Default (0) is"
<< " G4EmDNAPhysics" << G4endl;
G4cout << " note: -t option is available only for multi-threaded mode." << G4endl;
@@ -56,13 +56,14 @@ void PrintUsage()
int main(int argc, char** argv)
{
if (argc > 7) {
if (argc > 10) {
PrintUsage();
return 1;
}
G4String macro;
G4int phys_option = 2;
G4int vis_option = 0;
G4int nThreads = 2;
for (G4int ii = 1; ii < argc; ii = ii + 2) {
@@ -75,6 +76,9 @@ int main(int argc, char** argv)
else if (G4String(argv[ii]) == "-t") {
nThreads = G4UIcommand::ConvertToInt(argv[ii + 1]);
}
else if (G4String(argv[ii]) == "-v") {
vis_option = G4UIcommand::ConvertToInt(argv[ii + 1]);
}
else {
PrintUsage();
return 1;
@@ -98,8 +102,8 @@ int main(int argc, char** argv)
runManager->SetNumberOfThreads(nThreads);
}
runManager->SetUserInitialization(new DetectorConstruction());
G4VModularPhysicsList* physicsList = new PhysicsList(phys_option);
runManager->SetUserInitialization(new DetectorConstruction(vis_option));
G4VModularPhysicsList* physicsList = new PhysicsList(phys_option, vis_option);
runManager->SetUserInitialization(physicsList);
runManager->SetUserInitialization(new ActionInitialization());
G4DNAChemistryManager::Instance()->Initialize();
@@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo
**************************************************************
Geant4 version Name: geant4-11-03-patch-02 (25-April-2025)
Geant4 version Name: geant4-11-03-ref-06 (30-June-2025)
Copyright : Geant4 Collaboration
References : NIM A 506 (2003), 250-303
: IEEE-TNS 53 (2006), 270-278
@@ -38,7 +38,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo
/dnageom/useCustomMoleculeSizes false
/dnageom/drawCellVolumes false
/dnageom/radicalKillDistance 9 nm
/dnageom/interactionDirectRange 7 angstrom
/dnageom/interactionDirectRange 6 angstrom
/dnageom/activateHistoneScavenging true
/dnadamage/directDamageLower 17.5 eV
/dnadamage/directDamageUpper 17.5 eV
@@ -133,7 +133,7 @@ Lowest triplet kinetic energy 1 MeV
Enable sampling of gamma linear polarisation 0
5D gamma conversion model type 0
5D gamma conversion model on isolated ion 0
Use Ricardo-Gerardo pair production model 0
Use RiGe 5D e+e- pair production model by muons 0
Livermore data directory epics_2017
=======================================================================
====== Ionisation Parameters ========
@@ -340,7 +340,9 @@ DNARPWBAIonisationModel : Emin= 100 MeV Emax= 300 MeV deltaBorn Fluo
proton_G4DNAChargeDecrease: for proton SubType=56 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 600 MeV
DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 100 MeV
DummyModel : Emin= 100 MeV Emax= 600 MeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
msc: for GenericIon SubType= 10
===== EM models for the G4Region DefaultRegionForTheWorld ======
@@ -356,7 +358,7 @@ ionIoni: for GenericIon XStype:3 SubType=2
GenericIon_G4DNAIonisation: for GenericIon SubType=53 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
DNARuddIonisationExtendedModel : Emin= 0 eV Emax= 300 MeV deltaRudd Fluo
DNAIonIonisationModel : Emin= 0 eV Emax= 300 MeV
DummyModel : Emin= 300 MeV Emax= 600 MeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
@@ -407,19 +409,21 @@ alpha_G4DNAElastic: for alpha SubType=51 BuildTable=0
alpha_G4DNAExcitation: for alpha SubType=52 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 400 MeV
DummyModel : Emin= 400 MeV Emax= 600 MeV
DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 300 MeV
DummyModel : Emin= 300 MeV Emax= 600 MeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
alpha_G4DNAIonisation: for alpha SubType=53 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
DNARuddIonisationExtendedModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo
DummyModel : Emin= 400 MeV Emax= 600 MeV
DNARuddIonisationExtendedModel : Emin= 0 eV Emax= 300 MeV deltaRudd Fluo
DummyModel : Emin= 300 MeV Emax= 600 MeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
alpha_G4DNAChargeDecrease: for alpha SubType=56 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 600 MeV
DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 300 MeV
DummyModel : Emin= 300 MeV Emax= 600 MeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
msc: for alpha+ SubType= 10
===== EM models for the G4Region DefaultRegionForTheWorld ======
@@ -441,23 +445,27 @@ alpha+_G4DNAElastic: for alpha+ SubType=51 BuildTable=0
alpha+_G4DNAExcitation: for alpha+ SubType=52 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 400 MeV
DummyModel : Emin= 400 MeV Emax= 600 MeV
DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 300 MeV
DummyModel : Emin= 300 MeV Emax= 600 MeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
alpha+_G4DNAIonisation: for alpha+ SubType=53 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
DNARuddIonisationExtendedModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo
DummyModel : Emin= 400 MeV Emax= 600 MeV
DNARuddIonisationExtendedModel : Emin= 0 eV Emax= 300 MeV deltaRudd Fluo
DummyModel : Emin= 300 MeV Emax= 600 MeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
alpha+_G4DNAChargeIncrease: for alpha+ SubType=57 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 600 MeV
DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 300 MeV
DummyModel : Emin= 300 MeV Emax= 600 MeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
alpha+_G4DNAChargeDecrease: for alpha+ SubType=56 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 600 MeV
DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 300 MeV
DummyModel : Emin= 300 MeV Emax= 600 MeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
msc: for anti_proton SubType= 10
===== EM models for the G4Region DefaultRegionForTheWorld ======
@@ -480,19 +488,21 @@ helium_G4DNAElastic: for helium SubType=51 BuildTable=0
helium_G4DNAExcitation: for helium SubType=52 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 400 MeV
DummyModel : Emin= 400 MeV Emax= 600 MeV
DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 300 MeV
DummyModel : Emin= 300 MeV Emax= 600 MeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
helium_G4DNAIonisation: for helium SubType=53 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
DNARuddIonisationExtendedModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo
DummyModel : Emin= 400 MeV Emax= 600 MeV
DNARuddIonisationExtendedModel : Emin= 0 eV Emax= 300 MeV deltaRudd Fluo
DummyModel : Emin= 300 MeV Emax= 600 MeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
helium_G4DNAChargeIncrease: for helium SubType=57 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 600 MeV
DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 300 MeV
DummyModel : Emin= 300 MeV Emax= 600 MeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
hydrogen_G4DNAElastic: for hydrogen SubType=51 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
@@ -502,8 +512,8 @@ hydrogen_G4DNAElastic: for hydrogen SubType=51 BuildTable=0
hydrogen_G4DNAExcitation: for hydrogen SubType=52 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 300 MeV
DummyModel : Emin= 300 MeV Emax= 600 MeV
DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 500 keV
DummyModel : Emin= 500 keV Emax= 600 MeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
hydrogen_G4DNAIonisation: for hydrogen SubType=53 BuildTable=0
@@ -514,7 +524,9 @@ DNARuddIonisationExtendedModel : Emin= 0 eV Emax= 300 MeV deltaRudd Fluo
hydrogen_G4DNAChargeIncrease: for hydrogen SubType=57 BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 600 MeV
DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 100 MeV
DummyModel : Emin= 100 MeV Emax= 600 MeV
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
msc: for kaon+ SubType= 10
===== EM models for the G4Region DefaultRegionForTheWorld ======
@@ -630,20 +642,20 @@ Start closing geometry.
G4GeometryManager::ReportVoxelStats -- Voxel Statistics
Total memory consumed for geometry optimisation: 84655 kByte
Total CPU time elapsed for geometry optimisation: 24.66 seconds
Total CPU time elapsed for geometry optimisation: 26.34 seconds
Voxelisation: top CPU users:
Percent Total CPU System CPU Memory Volume
------- ---------- ---------- -------- ----------
50.65 12.49 0.06 42138k CellLogical
49.19 12.13 0.07 42138k DNAPhysLV
51.21 13.49 0.07 42138k DNAPhysLV
48.63 12.81 0.07 42138k CellLogical
0.04 0.01 0.00 380k prism
Voxelisation: top memory users:
Percent Memory Heads Nodes Pointers Total CPU Volume
------- -------- ------ ------ -------- ---------- ----------
49.78 42137k 311671 314256 703064 12.49 CellLogical
49.78 42137k 311671 314256 703064 12.13 DNAPhysLV
49.78 42137k 311671 314256 703064 13.49 DNAPhysLV
49.78 42137k 311671 314256 703064 12.81 CellLogical
0.45 379k 1273 3780 14482 0.01 prism
--------------------------------------------------------------------------------
@@ -662,14 +674,14 @@ DNAIndependentReactionTimeModel will be used ==========================
Run terminated.
Run Summary
Number of events processed : 10
User=0.730000s Real=0.729839s Sys=0.010000s
User=0.660000s Real=0.658905s Sys=0.010000s
... write file : molecular-dna.root - done
... close file : molecular-dna.root - done
G4 kernel has come to Quit state.
Deleting G4Run (id:0)
UserDetectorConstruction deleted 0xf54920
UserPhysicsList deleted 0xf98870
UserActionInitialization deleted 0xfcff30
UserDetectorConstruction deleted 0x226a3f0
UserPhysicsList deleted 0x22adf20
UserActionInitialization deleted 0x22e5fd0
UserWorkerInitialization deleted 0
UserWorkerThreadInitialization deleted 0
UserRunAction deleted.
@@ -679,25 +691,25 @@ G4SDManager deleted.
EventManager deleted.
Units table cleared.
TransportationManager deleted.
Total navigation history collections cleaned: 1110
Total navigation history collections cleaned: 1341
G4RNGHelper object is deleted.
================== Deleting memory pools ===================
Pool ID '20G4NavigationLevelRep', size : 0.958 MB
Pool ID '20G4NavigationLevelRep', size : 1.06 MB
Pool ID '19G4ElectronOccupancy', size : 0.000961 MB
Pool ID '24G4ReferenceCountedHandleIvE', size : 0.000961 MB
Pool ID '7G4Event', size : 0.000961 MB
Pool ID '15G4PrimaryVertex', size : 0.000961 MB
Pool ID '17G4PrimaryParticle', size : 0.000961 MB
Pool ID '13ChromosomeHit', size : 0.000961 MB
Pool ID '17G4DynamicParticle', size : 0.129 MB
Pool ID '7G4Track', size : 0.257 MB
Pool ID '18G4TouchableHistory', size : 0.0673 MB
Pool ID '15G4CountedObjectIvE', size : 0.126 MB
Pool ID '17G4DynamicParticle', size : 0.127 MB
Pool ID '7G4Track', size : 0.254 MB
Pool ID '18G4TouchableHistory', size : 0.0663 MB
Pool ID '15G4CountedObjectIvE', size : 0.0856 MB
Pool ID '10G4Molecule', size : 0.0769 MB
Pool ID '8G4OctreeI19G4FastList_iteratorI7G4TrackE9ExtractorI10G4FastListIS1_EEN5CLHEP10Hep3VectorEE', size : 0.000961 MB
Pool ID '6DNAHit', size : 0.00673 MB
Number of memory pools allocated: 14 of which, static: 0
Dynamic pools deleted: 14 / Total memory freed: 1.6 MB
Dynamic pools deleted: 14 / Total memory freed: 1.7 MB
============================================================
G4Allocator objects are deleted.
UImanager deleted.
+565
View File
@@ -0,0 +1,565 @@
//-------------------------------------------------------------------------------//
// This macrofile was developed by Konstantinos Chatzipapas at LP2iB (ex. CENBG) //
// in collaboration with the whole team of molecularDNA Geant4-DNA example //
// For any question please contact through: //
// k.chatzipapas@yahoo.com //
//-------------------------------------------------------------------------------//
//
// This macro requires the molecular-dna.root file generated from molecularDNA example
// To run this file just insert this command to the terminal:
// root .X phage.C
// ROOT6.x should be installed
//
//************************************//
// Please define the parameters below //
//************************************//
{
//*******************************************************************************//
// If you need to add multiple root outputs, by multithreading, use this command:
system ("hadd -O -f molecular-dna.root molecular-dna_t*.root");
// Define these parameters of the simulation
char ifile[256] = "molecular-dna.root"; // input filepath
Double_t r3 = 7000e-9 * 3500e-9 * 3500e-9; // a * b * c // Chromosome size, as defined in the mac file, but in meters. If sphere, a=b=c
Double_t Nbp = 0.141158; // Mbp // Length of the DNA chain in Mbp
Double_t mass = 997 * 3.141592 * r3; // waterDensity * pi * r3 in kg // cylinder
//*******************************************************************************//
typedef std::pair <int64_t, int64_t> ipair;
bool greaterPair(const ipair &l, const ipair &r);
bool smallerPair(const ipair &l, const ipair &r);
void BinLogX(TH1 *h);
gROOT->Reset();
gStyle->SetPalette(1);
gROOT->SetStyle("Plain");
gStyle->SetOptStat(00000);
// Initialize output histograms
TCanvas *cfragment = new TCanvas("cfragment","DNA Fragments Distribution", 900, 120, 600,400);
cfragment->SetLogx();
cfragment->SetLogy();
TH1F *h1fragments = new TH1F("h1fragments","h1fragments",40,0,5);
BinLogX(h1fragments);
TCanvas *c1 = new TCanvas("c1", "Molecular DNA - Damage Quantification", 60, 120, 800, 800);
c1->SetBorderSize(0);
c1->SetFillColor(0);
c1->SetFillStyle(4000);
gPad->SetLeftMargin(0.13);
TPad* pad1 = new TPad("pad1","Species", 0, 0.51, 0.49, 1);
pad1->SetBorderSize(0);
pad1->SetFillColor(0);
pad1->SetFillStyle(4000);
pad1->SetLeftMargin(0.15);
pad1->SetRightMargin(0.01);
pad1->SetBottomMargin(0.2);
TPad* pad2 = new TPad("pad2","Damage Yield", 0.51, 0.5, 1, 1);
pad2->SetBorderSize(0);
pad2->SetFillColor(0);
pad2->SetFillStyle(4000);
pad2->SetLeftMargin(0.15);
pad2->SetRightMargin(0.05);
pad2->SetBottomMargin(0.2);
TPad* pad3 = new TPad("pad3","Breaks Yield SSB", 0, 0, 0.49, 0.49);
pad3->SetBorderSize(0);
pad3->SetFillColor(0);
pad3->SetFillStyle(4000);
pad3->SetLeftMargin(0.15);
pad3->SetRightMargin(0.01);
//pad3->SetTopMargin(0.2);
pad3->SetBottomMargin(0.2);
TPad* pad4 = new TPad("pad4","Breaks Yield DSB", 0.51, 0, 1, 0.49);
pad4->SetBorderSize(0);
pad4->SetFillColor(0);
pad4->SetFillStyle(4000);
pad4->SetLeftMargin(0.15);
pad4->SetRightMargin(0.05);
//pad3->SetTopMargin(0.2);
pad4->SetBottomMargin(0.2);
pad1->Draw();
pad2->Draw();
pad3->Draw();
pad4->Draw();
// Open root file
TFile *f = TFile::Open(ifile);
// Initialize Variables
Int_t EB, ES, OHB, OHS, HB, HS, FL;
Int_t total_EB, total_ES, total_OHB, total_OHS, total_HB, total_HS, total_FL;
Float_t total_EB2, total_ES2, total_OHB2, total_OHS2, total_HB2, total_HS2, total_FL2;
Float_t SD_EB, SD_ES, SD_OHB, SD_OHS, SD_HB, SD_HS;
Float_t SD_SSB, SD_SSBp, SD_SSB2p, SD_sSSB, SD_SSBd, SD_SSBi, SD_SSBm;
Float_t SD_DSB, SD_DSBp, SD_DSBpp, SD_sDSB, SD_DSBd, SD_DSBi, SD_DSBm, SD_DSBh;
Int_t SSB, SSBp, SSB2p;
Int_t total_SSB, total_SSBp, total_SSB2p;
Float_t total_SSB2, total_SSBp2, total_SSB2p2;
Int_t DSB, DSBp, DSBpp;
Int_t total_DSB, total_DSBp, total_DSBpp;
Float_t total_DSB2, total_DSBp2, total_DSBpp2;
Int_t SSBd, SSBi, SSBm;
Int_t total_sSSB, total_SSBd, total_SSBi, total_SSBm;
Float_t total_sSSB2, total_SSBd2, total_SSBi2, total_SSBm2;
Int_t DSBd, DSBi, DSBm, DSBh;
Int_t total_sDSB, total_DSBd, total_DSBi, total_DSBm, total_DSBh;
Float_t total_sDSB2, total_DSBd2, total_DSBi2, total_DSBm2, total_DSBh2;
Double_t dose = 0;
Double_t SD_dose = 0;
Double_t EB_yield = 0; Double_t ES_yield = 0; Double_t OHB_yield = 0; Double_t OHS_yield = 0; Double_t HB_yield = 0; Double_t HS_yield = 0;
Double_t SD_EB_yield = 0; Double_t SD_ES_yield = 0; Double_t SD_OHB_yield = 0; Double_t SD_OHS_yield = 0; Double_t SD_HB_yield = 0; Double_t SD_HS_yield = 0;
Double_t SSB_yield = 0; Double_t SSBp_yield = 0; Double_t SSB2p_yield = 0;
Double_t SD_SSB_yield = 0; Double_t SD_SSBp_yield = 0; Double_t SD_SSB2p_yield = 0;
Double_t DSB_yield = 0; Double_t DSBp_yield = 0; Double_t DSBpp_yield = 0;
Double_t SD_DSB_yield = 0; Double_t SD_DSBp_yield = 0; Double_t SD_DSBpp_yield = 0;
Double_t sSSB_yield = 0; Double_t SSBi_yield = 0; Double_t SSBd_yield = 0; Double_t SSBm_yield = 0;
Double_t SD_sSSB_yield = 0; Double_t SD_SSBi_yield = 0; Double_t SD_SSBd_yield = 0; Double_t SD_SSBm_yield = 0;
Double_t sDSB_yield = 0; Double_t DSBi_yield = 0; Double_t DSBd_yield = 0; Double_t DSBm_yield = 0; Double_t DSBh_yield = 0;
Double_t SD_sDSB_yield = 0; Double_t SD_DSBi_yield = 0; Double_t SD_DSBd_yield = 0; Double_t SD_DSBm_yield = 0; Double_t SD_DSBh_yield = 0;
total_EB = 0; total_ES = 0; total_OHB = 0; total_OHS = 0; total_HB = 0; total_HS = 0;
total_SSB = 0; total_SSBp = 0; total_SSB2p = 0;
total_SSB2 = 0; total_SSBp2 = 0; total_SSB2p2 = 0;
total_DSB = 0; total_DSBp = 0; total_DSBpp = 0;
total_DSB2 = 0; total_DSBp2 = 0; total_DSBpp2 = 0;
total_sSSB = 0; total_SSBd = 0; total_SSBi = 0; total_SSBm = 0;
total_sSSB2 = 0; total_SSBd2 = 0; total_SSBi2 = 0; total_SSBm2 = 0;
total_sDSB = 0; total_DSBd = 0; total_DSBi = 0; total_DSBm = 0; total_DSBh = 0;
total_sDSB2 = 0; total_DSBd2 = 0; total_DSBi2 = 0; total_DSBm2 = 0; total_DSBh2 = 0;
Double_t eVtoJ = 1.60218e-19;
Double_t EnergyDeposited_eV = 0;
Double_t acc_edep = 0;
Double_t acc_edep2 = 0;
Double_t Energy;
Double_t BPID;
Char_t Primary;
char *primaryName = new char[32];
char *type= new char[256];
// Read trees and leaves from root file, and give values to variables
TTree* tree = (TTree*) f->Get("tuples/primary_source");
Float_t number = (Float_t) tree->GetEntries();
if (number<2) {
std::cout << "Not enough entries in the \"primary_source\" TTree (" << (long)number << " entries)\n";
gApplication->Terminate(0);
}
vector<pair<int,int64_t>> DSBBPID;
// For reading species production
tree = (TTree*) f->Get("tuples/damage");
tree->SetBranchAddress("Primary", &Primary);
tree->SetBranchAddress("Energy", &Energy);
tree->SetBranchAddress("EaqBaseHits", &EB);
tree->SetBranchAddress("EaqStrandHits", &ES);
tree->SetBranchAddress("OHBaseHits", &OHB);
tree->SetBranchAddress("OHStrandHits", &OHS);
tree->SetBranchAddress("HBaseHits", &HB);
tree->SetBranchAddress("HStrandHits", &HS);
tree->SetBranchAddress("TypeClassification", type);
tree->SetBranchAddress("BasePair", &BPID);
Long64_t nentries = tree->GetEntries();
for(int i = 0;i<nentries;i++){
tree->GetEntry(i);
total_EB += EB;
total_EB2 += pow(EB,2);
total_ES += ES;
total_ES2 += pow(ES,2);
total_OHB += OHB;
total_OHB2 += pow(OHB,2);
total_OHS += OHS;
total_OHS2 += pow(OHS,2);
total_HB += HB;
total_HB2 += pow(HB,2);
total_HS += HS;
total_HS2 += pow(HS,2);
if((string)type=="DSB"||(string)type=="DSB+"||(string)type=="DSB++"){
//cout << "DSB:"<<type<<endl;
DSBBPID.push_back(make_pair(i,(int64_t)BPID));
}
}
// Sort DSBs from the one with lower ID value to the one with higher ID value
// Then find the number of fragments that have been produced
sort(DSBBPID.begin(), DSBBPID.end(), smallerPair);
for(int ie = 0;ie<DSBBPID.size()-1;ie++){
int64_t dsbfragment = DSBBPID[ie+1].second-DSBBPID[ie].second;
double val = (double)dsbfragment/1000.;
double meanw = h1fragments->GetBinCenter(h1fragments->FindBin(val));
double binw = h1fragments->GetBinWidth (h1fragments->FindBin(val));
h1fragments->Fill(val,1./binw/1000);//bp-1
//cout <<"val:"<<val<<endl;
}
// Calculate the standard deviation of species
SD_EB = sqrt(abs(((total_EB2 / number) - pow(total_EB / number,2)))/(number -1));
SD_ES = sqrt(abs(((total_ES2 / number) - pow(total_ES / number,2)))/(number -1));
SD_OHB = sqrt(abs(((total_OHB2 / number) - pow(total_OHB / number,2)))/(number -1));
SD_OHS = sqrt(abs(((total_OHS2 / number) - pow(total_OHS / number,2)))/(number -1));
SD_HB = sqrt(abs(((total_HB2 / number) - pow(total_HB / number,2)))/(number -1));
SD_HS = sqrt(abs(((total_HS2 / number) - pow(total_HS / number,2)))/(number -1));
// Read damage classification SSB, SSB+, 2SSB, DSB, DSB+, DSB++
// As they have been defined in: Nikjoo, H., ONeill, O., Goodhead, T., & Terrissol, M. 1997,
// Computational modelling of low-energy electron-induced DNA damage by early physical
// and chemical events, International Journal of Radiation Biology, 71, 467.
tree = (TTree *) f->Get("tuples/classification");
tree->SetBranchAddress("Primary",&Primary);
tree->SetBranchAddress("Energy", &Energy);
tree->SetBranchAddress("SSB", &SSB);
tree->SetBranchAddress("SSBp", &SSBp);
tree->SetBranchAddress("2SSB", &SSB2p);
tree->SetBranchAddress("DSB", &DSB);
tree->SetBranchAddress("DSBp", &DSBp);
tree->SetBranchAddress("DSBpp", &DSBpp);
Long64_t nentriesC = tree->GetEntries();
for(int i = 0;i<nentriesC;i++){
tree->GetEntry(i);
total_SSBp += SSBp;
total_SSBp2 += pow(SSBp,2);
total_SSB2p += SSB2p;
total_SSB2p2 += pow(SSB2p,2);
total_SSB += SSB;
total_SSB2 += pow(SSB,2);
total_DSBp += DSBp;
total_DSBp2 += pow(DSBp,2);
total_DSBpp += DSBpp;
total_DSBpp2 += pow(DSBpp,2);
total_DSB += DSB;
total_DSB2 += pow(DSB,2);
}
// Calculate the standard deviation
SD_SSB = sqrt(abs(((total_SSB2 / number) - pow(total_SSB / number,2)))/(number -1));
SD_SSBp = sqrt(abs(((total_SSBp2 / number) - pow(total_SSBp / number,2)))/(number -1));
SD_SSB2p = sqrt(abs(((total_SSB2p2 / number) - pow(total_SSB2p / number,2)))/(number -1));
SD_DSB = sqrt(abs(((total_DSB2 / number) - pow(total_DSB / number,2)))/(number -1));
SD_DSBp = sqrt(abs(((total_DSBp2 / number) - pow(total_DSBp / number,2)))/(number -1));
SD_DSBpp = sqrt(abs(((total_DSBpp2 / number) - pow(total_DSBpp / number,2)))/(number -1));
// Read damage classification SSBd, SSBi, SSBm, DSBd, DSBi, DSBm, DSBh
// As they have been defined in: Nikjoo, H., ONeill, O., Goodhead, T., & Terrissol, M. 1997,
// Computational modelling of low-energy electron-induced DNA damage by early physical
// and chemical events, International Journal of Radiation Biology, 71, 467.
tree = (TTree *) f->Get("tuples/source");
tree->SetBranchAddress("Primary",primaryName);
tree->SetBranchAddress("Energy", &Energy);
tree->SetBranchAddress("SSBd", &SSBd);
tree->SetBranchAddress("SSBi", &SSBi);
tree->SetBranchAddress("SSBm", &SSBm);
tree->SetBranchAddress("DSBd", &DSBd);
tree->SetBranchAddress("DSBi", &DSBi);
tree->SetBranchAddress("DSBm", &DSBm);
tree->SetBranchAddress("DSBh", &DSBh);
Long64_t nentriesS = tree->GetEntries();
for(int i = 0;i<nentriesS;i++){
tree->GetEntry(i);
total_SSBd += SSBd;
total_SSBd2 += pow((SSBd),2);
total_SSBi += SSBi;
total_SSBi2 += pow((SSBi),2);
total_SSBm += SSBm;
total_SSBm2 += pow((SSBm),2);
total_sSSB += SSBd + SSBi + SSBm;
total_sSSB2 += pow((SSBd+SSBi+SSBm),2);
total_DSBd += DSBd;
total_DSBd2 += pow(DSBd,2);
total_DSBi += DSBi;
total_DSBi2 += pow(DSBi,2);
total_DSBm += DSBm;
total_DSBm2 += pow(DSBm,2);
total_DSBh += DSBh;
total_DSBh2 += pow(DSBh,2);
total_sDSB += DSBd + DSBi + DSBm + DSBh;
total_sDSB2 += pow((DSBd+DSBi+DSBm+DSBh),2);
}
// Calculate the standard deviation
SD_sSSB = sqrt(abs(((total_sSSB2 / number) - pow(total_sSSB / number,2)))/(number -1));
SD_SSBd = sqrt(abs(((total_SSBd2 / number) - pow(total_SSBd / number,2)))/(number -1));
SD_SSBi = sqrt(abs(((total_SSBi2 / number) - pow(total_SSBi / number,2)))/(number -1));
SD_SSBm = sqrt(abs(((total_SSBm2 / number) - pow(total_SSBm / number,2)))/(number -1));
SD_sDSB = sqrt(abs(((total_sDSB2 / number) - pow(total_sDSB / number,2)))/(number -1));
SD_DSBd = sqrt(abs(((total_DSBd2 / number) - pow(total_DSBd / number,2)))/(number -1));
SD_DSBi = sqrt(abs(((total_DSBi2 / number) - pow(total_DSBi / number,2)))/(number -1));
SD_DSBm = sqrt(abs(((total_DSBm2 / number) - pow(total_DSBm / number,2)))/(number -1));
SD_DSBh = sqrt(abs(((total_DSBh2 / number) - pow(total_DSBh / number,2)))/(number -1));
// Measure the Deposited Energy in the whole volume that includes DNA chain
tree = (TTree *) f->Get("tuples/chromosome_hits");
tree->SetBranchAddress("e_chromosome_kev",&EnergyDeposited_eV);
nentries = tree->GetEntries();
for(int i = 0;i<nentries;i++){
tree->GetEntry(i);
acc_edep += EnergyDeposited_eV *1e3;
acc_edep2 += EnergyDeposited_eV *EnergyDeposited_eV *1e6;
}
tree->SetBranchAddress("e_dna_kev",&EnergyDeposited_eV);
nentries = tree->GetEntries();
for(int i = 0;i<nentries;i++){
tree->GetEntry(i);
acc_edep += EnergyDeposited_eV *1e3;
acc_edep2 += EnergyDeposited_eV *EnergyDeposited_eV *1e6;
}
// Close the root file to free space
f->Close();
// Calculate the absorbed dose
dose = acc_edep * eVtoJ / mass;
// This is a normalization factor to produce the output in Gy-1 Gbp-1, or else.
// Default value is 1 to produce the result in Gy-1 Mbp-1
// It changes Mbp to Gbp. Some other changes may be needed in graphs section (name of axes)
double norm = 1;
// Calculate the yields, together with their standard deviation
EB_yield = (Double_t) total_EB / dose / Nbp;
ES_yield = (Double_t) total_ES / dose / Nbp;
OHB_yield = (Double_t) total_OHB / dose / Nbp;
OHS_yield = (Double_t) total_OHS / dose / Nbp;
HB_yield = (Double_t) total_HB / dose / Nbp;
HS_yield = (Double_t) total_HS / dose / Nbp;
SD_EB_yield = SD_EB / dose / Nbp;
SD_ES_yield = SD_ES / dose / Nbp;
SD_OHB_yield = SD_OHB / dose / Nbp;
SD_OHS_yield = SD_OHS / dose / Nbp;
SD_HB_yield = SD_HB / dose / Nbp;
SD_HS_yield = SD_HS / dose / Nbp;
SSB_yield = (Double_t) norm * total_SSB / dose / Nbp;
SSBp_yield = (Double_t) norm * total_SSBp / dose / Nbp;
SSB2p_yield = (Double_t) norm * total_SSB2p / dose / Nbp;
DSB_yield = (Double_t) norm * total_DSB / dose / Nbp;
DSBp_yield = (Double_t) norm * total_DSBp / dose / Nbp;
DSBpp_yield = (Double_t) norm * total_DSBpp / dose / Nbp;
SD_SSB_yield = norm * SD_SSB / dose / Nbp;
SD_SSBp_yield = norm * SD_SSBp / dose / Nbp;
SD_SSB2p_yield = norm * SD_SSB2p / dose / Nbp;
SD_DSB_yield = norm * SD_DSB / dose / Nbp;
SD_DSBp_yield = norm * SD_DSBp / dose / Nbp;
SD_DSBpp_yield = norm * SD_DSBpp / dose / Nbp;
sSSB_yield = (Double_t) norm * total_sSSB / dose / Nbp;
SSBi_yield = (Double_t) norm * total_SSBi / dose / Nbp;
SSBd_yield = (Double_t) norm * total_SSBd / dose / Nbp;
SSBm_yield = (Double_t) norm * total_SSBm / dose / Nbp;
sDSB_yield = (Double_t) norm * total_sDSB / dose / Nbp;
DSBi_yield = (Double_t) norm * total_DSBi / dose / Nbp;
DSBd_yield = (Double_t) norm * total_DSBd / dose / Nbp;
DSBm_yield = (Double_t) norm * total_DSBm / dose / Nbp;
DSBh_yield = (Double_t) norm * total_DSBh / dose / Nbp;
SD_sSSB_yield = norm * SD_sSSB / dose / Nbp;
SD_SSBi_yield = norm * SD_SSBi / dose / Nbp;
SD_SSBd_yield = norm * SD_SSBd / dose / Nbp;
SD_SSBm_yield = norm * SD_SSBm / dose / Nbp;
SD_sDSB_yield = norm * SD_sDSB / dose / Nbp;
SD_DSBi_yield = norm * SD_DSBi / dose / Nbp;
SD_DSBd_yield = norm * SD_DSBd / dose / Nbp;
SD_DSBm_yield = norm * SD_DSBm / dose / Nbp;
SD_DSBh_yield = norm * SD_DSBh / dose / Nbp;
// Print output in terminal
float total_SSB_totalYield = SSB_yield + SSBp_yield + SSB2p_yield;
float total_DSB_totalYield = DSB_yield + DSBp_yield + DSBpp_yield;
cout<<"\n" <<ifile <<'\n'
<<"\nDose Absorbed (Gy): " <<dose <<'\n'
<<"Particle : " <<primaryName <<'\t'
<<"Energy (MeV) : " <<Energy <<'\t'
<<"Number of Primaries : " <<number <<'\n'
<<" Output Damage : " <<'\n'<<'\t'
<<" Species Hits (Gy-1 Mbp-1) " <<'\n'<<'\t'
<<"EaqBaseHits : " <<EB_yield <<" \t" <<" error %: " <<100*SD_EB_yield/EB_yield <<'\n'<<'\t'
<<"EaqStrandHits : " <<ES_yield <<" \t" <<" error %: " <<100*SD_ES_yield/ES_yield <<'\n'<<'\t'
<<"OHBaseHits : " <<OHB_yield <<" \t" <<" error %: " <<100*SD_OHB_yield/OHB_yield <<'\n'<<'\t'
<<"OHStrandHits : " <<OHS_yield <<" \t" <<" error %: " <<100*SD_OHS_yield/OHS_yield <<'\n'<<'\t'
<<"HBaseHits : " <<HB_yield <<" \t" <<" error %: " <<100*SD_HB_yield/HB_yield <<'\n'<<'\t'
<<"HStrandHits : " <<HS_yield <<" \t" <<" error %: " <<100*SD_HS_yield/HS_yield <<'\n'<<'\n'<<'\t'
<<" Damage yield (Gy-1 Mbp-1) " <<'\n'<<'\t'
<<"SSB : " <<SSB_yield <<" \t" <<" error %: " <<100*SD_SSB_yield/SSB_yield <<'\n'<<'\t'
<<"SSB+ : " <<SSBp_yield <<" \t" <<" error %: " <<100*SD_SSBp_yield/SSBp_yield <<'\n'<<'\t'
<<"2SSB : " <<SSB2p_yield <<" \t" <<" error %: " <<100*SD_SSB2p_yield/SSB2p_yield <<'\n'<<'\t'
<<"SSB total : " <<total_SSB_totalYield <<'\n'<<'\t'
<<"DSB : " <<DSB_yield <<" \t" <<" error %: " <<100*SD_DSB_yield/DSB_yield <<'\n'<<'\t'
<<"DSB+ : " <<DSBp_yield <<" \t" <<" error %: " <<100*SD_DSBp_yield/DSBp_yield <<'\n'<<'\t'
<<"DSB++ : " <<DSBpp_yield <<" \t" <<" error %: " <<100*SD_DSBpp_yield/DSBpp_yield <<'\n'<<'\t'
<<"DSB total : " <<total_DSB_totalYield <<'\n'<<'\n'<<'\t'
<<" Breaks yield (Gy-1 Mbp-1) " <<'\n'<<'\t'
<<"SSB direct : " <<SSBd_yield <<" \t" <<" error %: " <<100*SD_SSBd_yield/SSBd_yield <<'\n'<<'\t'
<<"SSB indirect : " <<SSBi_yield <<" \t" <<" error %: " <<100*SD_SSBi_yield/SSBi_yield <<'\n'<<'\t'
<<"SSB mixed : " <<SSBm_yield <<" \t" <<" error %: " <<100*SD_SSBm_yield/SSBi_yield <<'\n'<<'\t'
<<"SSB total : " <<sSSB_yield <<" \t" <<" error %: " <<100*SD_sSSB_yield/sSSB_yield <<'\n'<<'\t'
<<"DSB direct : " <<DSBd_yield <<" \t" <<" error %: " <<100*SD_DSBd_yield/DSBd_yield <<'\n'<<'\t'
<<"DSB indirect : " <<DSBi_yield <<" \t" <<" error %: " <<100*SD_DSBi_yield/DSBi_yield <<'\n'<<'\t'
<<"DSB mixed : " <<DSBm_yield <<" \t" <<" error %: " <<100*SD_DSBm_yield/DSBm_yield <<'\n'<<'\t'
<<"DSB hybrid : " <<DSBh_yield <<" \t" <<" error %: " <<100*SD_DSBh_yield/DSBh_yield <<'\n'<<'\t'
<<"DSB total : " <<sDSB_yield <<" \t" <<" error %: " <<100*SD_sDSB_yield/sDSB_yield <<'\n'<<'\n'<<'\t'
<<"SSB/DSB : " <<sSSB_yield/sDSB_yield <<'\n'<<'\n';
// Plot Histograms
cfragment->GetCanvas()->cd();
h1fragments->SetStats(false);
h1fragments->SetMarkerSize(0.1);
h1fragments->SetMarkerColor(kRed);
h1fragments->SetLineColor (kRed);
h1fragments->Scale(1./(Nbp*1e6)); //bp^-1
h1fragments->SetTitle("");
h1fragments->SetYTitle("Number of Fragments (bp^{-2})");
h1fragments->SetXTitle("Fragment Length (kbp)");
//h1fragments->SetAxisRange(10,1e4);
h1fragments->SetAxisRange(1,10);
//h1fragments->SetMaximum(3e-11);
//h1fragments->SetMinimum(1e-15);
h1fragments->Draw();
c1->GetCanvas()->cd();
pad1->cd();
const Int_t n = 6;
Double_t x[n] = {1,2,3,4,5,6};
Double_t y[n] = {EB_yield,ES_yield,OHB_yield,OHS_yield,HB_yield,HS_yield};
Double_t err_y[n] = {SD_EB_yield,SD_ES_yield,SD_OHB_yield,SD_OHS_yield,SD_HB_yield,SD_HS_yield};
TGraph* gr = new TGraphErrors(n,x,y,0,err_y);
gr->SetTitle("Species");
gr->GetXaxis()->SetBinLabel(9, "EaqBaseHits");
gr->GetXaxis()->SetBinLabel(25,"EaqStrandHits");
gr->GetXaxis()->SetBinLabel(42,"OHBaseHits");
gr->GetXaxis()->SetBinLabel(58,"OHStrandHits");
gr->GetXaxis()->SetBinLabel(75,"HBaseHits");
gr->GetXaxis()->SetBinLabel(92,"HStrandHits");
gr->GetYaxis()->SetTitle("Species Hits (Gy^{-1} Mbp^{-1})");
gr->GetYaxis()->SetTitleOffset(2);
gr->SetFillColor(49);
gr->Draw("ba");
pad2->cd();
Double_t x2[n] = {1,2,3,4,5,6};
Double_t y2[n] = {SSBp_yield,SSB2p_yield,SSB_yield,DSBp_yield,DSBpp_yield,DSB_yield};
Double_t err_y2[n] = {SD_SSBp_yield,SD_SSB2p_yield,SD_SSB_yield,SD_DSBp_yield,SD_DSBpp_yield,SD_DSB_yield};
TGraph* gr2 = new TGraphErrors(n,x2,y2,0,err_y2);
gr2->SetTitle("Damage Yield");
gr2->GetXaxis()->SetBinLabel(9, "SSB+");
gr2->GetXaxis()->SetBinLabel(25,"2SSB");
gr2->GetXaxis()->SetBinLabel(42,"SSB");
gr2->GetXaxis()->SetBinLabel(58,"DSB+");
gr2->GetXaxis()->SetBinLabel(75,"DSB++");
gr2->GetXaxis()->SetBinLabel(92,"DSB");
gr2->GetYaxis()->SetTitle("Damage yield (Gy^{-1} Mbp^{-1})");
//gr2->GetYaxis()->SetTitle("Damage yield (particle^{-1})");
gr2->GetYaxis()->SetTitleOffset(2);
gr2->SetFillColor(8);
gr2->Draw("ba");
pad3->cd();
const Int_t m = 4;
Double_t x3[m] = {1,2,3,4};
Double_t y3[m] = {SSBd_yield,SSBi_yield,SSBm_yield,sSSB_yield};
Double_t err_y3[m] = {SD_SSBd_yield,SD_SSBi_yield,SD_SSBm_yield,SD_sSSB_yield};
TGraph* gr3 = new TGraphErrors(m,x3,y3,0,err_y3);
gr3->SetTitle("Breaks Yield");
gr3->GetXaxis()->SetBinLabel(8, "SSB direct");
gr3->GetXaxis()->SetBinLabel(35,"SSB indirect");
gr3->GetXaxis()->SetBinLabel(64,"SSB mixed");
gr3->GetXaxis()->SetBinLabel(92,"SSB all");
gr3->GetYaxis()->SetTitle("Breaks yield (Gy^{-1} Mbp^{-1})");
//gr3->GetYaxis()->SetTitle("SSB yield (particle^{-1}");
gr3->GetYaxis()->SetTitleOffset(2);
gr3->SetFillColor(7);
gr3->Draw("ba");
pad4->cd();
const Int_t k = 5;
Double_t x4[k] = {1,2,3,4,5};
Double_t y4[k] = {DSBd_yield,DSBi_yield,DSBm_yield,DSBh_yield,sDSB_yield};
Double_t err_y4[k] = {SD_DSBd_yield,SD_DSBi_yield,SD_DSBm_yield,SD_DSBh_yield,SD_sDSB_yield};
TGraph* gr4 = new TGraphErrors(k,x4,y4,0,err_y4);
gr4->SetTitle("Breaks Yield");
gr4->GetXaxis()->SetBinLabel(8,"DSB direct");
gr4->GetXaxis()->SetBinLabel(29,"DSB indirect");
gr4->GetXaxis()->SetBinLabel(50,"DSB mixed");
gr4->GetXaxis()->SetBinLabel(71,"DSB hybrid");
gr4->GetXaxis()->SetBinLabel(92,"DSB all");
gr4->GetYaxis()->SetTitle("Breaks yield (Gy^{-1} Mbp^{-1})");
//gr4->GetYaxis()->SetTitle("DSB yield (particle^{-1})");
gr4->GetYaxis()->SetTitleOffset(2);
gr4->SetFillColor(4);
gr4->Draw("ba");
}
// Some important bools that are needed to run the root macro file
bool greaterPair(const ipair& l, const ipair& r){return l.second > r.second;}
bool smallerPair(const ipair& l, const ipair& r){return l.second < r.second;}
void BinLogX(TH1 *h) {
TAxis *axis = h->GetXaxis();
int bins = axis->GetNbins();
Axis_t from = axis->GetXmin();
Axis_t to = axis->GetXmax();
Axis_t width = (to - from) / bins;
Axis_t *new_bins = new Axis_t[bins + 1];
for (int i = 0; i <= bins; i++) {
new_bins[i] = TMath::Power(10, from + i * width);
}
axis->Set(bins, new_bins);
delete[] new_bins;
}
@@ -0,0 +1,105 @@
### Phage default geometry
#
# See more details on moleculardna specific UI commands:
# - https://geant4-dna.github.io/molecular-docs/docs/overview/configuration
# - https://geant4-dna.github.io/molecular-docs/docs/overview/macro-anatomy
# - the README file
# - the messenger classes of the moleculardna example
#
# Physics: choice of thermalization model
/process/dna/e-SolvationSubType Meesungnoen2002
#/process/dna/e-SolvationSubType Ritchie1994
#/process/dna/e-SolvationSubType Terrisol1990
# Verbosity: settings
/run/verbose 1
/tracking/verbose 0
/control/verbose 1
#/dnageom/verbose 3
# Chemistry: selection of IRT_syn
/process/chem/TimeStepModel IRT_syn
# Chemistry: activation
/chem/activate true
# Chemistry: verbosity
/scheduler/verbose 0
# Chemistry: end time of chemistry stage
/scheduler/endTime 5 ns
# Geometry: size of World volume
/world/worldSize 9 um
# Geometry: size of cell volume
# See https://geant4-dna.github.io/molecular-docs/docs/examples/parameter-study
/cell/radiusSize 4 4 4 um
# Geometry: optimisation of voxelisation
#/dnageom/setSmartVoxels 100
# Geometry: creation
# See https://geant4-dna.github.io/molecular-docs/docs/examples/parameter-study
# - Side length for each placement
/dnageom/placementSize 50 50 50 nm
# - Scaling of XYZ in fractal definition file
/dnageom/fractalScaling 50 50 50 nm
# - Path to file that defines placement locations
/dnageom/definitionFile geometries/phage.txt
# - Set placement volumes
/dnageom/placementVolume turn geometries/1strand_50nm_turn.txt
/dnageom/placementVolume turntwist geometries/1strand_50nm_turn.txt true
/dnageom/placementVolume straight geometries/1strand_50nm_straight.txt
# Geometry: draw cell/chromosome volumes rather than DNA
#/dnageom/drawCellVolumes false
# Geometry: deposited energy accumulation range limit to start recording SBs from direct effects
/dnageom/interactionDirectRange 4.0 angstrom
# Geometry: distance from base pairs at which radicals are killed
/dnageom/radicalKillDistance 4 nm
# Damage: model settings
/dnadamage/directDamageLower 5 eV
/dnadamage/directDamageUpper 37.5 eV
/dnadamage/indirectOHBaseChance 1.0
/dnadamage/indirectOHStrandChance 0.405
/dnadamage/inductionOHChance 0.00
/dnadamage/indirectHBaseChance 1.0
/dnadamage/indirectHStrandChance 0.0
/dnadamage/inductionHChance 0.00
/dnadamage/indirectEaqBaseChance 1.0
/dnadamage/indirectEaqStrandChance 0.0
/dnadamage/inductionEaqChance 0.00
# Analysis: add cylindrical chromosomal region of interest, with the name "phage"
/chromosome/add phage cyl 3500 7000 0 0 0 nm 0 0 0
# Run: initialization
/run/initialize
# Run: progress display
/run/printProgress 10
# Source geometry
/gps/pos/type Plane
/gps/pos/shape Circle
/gps/pos/centre 0 7000 0 nm
/gps/pos/rot1 0 0 1
/gps/pos/rot2 1 0 0
/gps/pos/radius 3500 nm
# Source particle, energy and angular distribution
/gps/particle proton
/gps/energy 2.5 MeV
/gps/direction 0 -1 0
# Beam on
/run/beamOn 10000
+49 -35
View File
@@ -1,12 +1,11 @@
//*********************************************************************************
//-------------------------------------------------------------------------------
// Modified by Sara Zein to calculate the damage probability per plasmid
//_________________________________________________________________________________
//*********************************************************************************
//-------------------------------------------------------------------------------
//
// This macro requires the molecular-dna.root file generated from molecularDNA example
// To run this file just insert this command to the terminal:
// root .X plasmid.C
//
//***************************************//
// Please define the parameters below //
// ifile, r3, Nbp (as shown in terminal) //
@@ -191,6 +190,11 @@
TTree* tree = (TTree*)f->Get("tuples/primary_source");
Float_t number = (Float_t)tree->GetEntries();
if (number<2) {
std::cout << "Not enough entries in the \"primary_source\" TTree (" << (long)number << " entries)\n";
gApplication->Terminate(0);
}
vector<pair<int, int64_t>> DSBBPID;
// For reading species production
@@ -266,20 +270,30 @@
h4damage->SetBinContent(i, X * 100 / totalDs);
}
// Sort DSBs from the one with lower ID value to the one with higher ID value
// Then find the number of fragments that have been produced
sort(DSBBPID.begin(), DSBBPID.end(), smallerPair);
for (int ie = 0; ie < DSBBPID.size() - 1; ie++) {
int64_t dsbfragment = DSBBPID[ie + 1].second - DSBBPID[ie].second;
// Find the number of fragments that have been produced, but first test if there are enough breaks.
// If no more than 2 DSBs exist in the DSBBPID vector ( DSBBPID.size() is 0 or 1 ),
// the subtraction DSBBPID.size() - 1 makes the loop condition evaluate to ie < -1 (in unsigned terms,
// this becomes a large number, which is incorrect) and leads to undefined behavior (crash).
if (DSBBPID.size() < 2) {
std::cerr << "Not enough damage to calculate fragments." << std::endl;
//return;
}
if (DSBBPID.size() >= 2) {
// Sort DSBs from the one with lower ID value to the one with higher ID value
// Then find the number of fragments that have been produced
sort(DSBBPID.begin(), DSBBPID.end(), smallerPair);
for(int ie = 0; ie < DSBBPID.size() - 1; ie++){
int64_t dsbfragment = DSBBPID[ie + 1].second - DSBBPID[ie].second;
}
}
// Calculate the standard deviation of species
SD_EB = sqrt(((total_EB2 / number) - pow(total_EB / number, 2)) / (number - 1));
SD_ES = sqrt(((total_ES2 / number) - pow(total_ES / number, 2)) / (number - 1));
SD_OHB = sqrt(((total_OHB2 / number) - pow(total_OHB / number, 2)) / (number - 1));
SD_OHS = sqrt(((total_OHS2 / number) - pow(total_OHS / number, 2)) / (number - 1));
SD_HB = sqrt(((total_HB2 / number) - pow(total_HB / number, 2)) / (number - 1));
SD_HS = sqrt(((total_HS2 / number) - pow(total_HS / number, 2)) / (number - 1));
// Calculate the SEM
SD_EB = sqrt(abs(((total_EB2 / number) - pow(total_EB / number, 2))) / (number - 1));
SD_ES = sqrt(abs(((total_ES2 / number) - pow(total_ES / number, 2))) / (number - 1));
SD_OHB = sqrt(abs(((total_OHB2 / number) - pow(total_OHB / number, 2))) / (number - 1));
SD_OHS = sqrt(abs(((total_OHS2 / number) - pow(total_OHS / number, 2))) / (number - 1));
SD_HB = sqrt(abs(((total_HB2 / number) - pow(total_HB / number, 2))) / (number - 1));
SD_HS = sqrt(abs(((total_HS2 / number) - pow(total_HS / number, 2))) / (number - 1));
// Read damage classification SSB, SSB+, 2SSB, DSB, DSB+, DSB++
// As they have been defined in: Nikjoo, H., ONeill, O., Goodhead, T., & Terrissol, M. 1997,
@@ -314,14 +328,14 @@
total_DSB2 += pow(DSB, 2);
}
// Calculate the standard deviation
SD_SSB = sqrt(((total_SSB2 / number) - pow(total_SSB / number, 2)) / (number - 1));
SD_SSBp = sqrt(((total_SSBp2 / number) - pow(total_SSBp / number, 2)) / (number - 1));
SD_SSB2p = sqrt(((total_SSB2p2 / number) - pow(total_SSB2p / number, 2)) / (number - 1));
// Calculate the SEM
SD_SSB = sqrt(abs(((total_SSB2 / number) - pow(total_SSB / number, 2))) / (number - 1));
SD_SSBp = sqrt(abs(((total_SSBp2 / number) - pow(total_SSBp / number, 2))) / (number - 1));
SD_SSB2p = sqrt(abs(((total_SSB2p2 / number) - pow(total_SSB2p / number, 2))) / (number - 1));
SD_DSB = sqrt(((total_DSB2 / number) - pow(total_DSB / number, 2)) / (number - 1));
SD_DSBp = sqrt(((total_DSBp2 / number) - pow(total_DSBp / number, 2)) / (number - 1));
SD_DSBpp = sqrt(((total_DSBpp2 / number) - pow(total_DSBpp / number, 2)) / (number - 1));
SD_DSB = sqrt(abs(((total_DSB2 / number) - pow(total_DSB / number, 2))) / (number - 1));
SD_DSBp = sqrt(abs(((total_DSBp2 / number) - pow(total_DSBp / number, 2))) / (number - 1));
SD_DSBpp = sqrt(abs(((total_DSBpp2 / number) - pow(total_DSBpp / number, 2))) / (number - 1));
// Read damage classification SSBd, SSBi, SSBm, DSBd, DSBi, DSBm, DSBh
// As they have been defined in: Nikjoo, H., ONeill, O., Goodhead, T., & Terrissol, M. 1997,
@@ -379,17 +393,17 @@
h1damage->SetBinContent(i, Y * 100 / totalDs);
}
// Calculate the standard deviation
SD_sSSB = sqrt(((total_sSSB2 / number) - pow(total_sSSB / number, 2)) / (number - 1));
SD_SSBd = sqrt(((total_SSBd2 / number) - pow(total_SSBd / number, 2)) / (number - 1));
SD_SSBi = sqrt(((total_SSBi2 / number) - pow(total_SSBi / number, 2)) / (number - 1));
SD_SSBm = sqrt(((total_SSBm2 / number) - pow(total_SSBm / number, 2)) / (number - 1));
// Calculate the SEM
SD_sSSB = sqrt(abs(((total_sSSB2 / number) - pow(total_sSSB / number, 2))) / (number - 1));
SD_SSBd = sqrt(abs(((total_SSBd2 / number) - pow(total_SSBd / number, 2))) / (number - 1));
SD_SSBi = sqrt(abs(((total_SSBi2 / number) - pow(total_SSBi / number, 2))) / (number - 1));
SD_SSBm = sqrt(abs(((total_SSBm2 / number) - pow(total_SSBm / number, 2))) / (number - 1));
SD_sDSB = sqrt(((total_sDSB2 / number) - pow(total_sDSB / number, 2)) / (number - 1));
SD_DSBd = sqrt(((total_DSBd2 / number) - pow(total_DSBd / number, 2)) / (number - 1));
SD_DSBi = sqrt(((total_DSBi2 / number) - pow(total_DSBi / number, 2)) / (number - 1));
SD_DSBm = sqrt(((total_DSBm2 / number) - pow(total_DSBm / number, 2)) / (number - 1));
SD_DSBh = sqrt(((total_DSBh2 / number) - pow(total_DSBh / number, 2)) / (number - 1));
SD_sDSB = sqrt(abs(((total_sDSB2 / number) - pow(total_sDSB / number, 2))) / (number - 1));
SD_DSBd = sqrt(abs(((total_DSBd2 / number) - pow(total_DSBd / number, 2))) / (number - 1));
SD_DSBi = sqrt(abs(((total_DSBi2 / number) - pow(total_DSBi / number, 2))) / (number - 1));
SD_DSBm = sqrt(abs(((total_DSBm2 / number) - pow(total_DSBm / number, 2))) / (number - 1));
SD_DSBh = sqrt(abs(((total_DSBh2 / number) - pow(total_DSBh / number, 2))) / (number - 1));
// Measure the Deposited Energy in the whole volume that includes DNA chain
@@ -415,7 +429,7 @@
dose = acc_edep * eVtoJ / mass;
double norm = 1;
// Calculate the yields, together with their standard deviation
// Calculate the yields, together with their error
EB_yield = (Double_t)total_EB / dose / Nbp;
ES_yield = (Double_t)total_ES / dose / Nbp;
OHB_yield = (Double_t)total_OHB / dose / Nbp;
@@ -62,7 +62,7 @@
/dnageom/radicalKillDistance 9 nm
# Geometry: deposited energy accumulation range limit to start recording SBs from direct effects
/dnageom/interactionDirectRange 7 angstrom
/dnageom/interactionDirectRange 5.5 angstrom
# Geometry: activate Histone scavenging function
/dnageom/activateHistoneScavenging true
@@ -47,11 +47,10 @@
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
DetectorConstruction::DetectorConstruction()
DetectorConstruction::DetectorConstruction(G4int vis)
: fpDNAGeometry(new DNAGeometry()), fpDetectorMessenger(new DetectorMessenger(this))
{
G4bool useParallelPhysicsWorld = false;
if (useParallelPhysicsWorld) {
if (vis == 1) {
RegisterParallelWorld(fpDNAGeometry->GetDNAWorld());
}
}
@@ -184,15 +184,11 @@ G4bool IRTDamageReactionModel::DoReaction(const G4Track& track, const G4double&
const DNANode& vp)
{
fReactionTime = reactionTime;
if (fReactionTime == G4Scheduler::Instance()->GetLimitingTimeStep()) {
return false;
}
fpTrack = &track;
fpDNAPhyVolume = std::get<const G4VPhysicalVolume*>(vp);
MakeReaction(track);
RecordDNADamage();
G4Scheduler::Instance()->SetInteractionStep(true);// reset reaction list to avoid crash.
return true;
}
@@ -304,11 +300,6 @@ G4double IRTDamageReactionModel::CalculateReactionTime(const G4Track& track, DNA
vp = physicalVolume;
}
}
if (fminTimeStep > G4Scheduler::Instance()->GetLimitingTimeStep()
&& fminTimeStep < G4Scheduler::Instance()->GetEndTime())
{
fminTimeStep = G4Scheduler::Instance()->GetLimitingTimeStep();
}
return fminTimeStep;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -43,7 +43,7 @@
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
PhysicsList::PhysicsList(G4int phylist)
PhysicsList::PhysicsList(G4int phylist, G4int vis)
{
SetDefaultCutValue(1.0 * micrometer);
SetVerboseLevel(1);
@@ -70,8 +70,7 @@ PhysicsList::PhysicsList(G4int phylist)
RegisterPhysics(new G4DecayPhysics());
RegisterPhysics(new G4RadioactiveDecayPhysics());
G4bool useParallelPhysicsWorld = false;
if (useParallelPhysicsWorld) {
if (vis == 1) {
RegisterPhysics(new ParallelWorldPhysics("DNAWorld", true));
}
@@ -38,6 +38,7 @@
#include "G4ITTrackingManager.hh"
#include "G4Molecule.hh"
#include "G4RunManager.hh"
#include "G4Scheduler.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
TimeStepAction::TimeStepAction(EventAction* event)
@@ -46,7 +47,7 @@ TimeStepAction::TimeStepAction(EventAction* event)
fRadicalKillDistance(4.5 * nm),
fpChemistryTrackHolder(G4ITTrackHolder::Instance())
{
AddTimeStep(1 * picosecond, 0.5 * nanosecond);
//AddTimeStep(1 * picosecond, 0.5 * nanosecond);
// ctor
}
@@ -143,6 +144,7 @@ void TimeStepAction::RadicalKillDistance()
++it_begin;
if (trackToKill != nullptr) {
fpChemistryTrackHolder->PushToKill(trackToKill);
G4Scheduler::Instance()->SetInteractionStep(true);
}
}
}
+6 -6
View File
@@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo
**************************************************************
Geant4 version Name: geant4-11-03-patch-02 (25-April-2025)
Geant4 version Name: geant4-11-03-ref-06 (30-June-2025)
Copyright : Geant4 Collaboration
References : NIM A 506 (2003), 250-303
: IEEE-TNS 53 (2006), 270-278
@@ -261,7 +261,7 @@ Lowest triplet kinetic energy 1 MeV
Enable sampling of gamma linear polarisation 0
5D gamma conversion model type 0
5D gamma conversion model on isolated ion 0
Use Ricardo-Gerardo pair production model 0
Use RiGe 5D e+e- pair production model by muons 0
Livermore data directory epics_2017
=======================================================================
====== Ionisation Parameters ========
@@ -776,14 +776,14 @@ N=17 V[N]={87900885656017340, 2136126672992718976, 110623987125446578, 176001763
Run terminated.
Run Summary
Number of events processed : 1000000
User=35.620000s Real=41.058177s Sys=0.790000s
User=38.600000s Real=39.588091s Sys=0.920000s
### End of Run (1000000 events)
G4 kernel has come to Quit state.
Deleting G4Run (id:0)
UserDetectorConstruction deleted 0x203aa70
UserPhysicsList deleted 0x2076978
UserActionInitialization deleted 0x2204d00
UserDetectorConstruction deleted 0xbab540
UserPhysicsList deleted 0xbe7028
UserActionInitialization deleted 0xd75da0
UserWorkerInitialization deleted 0
UserWorkerThreadInitialization deleted 0
UserRunAction deleted.
@@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo
**************************************************************
Geant4 version Name: geant4-11-03-patch-02 (25-April-2025)
Geant4 version Name: geant4-11-03-ref-06 (30-June-2025)
Copyright : Geant4 Collaboration
References : NIM A 506 (2003), 250-303
: IEEE-TNS 53 (2006), 270-278
@@ -28,23 +28,24 @@ Registered graphics systems are:
ASCIITree (ATree)
DAWNFILE (DAWNFILE)
G4HepRepFile (HepRepFile)
RayTracer (RayTracer)
RayTracer (RT)
VRML2FILE (VRML2FILE)
gMocrenFile (gMocrenFile)
TOOLSSG_OFFSCREEN (TSG_OFFSCREEN, TSG_FILE)
OpenGLImmediateQt (OGLIQt, OGLI)
OpenGLStoredQt (OGLSQt, OGL, OGLS)
OpenGLStoredQt (OGLSQt, OGLS)
OpenGLImmediateXm (OGLIXm, OGLIQt_FALLBACK)
OpenGLStoredXm (OGLSXm, OGLSQt_FALLBACK)
OpenGLImmediateX (OGLIX, OGLIQt_FALLBACK, OGLIXm_FALLBACK)
OpenGLStoredX (OGLSX, OGLSQt_FALLBACK, OGLSXm_FALLBACK)
RayTracerX (RayTracerX)
RayTracerX (RTX)
RayTracerQt (RTQt)
Qt3D (Qt3D)
TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK)
TOOLSSG_X11_ZB (TSG_X11_ZB, TSGX11ZB)
TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK)
TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB)
TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG)
TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG, OGL)
TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB)
You may choose a graphics system (driver) with a parameter of
the command "/vis/open" or "/vis/sceneHandler/create",
@@ -235,7 +236,7 @@ Lowest triplet kinetic energy 1 MeV
Enable sampling of gamma linear polarisation 0
5D gamma conversion model type 0
5D gamma conversion model on isolated ion 0
Use Ricardo-Gerardo pair production model 0
Use RiGe 5D e+e- pair production model by muons 0
Livermore data directory epics_2017
=======================================================================
====== Ionisation Parameters ========
@@ -791,7 +792,7 @@ Index : 8 used in the geometry : Yes
Run terminated.
Run Summary
Number of events processed : 200000
User=260.020000s Real=264.325032s Sys=1.280000s
User=276.420000s Real=283.470358s Sys=1.470000s
--------------------End of Global Run-----------------------
The run was 200000 events /score/dumpQuantityToFile boxMesh_1 dose dose_longitudinal.out
+7 -7
View File
@@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo
**************************************************************
Geant4 version Name: geant4-11-03-patch-02 (25-April-2025)
Geant4 version Name: geant4-11-03-ref-06 (30-June-2025)
Copyright : Geant4 Collaboration
References : NIM A 506 (2003), 250-303
: IEEE-TNS 53 (2006), 270-278
@@ -102,7 +102,7 @@ Lowest triplet kinetic energy 1 MeV
Enable sampling of gamma linear polarisation 0
5D gamma conversion model type 0
5D gamma conversion model on isolated ion 0
Use Ricardo-Gerardo pair production model 0
Use RiGe 5D e+e- pair production model by muons 0
Livermore data directory epics_2017
=======================================================================
====== Ionisation Parameters ========
@@ -530,14 +530,14 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics
Run terminated.
Run Summary
Number of events processed : 1000
User=1.820000s Real=1.822001s Sys=0.000000s
User=1.900000s Real=1.901189s Sys=0.000000s
--- Run 0 (master) end. Total number of events: 1000.
User=1.820000s Real=1.822188s Sys=0.000000s
User=1.900000s Real=1.901351s Sys=0.000000s
G4 kernel has come to Quit state.
Deleting G4Run (id:0)
UserDetectorConstruction deleted 0x11caa70
UserPhysicsList deleted 0x142a020
UserActionInitialization deleted 0x1434790
UserDetectorConstruction deleted 0x16e4bf0
UserPhysicsList deleted 0x19446d0
UserActionInitialization deleted 0x194ee40
UserWorkerInitialization deleted 0
UserWorkerThreadInitialization deleted 0
UserRunAction deleted.
+1 -1
View File
@@ -88,7 +88,7 @@ When the analysis is enables, the default output format is one compatible with R
The user can switch to a plaintext csv by uncommenting the corresponding macro command in output.mac (/analysis/useRoot false)
Two data analysis scripts are provided for use with each output format:
- for ROOT output (exp_microdosimetry.root), plot.C is provided. If the user intends to use this macro, ROOT must be installed (http://root.cern.ch/drupal/)
- for ROOT output (exp_microdosimetry.root), plot.C is provided. If the user intends to use this macro, ROOT must be installed (http://root.cern/drupal/)
- for csv output (exp_microdosimetry_*.csv), 1_plot_distributions.py and 2_calculate_means_rbe.py (in this order). If the user intends to use these macros, Python 3 must be installed (https://www.python.org/)
Both scripts plot the microdosimetric spectrum resulting from the simulation, calculate the microdosimetric means, and provide one or more RBE estimates (this is just provided as an example, and the user is encouraged to look into RBE modelling himself)
@@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo
**************************************************************
Geant4 version Name: geant4-11-03-patch-02 (25-April-2025)
Geant4 version Name: geant4-11-03-ref-06 (30-June-2025)
Copyright : Geant4 Collaboration
References : NIM A 506 (2003), 250-303
: IEEE-TNS 53 (2006), 270-278
@@ -28,23 +28,24 @@ Registered graphics systems are:
ASCIITree (ATree)
DAWNFILE (DAWNFILE)
G4HepRepFile (HepRepFile)
RayTracer (RayTracer)
RayTracer (RT)
VRML2FILE (VRML2FILE)
gMocrenFile (gMocrenFile)
TOOLSSG_OFFSCREEN (TSG_OFFSCREEN, TSG_FILE)
OpenGLImmediateQt (OGLIQt, OGLI)
OpenGLStoredQt (OGLSQt, OGL, OGLS)
OpenGLStoredQt (OGLSQt, OGLS)
OpenGLImmediateXm (OGLIXm, OGLIQt_FALLBACK)
OpenGLStoredXm (OGLSXm, OGLSQt_FALLBACK)
OpenGLImmediateX (OGLIX, OGLIQt_FALLBACK, OGLIXm_FALLBACK)
OpenGLStoredX (OGLSX, OGLSQt_FALLBACK, OGLSXm_FALLBACK)
RayTracerX (RayTracerX)
RayTracerX (RTX)
RayTracerQt (RTQt)
Qt3D (Qt3D)
TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK)
TOOLSSG_X11_ZB (TSG_X11_ZB, TSGX11ZB)
TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK)
TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB)
TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG)
TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG, OGL)
TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB)
You may choose a graphics system (driver) with a parameter of
the command "/vis/open" or "/vis/sceneHandler/create",
@@ -131,7 +132,7 @@ Lowest triplet kinetic energy 1 MeV
Enable sampling of gamma linear polarisation 0
5D gamma conversion model type 0
5D gamma conversion model on isolated ion 0
Use Ricardo-Gerardo pair production model 0
Use RiGe 5D e+e- pair production model by muons 0
Livermore data directory epics_2017
=======================================================================
====== Ionisation Parameters ========
@@ -783,7 +784,7 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1
Cr_sctns: NeutronHPInelasticXS: 0 eV ---> 20 MeV
Cr_sctns: G4NeutronInelasticXS: 0 eV ---> 100 TeV
Process: nCapture
Model: NeutronHPCapture: 0 eV ---> 20 MeV
Model: nRadCaptureHP: 0 eV ---> 20 MeV
Model: nRadCapture: 19.9 MeV ---> 100 TeV
Cr_sctns: NeutronHPCaptureXS: 0 eV ---> 100 TeV
Cr_sctns: G4NeutronCaptureXS: 0 eV ---> 100 TeV
@@ -845,6 +846,7 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1
=======================================================================
====== Geant4 Native Pre-compound Model Parameters ========
=======================================================================
Type of pre-compound model 0
Type of pre-compound inverse x-section 1
Pre-compound model active 1
Pre-compound excitation low energy 100 keV
@@ -861,6 +863,7 @@ Use HETC submodel for pre-compound model 0
Type of de-excitation inverse x-section 3
Type of de-excitation factory Evaporation+GEM
Number of de-excitation channels 68
Type of Fermi BreakUp model ModelVI
Min excitation energy 10 eV
Min energy per nucleon for multifragmentation 200 GeV
Limit excitation energy for Fermi BreakUp 20 MeV
+13 -10
View File
@@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo
**************************************************************
Geant4 version Name: geant4-11-03-patch-02 (25-April-2025)
Geant4 version Name: geant4-11-03-ref-06 (30-June-2025)
Copyright : Geant4 Collaboration
References : NIM A 506 (2003), 250-303
: IEEE-TNS 53 (2006), 270-278
@@ -32,23 +32,24 @@ Registered graphics systems are:
ASCIITree (ATree)
DAWNFILE (DAWNFILE)
G4HepRepFile (HepRepFile)
RayTracer (RayTracer)
RayTracer (RT)
VRML2FILE (VRML2FILE)
gMocrenFile (gMocrenFile)
TOOLSSG_OFFSCREEN (TSG_OFFSCREEN, TSG_FILE)
OpenGLImmediateQt (OGLIQt, OGLI)
OpenGLStoredQt (OGLSQt, OGL, OGLS)
OpenGLStoredQt (OGLSQt, OGLS)
OpenGLImmediateXm (OGLIXm, OGLIQt_FALLBACK)
OpenGLStoredXm (OGLSXm, OGLSQt_FALLBACK)
OpenGLImmediateX (OGLIX, OGLIQt_FALLBACK, OGLIXm_FALLBACK)
OpenGLStoredX (OGLSX, OGLSQt_FALLBACK, OGLSXm_FALLBACK)
RayTracerX (RayTracerX)
RayTracerX (RTX)
RayTracerQt (RTQt)
Qt3D (Qt3D)
TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK)
TOOLSSG_X11_ZB (TSG_X11_ZB, TSGX11ZB)
TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK)
TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB)
TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG)
TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG, OGL)
TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB)
You may choose a graphics system (driver) with a parameter of
the command "/vis/open" or "/vis/sceneHandler/create",
@@ -146,7 +147,7 @@ Lowest triplet kinetic energy 1 MeV
Enable sampling of gamma linear polarisation 0
5D gamma conversion model type 0
5D gamma conversion model on isolated ion 0
Use Ricardo-Gerardo pair production model 0
Use RiGe 5D e+e- pair production model by muons 0
Livermore data directory epics_2017
=======================================================================
====== Ionisation Parameters ========
@@ -795,6 +796,7 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1
=======================================================================
====== Geant4 Native Pre-compound Model Parameters ========
=======================================================================
Type of pre-compound model 0
Type of pre-compound inverse x-section 1
Pre-compound model active 1
Pre-compound excitation low energy 100 keV
@@ -811,6 +813,7 @@ Use HETC submodel for pre-compound model 0
Type of de-excitation inverse x-section 3
Type of de-excitation factory Evaporation+GEM
Number of de-excitation channels 68
Type of Fermi BreakUp model ModelVI
Min excitation energy 10 eV
Min energy per nucleon for multifragmentation 200 GeV
Limit excitation energy for Fermi BreakUp 20 MeV
@@ -13756,7 +13759,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu
Run terminated.
Run Summary
Number of events processed : 10
User=0.830000s Real=0.852458s Sys=0.020000s
User=0.830000s Real=0.854904s Sys=0.030000s
--------------------End of Global Run-----------------------
The run consists of 10 proton of 50 MeV
@@ -13770,9 +13773,9 @@ Graphics systems deleted.
Visualization Manager deleting...
G4 kernel has come to Quit state.
Deleting G4Run (id:0)
UserDetectorConstruction deleted 0x11a82b0
UserPhysicsList deleted 0x11a4600
UserActionInitialization deleted 0x1365f80
UserDetectorConstruction deleted 0x2551950
UserPhysicsList deleted 0x254dca0
UserActionInitialization deleted 0x2710020
UserWorkerInitialization deleted 0
UserWorkerThreadInitialization deleted 0
UserRunAction deleted.
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+8 -8
View File
@@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo
**************************************************************
Geant4 version Name: geant4-11-03-patch-02 (25-April-2025)
Geant4 version Name: geant4-11-03-ref-06 (30-June-2025)
Copyright : Geant4 Collaboration
References : NIM A 506 (2003), 250-303
: IEEE-TNS 53 (2006), 270-278
@@ -220,18 +220,18 @@ Index : 3 used in the geometry : Yes
Run terminated.
Run Summary
Number of events processed : 100000
User=68.930000s Real=69.415305s Sys=0.020000s
User=74.290000s Real=74.365780s Sys=0.020000s
/control/doifBatch /score/dumpAllQuantitiesToFile Probes Probes.csv
/score/dumpAllQuantitiesToFile Probes Probes.csv
# Mesh or volume name: Probes -- # Primitive scorer name: dose
bin 0,0,0 : statistical error 31.41(%)
to reduce the statistical error below 10%, increase number of events approximately 9.86587 times.
bin 0,0,0 : statistical error 34.2995(%)
to reduce the statistical error below 10%, increase number of events approximately 11.7645 times.
# Mesh or volume name: Probes -- # Primitive scorer name: protonFlux
bin 0,0,0 : statistical error 29.0257(%)
to reduce the statistical error below 10%, increase number of events approximately 8.42494 times.
bin 0,0,0 : statistical error 29.2441(%)
to reduce the statistical error below 10%, increase number of events approximately 8.55216 times.
# Mesh or volume name: Probes -- # Primitive scorer name: volFlx
bin 0,0,0 : statistical error 22.7812(%)
to reduce the statistical error below 10%, increase number of events approximately 5.18981 times.
bin 0,0,0 : statistical error 24.5375(%)
to reduce the statistical error below 10%, increase number of events approximately 6.0209 times.
================== Deleting memory pools ===================
Number of memory pools allocated: 12 of which, static: 0
Dynamic pools deleted: 12 / Total memory freed: 2.1 MB
@@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo
**************************************************************
Geant4 version Name: geant4-11-03-patch-02 (25-April-2025)
Geant4 version Name: geant4-11-03-ref-06 (30-June-2025)
Copyright : Geant4 Collaboration
References : NIM A 506 (2003), 250-303
: IEEE-TNS 53 (2006), 270-278
@@ -32,23 +32,24 @@ Registered graphics systems are:
ASCIITree (ATree)
DAWNFILE (DAWNFILE)
G4HepRepFile (HepRepFile)
RayTracer (RayTracer)
RayTracer (RT)
VRML2FILE (VRML2FILE)
gMocrenFile (gMocrenFile)
TOOLSSG_OFFSCREEN (TSG_OFFSCREEN, TSG_FILE)
OpenGLImmediateQt (OGLIQt, OGLI)
OpenGLStoredQt (OGLSQt, OGL, OGLS)
OpenGLStoredQt (OGLSQt, OGLS)
OpenGLImmediateXm (OGLIXm, OGLIQt_FALLBACK)
OpenGLStoredXm (OGLSXm, OGLSQt_FALLBACK)
OpenGLImmediateX (OGLIX, OGLIQt_FALLBACK, OGLIXm_FALLBACK)
OpenGLStoredX (OGLSX, OGLSQt_FALLBACK, OGLSXm_FALLBACK)
RayTracerX (RayTracerX)
RayTracerX (RTX)
RayTracerQt (RTQt)
Qt3D (Qt3D)
TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK)
TOOLSSG_X11_ZB (TSG_X11_ZB, TSGX11ZB)
TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK)
TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB)
TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG)
TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG, OGL)
TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB)
You may choose a graphics system (driver) with a parameter of
the command "/vis/open" or "/vis/sceneHandler/create",
@@ -168,7 +169,7 @@ Lowest triplet kinetic energy 1 MeV
Enable sampling of gamma linear polarisation 0
5D gamma conversion model type 0
5D gamma conversion model on isolated ion 0
Use Ricardo-Gerardo pair production model 0
Use RiGe 5D e+e- pair production model by muons 0
Livermore data directory epics_2017
=======================================================================
====== Ionisation Parameters ========
@@ -702,12 +703,12 @@ Run 0 starts ...
Run terminated.
Run Summary
Number of events processed : 500
User=2.780000s Real=2.827839s Sys=0.040000s
User=2.920000s Real=2.963446s Sys=0.030000s
Graphics systems deleted.
Visualization Manager deleting...
The simulation took: 4.1506 s to run (real time)
The simulation took: 4.26731 s to run (real time)
Dose is being written to Dose.out
i j k Dose(Gy)================== Deleting memory pools ===================
Number of memory pools allocated: 12 of which, static: 0
Dynamic pools deleted: 12 / Total memory freed: 0.4 MB
Dynamic pools deleted: 12 / Total memory freed: 0.42 MB
============================================================
@@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo
**************************************************************
Geant4 version Name: geant4-11-03-patch-02 (25-April-2025)
Geant4 version Name: geant4-11-03-ref-06 (30-June-2025)
Copyright : Geant4 Collaboration
References : NIM A 506 (2003), 250-303
: IEEE-TNS 53 (2006), 270-278
@@ -28,23 +28,24 @@ Registered graphics systems are:
ASCIITree (ATree)
DAWNFILE (DAWNFILE)
G4HepRepFile (HepRepFile)
RayTracer (RayTracer)
RayTracer (RT)
VRML2FILE (VRML2FILE)
gMocrenFile (gMocrenFile)
TOOLSSG_OFFSCREEN (TSG_OFFSCREEN, TSG_FILE)
OpenGLImmediateQt (OGLIQt, OGLI)
OpenGLStoredQt (OGLSQt, OGL, OGLS)
OpenGLStoredQt (OGLSQt, OGLS)
OpenGLImmediateXm (OGLIXm, OGLIQt_FALLBACK)
OpenGLStoredXm (OGLSXm, OGLSQt_FALLBACK)
OpenGLImmediateX (OGLIX, OGLIQt_FALLBACK, OGLIXm_FALLBACK)
OpenGLStoredX (OGLSX, OGLSQt_FALLBACK, OGLSXm_FALLBACK)
RayTracerX (RayTracerX)
RayTracerX (RTX)
RayTracerQt (RTQt)
Qt3D (Qt3D)
TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK)
TOOLSSG_X11_ZB (TSG_X11_ZB, TSGX11ZB)
TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK)
TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB)
TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG)
TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG, OGL)
TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB)
You may choose a graphics system (driver) with a parameter of
the command "/vis/open" or "/vis/sceneHandler/create",
@@ -120,10 +121,10 @@ sensitivity : 0
Construct Skull with mother volume physicalHead
Checking overlaps for volume physicalSkull:0 (G4SubtractionSolid) ... OK!
Skull created !!!!!!
Volume of Skull = 846.921 cm^3
Volume of Skull = 847.724 cm^3
Material of Skull = skeleton
Density of Material = 1.4862 g/cm^3
Mass of Skull = 1258.69 g
Mass of Skull = 1259.89 g
Construct Brain with mother physicalHead
Checking overlaps for volume physicalBrain:0 (G4Ellipsoid) ... OK!
Volume of Brain = 1470.27 cm^3
@@ -198,28 +199,28 @@ sensitivity : 0
Construct UpperSpine with mother volume physicalHead
Checking overlaps for volume physicalUpperSpine:0 (G4SubtractionSolid) ... OK!
UpperSpine created !!!!!!
Volume of UpperSpine = 126.45 cm^3
Volume of UpperSpine = 126.465 cm^3
Material of UpperSpine = skeleton
Density of Material = 1.4862 g/cm^3
Mass of UpperSpine = 187.93 g
Mass of UpperSpine = 187.952 g
MotherVolume: physicalTrunk
sensitivity : 0
Construct LeftScapula with mother volume physicalTrunk
Checking overlaps for volume physicalLeftScapula:0 (G4SubtractionSolid) ... OK!
LeftScapula created !!!!!!
Volume of LeftScapula = 91.848 cm^3
Volume of LeftScapula = 104.415 cm^3
Material of LeftScapula = skeleton
Density of Material = 1.4862 g/cm^3
Mass of LeftScapula = 136.505 g
Mass of LeftScapula = 155.181 g
MotherVolume: physicalTrunk
sensitivity : 0
Construct RightScapula with mother volume physicalTrunk
Checking overlaps for volume physicalRightScapula:0 (G4SubtractionSolid) ... OK!
RightScapula created !!!!!!
Volume of RightScapula = 106.747 cm^3
Volume of RightScapula = 106.924 cm^3
Material of RightScapula = skeleton
Density of Material = 1.4862 g/cm^3
Mass of RightScapula = 158.647 g
Mass of RightScapula = 158.91 g
Construct LeftAdrenal with mother physicalTrunk
Checking overlaps for volume physicalLeftAdrenal:0 (G4Ellipsoid) ... OK!
Left LeftAdrenal created !!!!!!
@@ -262,10 +263,10 @@ Mass of RightClavicle = 20.3099 g
Construct SmallIntestine with mother volume physicalTrunk
Checking overlaps for volume physicalSmallIntestine:0 (G4SubtractionSolid) ... OK!
SmallIntestine created !!!!!!
Volume of SmallIntestine = 1020.2 cm^3
Volume of SmallIntestine = 1019.24 cm^3
Material of SmallIntestine = soft_tissue
Density of Material = 0.9869 g/cm^3
Mass of SmallIntestine = 1006.83 g
Mass of SmallIntestine = 1005.89 g
Construct RibCage with mother volume physicalTrunk
Checking overlaps for volume physicalRibCage:0 (G4SubtractionSolid) ... OK!
Checking overlaps for volume physicalRib:0 (G4SubtractionSolid) ... OK!
@@ -281,10 +282,10 @@ Checking overlaps for volume physicalRib:0 (G4SubtractionSolid) ... OK!
Checking overlaps for volume physicalRib:0 (G4SubtractionSolid) ... OK!
Checking overlaps for volume physicalRib:0 (G4SubtractionSolid) ... OK!
RibCage created !!!!!!
Volume of RibCage = 692.88 cm^3
Volume of RibCage = 697.036 cm^3
Material of RibCage = skeleton
Density of Material = 1.4862 g/cm^3
Mass of RibCage = 1029.76 g
Mass of RibCage = 1035.94 g
MotherVolume: physicalTrunk
sensitivity : 0
Construct MiddleLowerSpine with mother volume physicalTrunk
@@ -297,10 +298,10 @@ Mass of MiddleLowerSpine = 1120.57 g
Construct Pelvis with mother volume physicalTrunk
Checking overlaps for volume physicalPelvis:0 (G4SubtractionSolid) ... OK!
Pelvis created !!!!!!
Volume of Pelvis = 606.07 cm^3
Volume of Pelvis = 610.442 cm^3
Material of Pelvis = skeleton
Density of Material = 1.4862 g/cm^3
Mass of Pelvis = 900.741 g
Mass of Pelvis = 907.239 g
Construct Stomach with mother volume physicalTrunk
Checking overlaps for volume physicalStomach:0 (G4Ellipsoid) ... OK!
Stomach created !!!!!!
@@ -332,40 +333,40 @@ Mass of Spleen = 173.625 g
Construct Pancreas with mother volume physicalTrunk
Checking overlaps for volume physicalPancreas:0 (G4SubtractionSolid) ... OK!
Pancreas created !!!!!!
Volume of Pancreas = 61.101 cm^3
Volume of Pancreas = 61.0986 cm^3
Material of Pancreas = soft_tissue
Density of Material = 0.9869 g/cm^3
Mass of Pancreas = 60.3006 g
Mass of Pancreas = 60.2982 g
Construct LeftKidney with mother volume physicalTrunk
Checking overlaps for volume physicalLeftKidney:0 (G4SubtractionSolid) ... OK!
Left LeftKidney created !!!!!!
Volume of LeftKidney = 144.001 cm^3
Volume of LeftKidney = 143.998 cm^3
Material of LeftKidney = soft_tissue
Density of Material = 0.9869 g/cm^3
Mass of LeftKidney = 142.115 g
Mass of LeftKidney = 142.112 g
Construct RightKidney with mother volume physicalTrunk
Checking overlaps for volume physicalRightKidney:0 (G4SubtractionSolid) ... OK!
RightKidney created !!!!!!
Volume of RightKidney = 143.986 cm^3
Volume of RightKidney = 143.996 cm^3
Material of RightKidney = soft_tissue
Density of Material = 0.9869 g/cm^3
Mass of RightKidney = 142.1 g
Mass of RightKidney = 142.109 g
Construct UrinaryBladder with mother volume physicalTrunk
Checking overlaps for volume physicalUrinaryBladder:0 (G4SubtractionSolid) ... OK!
UrinaryBladder created !!!!!!
Volume of UrinaryBladder = 45.7615 cm^3
Volume of UrinaryBladder = 45.8796 cm^3
Material of UrinaryBladder = soft_tissue
Density of Material = 0.9869 g/cm^3
Mass of UrinaryBladder = 45.1621 g
Mass of UrinaryBladder = 45.2785 g
MotherVolume: physicalWorld
sensitivity : 0
Construct MaleGenitalia with mother volume physicalWorld
Checking overlaps for volume physicalMaleGenitalia:0 (G4SubtractionSolid) ... OK!
MaleGenitalia created !!!!!!
Volume of MaleGenitalia = 229.106 cm^3
Volume of MaleGenitalia = 228.823 cm^3
Material of MaleGenitalia = soft_tissue
Density of Material = 0.9869 g/cm^3
Mass of MaleGenitalia = 226.105 g
Mass of MaleGenitalia = 225.826 g
MotherVolume: physicalWorld
sensitivity : 0
Construct LeftTeste with mother volume physicalMaleGenitalia
@@ -437,7 +438,7 @@ Lowest triplet kinetic energy 1 MeV
Enable sampling of gamma linear polarisation 0
5D gamma conversion model type 0
5D gamma conversion model on isolated ion 0
Use Ricardo-Gerardo pair production model 0
Use RiGe 5D e+e- pair production model by muons 0
Livermore data directory epics_2017
=======================================================================
====== Ionisation Parameters ========
@@ -936,17 +937,18 @@ Index : 2 used in the geometry : Yes
... create ntuple T column : edep ntupleId 1 - done
Number of events = 100
Energy Total in Run:logicalBrain, ID: 0, Energy Deposition (MeV): 0
Energy Total in Run:logicalHead, ID: 1, Energy Deposition (MeV): 4.63096
Analysis: organ 1 edep: 4.63096
Energy Total in Run:logicalHead, ID: 1, Energy Deposition (MeV): 2.0354
Analysis: organ 1 edep: 2.0354
Energy Total in Run:logicalHeart, ID: 2, Energy Deposition (MeV): 0
Energy Total in Run:logicalLeftAdrenal, ID: 3, Energy Deposition (MeV): 0
Energy Total in Run:logicalLeftArmBone, ID: 4, Energy Deposition (MeV): 0
Energy Total in Run:logicalLeftBreast, ID: 5, Energy Deposition (MeV): 0
Energy Total in Run:logicalLeftClavicle, ID: 6, Energy Deposition (MeV): 0
Energy Total in Run:logicalLeftKidney, ID: 7, Energy Deposition (MeV): 0
Energy Total in Run:logicalLeftLeg, ID: 8, Energy Deposition (MeV): 14.3441
Analysis: organ 8 edep: 14.3441
Energy Total in Run:logicalLeftLegBone, ID: 9, Energy Deposition (MeV): 0
Energy Total in Run:logicalLeftLeg, ID: 8, Energy Deposition (MeV): 15.7197
Analysis: organ 8 edep: 15.7197
Energy Total in Run:logicalLeftLegBone, ID: 9, Energy Deposition (MeV): 0.084326
Analysis: organ 9 edep: 0.084326
Energy Total in Run:logicalLeftLung, ID: 10, Energy Deposition (MeV): 0
Energy Total in Run:logicalLeftOvary, ID: 11, Energy Deposition (MeV): 0
Energy Total in Run:logicalLeftScapula, ID: 12, Energy Deposition (MeV): 0
@@ -956,15 +958,15 @@ Energy Total in Run:logicalMaleGenitalia, ID: 15, Energy Deposition (MeV): 0
Energy Total in Run:logicalMiddleLowerSpine, ID: 16, Energy Deposition (MeV): 0
Energy Total in Run:logicalPancreas, ID: 17, Energy Deposition (MeV): 0
Energy Total in Run:logicalPelvis, ID: 18, Energy Deposition (MeV): 0
Energy Total in Run:logicalRibCage, ID: 19, Energy Deposition (MeV): 0.659836
Analysis: organ 19 edep: 0.659836
Energy Total in Run:logicalRibCage, ID: 19, Energy Deposition (MeV): 0.379226
Analysis: organ 19 edep: 0.379226
Energy Total in Run:logicalRightAdrenal, ID: 20, Energy Deposition (MeV): 0
Energy Total in Run:logicalRightArmBone, ID: 21, Energy Deposition (MeV): 0
Energy Total in Run:logicalRightBreast, ID: 22, Energy Deposition (MeV): 0
Energy Total in Run:logicalRightClavicle, ID: 23, Energy Deposition (MeV): 0
Energy Total in Run:logicalRightKidney, ID: 24, Energy Deposition (MeV): 0
Energy Total in Run:logicalRightLeg, ID: 25, Energy Deposition (MeV): 10.6217
Analysis: organ 25 edep: 10.6217
Energy Total in Run:logicalRightLeg, ID: 25, Energy Deposition (MeV): 8.60947
Analysis: organ 25 edep: 8.60947
Energy Total in Run:logicalRightLegBone, ID: 26, Energy Deposition (MeV): 0
Energy Total in Run:logicalRightLung, ID: 27, Energy Deposition (MeV): 0
Energy Total in Run:logicalRightOvary, ID: 28, Energy Deposition (MeV): 0
@@ -976,13 +978,13 @@ Energy Total in Run:logicalSpleen, ID: 33, Energy Deposition (MeV): 0
Energy Total in Run:logicalStomach, ID: 34, Energy Deposition (MeV): 0
Energy Total in Run:logicalThymus, ID: 35, Energy Deposition (MeV): 0
Energy Total in Run:logicalThyroid, ID: 36, Energy Deposition (MeV): 0
Energy Total in Run:logicalTrunk, ID: 37, Energy Deposition (MeV): 23.6957
Analysis: organ 37 edep: 23.6957
Energy Total in Run:logicalTrunk, ID: 37, Energy Deposition (MeV): 25.3855
Analysis: organ 37 edep: 25.3855
Energy Total in Run:logicalUpperLargeIntestine, ID: 38, Energy Deposition (MeV): 0
Energy Total in Run:logicalUpperSpine, ID: 39, Energy Deposition (MeV): 0
Energy Total in Run:logicalUrinaryBladder, ID: 40, Energy Deposition (MeV): 0
Energy Total in Run:logicalUterus, ID: 41, Energy Deposition (MeV): 0
Total Energy deposit in the body is: 53.9523 MeV
Total Energy deposit in the body is: 52.2136 MeV
... write file : human_phantom.root - done
... close file : human_phantom.root - done
... clear files - done
@@ -10,7 +10,7 @@
**************************************************************
Geant4 version Name: geant4-11-03-patch-02 (25-April-2025)
Geant4 version Name: geant4-11-03-ref-06 (30-June-2025)
Copyright : Geant4 Collaboration
References : NIM A 506 (2003), 250-303
: IEEE-TNS 53 (2006), 270-278
@@ -27,23 +27,24 @@ Registered graphics systems are:
ASCIITree (ATree)
DAWNFILE (DAWNFILE)
G4HepRepFile (HepRepFile)
RayTracer (RayTracer)
RayTracer (RT)
VRML2FILE (VRML2FILE)
gMocrenFile (gMocrenFile)
TOOLSSG_OFFSCREEN (TSG_OFFSCREEN, TSG_FILE)
OpenGLImmediateQt (OGLIQt, OGLI)
OpenGLStoredQt (OGLSQt, OGL, OGLS)
OpenGLStoredQt (OGLSQt, OGLS)
OpenGLImmediateXm (OGLIXm, OGLIQt_FALLBACK)
OpenGLStoredXm (OGLSXm, OGLSQt_FALLBACK)
OpenGLImmediateX (OGLIX, OGLIQt_FALLBACK, OGLIXm_FALLBACK)
OpenGLStoredX (OGLSX, OGLSQt_FALLBACK, OGLSXm_FALLBACK)
RayTracerX (RayTracerX)
RayTracerX (RTX)
RayTracerQt (RTQt)
Qt3D (Qt3D)
TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK)
TOOLSSG_X11_ZB (TSG_X11_ZB, TSGX11ZB)
TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK)
TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB)
TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG)
TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG, OGL)
TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB)
You may choose a graphics system (driver) with a parameter of
the command "/vis/open" or "/vis/sceneHandler/create",
@@ -154,7 +155,7 @@ Lowest triplet kinetic energy 1 MeV
Enable sampling of gamma linear polarisation 0
5D gamma conversion model type 0
5D gamma conversion model on isolated ion 0
Use Ricardo-Gerardo pair production model 0
Use RiGe 5D e+e- pair production model by muons 0
Livermore data directory epics_2017
=======================================================================
====== Ionisation Parameters ========
@@ -603,7 +604,7 @@ Run 0 starts ...
Run terminated.
Run Summary
Number of events processed : 2000
User=4.790000s Real=7.156374s Sys=0.110000s
User=5.130000s Real=5.247212s Sys=0.120000s
/score/dumpQuantityToFile boxMesh_1 dose dose.out
Graphics systems deleted.
Visualization Manager deleting...
@@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo
**************************************************************
Geant4 version Name: geant4-11-03-patch-02 (25-April-2025)
Geant4 version Name: geant4-11-03-ref-06 (30-June-2025)
Copyright : Geant4 Collaboration
References : NIM A 506 (2003), 250-303
: IEEE-TNS 53 (2006), 270-278
@@ -35,23 +35,24 @@ Registered graphics systems are:
ASCIITree (ATree)
DAWNFILE (DAWNFILE)
G4HepRepFile (HepRepFile)
RayTracer (RayTracer)
RayTracer (RT)
VRML2FILE (VRML2FILE)
gMocrenFile (gMocrenFile)
TOOLSSG_OFFSCREEN (TSG_OFFSCREEN, TSG_FILE)
OpenGLImmediateQt (OGLIQt, OGLI)
OpenGLStoredQt (OGLSQt, OGL, OGLS)
OpenGLStoredQt (OGLSQt, OGLS)
OpenGLImmediateXm (OGLIXm, OGLIQt_FALLBACK)
OpenGLStoredXm (OGLSXm, OGLSQt_FALLBACK)
OpenGLImmediateX (OGLIX, OGLIQt_FALLBACK, OGLIXm_FALLBACK)
OpenGLStoredX (OGLSX, OGLSQt_FALLBACK, OGLSXm_FALLBACK)
RayTracerX (RayTracerX)
RayTracerX (RTX)
RayTracerQt (RTQt)
Qt3D (Qt3D)
TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK)
TOOLSSG_X11_ZB (TSG_X11_ZB, TSGX11ZB)
TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK)
TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB)
TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG)
TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG, OGL)
TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB)
You may choose a graphics system (driver) with a parameter of
the command "/vis/open" or "/vis/sceneHandler/create",
@@ -136,7 +137,7 @@ Lowest triplet kinetic energy 1 MeV
Enable sampling of gamma linear polarisation 0
5D gamma conversion model type 0
5D gamma conversion model on isolated ion 0
Use Ricardo-Gerardo pair production model 0
Use RiGe 5D e+e- pair production model by muons 0
Livermore data directory epics_2017
=======================================================================
====== Ionisation Parameters ========
@@ -789,6 +790,7 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1
=======================================================================
====== Geant4 Native Pre-compound Model Parameters ========
=======================================================================
Type of pre-compound model 0
Type of pre-compound inverse x-section 1
Pre-compound model active 1
Pre-compound excitation low energy 100 keV
@@ -805,6 +807,7 @@ Use HETC submodel for pre-compound model 0
Type of de-excitation inverse x-section 3
Type of de-excitation factory Evaporation+GEM
Number of de-excitation channels 68
Type of Fermi BreakUp model ModelVI
Min excitation energy 10 eV
Min energy per nucleon for multifragmentation 200 GeV
Limit excitation energy for Fermi BreakUp 20 MeV
@@ -932,13 +935,13 @@ Start closing geometry.
G4GeometryManager::ReportVoxelStats -- Voxel Statistics
Total memory consumed for geometry optimisation: 395 kByte
Total CPU time elapsed for geometry optimisation: 0.11 seconds
Total CPU time elapsed for geometry optimisation: 0.13 seconds
Voxelisation: top CPU users:
Percent Total CPU System CPU Memory Volume
------- ---------- ---------- -------- ----------
54.55 0.06 0.00 152k EmModuleLogical
45.45 0.05 0.00 238k HadModuleLogical
53.85 0.07 0.00 152k EmModuleLogical
46.15 0.06 0.00 238k HadModuleLogical
0.00 0.00 0.00 4k Mother
0.00 0.00 0.00 0k CryostatLogical
0.00 0.00 0.00 0k LArgLogical
@@ -949,8 +952,8 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics
Voxelisation: top memory users:
Percent Memory Heads Nodes Pointers Total CPU Volume
------- -------- ------ ------ -------- ---------- ----------
60.17 238k 1385 2370 3792 0.05 HadModuleLogical
38.50 152k 1129 1152 2426 0.06 EmModuleLogical
60.17 238k 1385 2370 3792 0.06 HadModuleLogical
38.50 152k 1129 1152 2426 0.07 EmModuleLogical
0.93 3k 8 42 146 0.00 Mother
0.12 0k 1 7 8 0.00 SolidWLogical
0.12 0k 1 7 8 0.00 CuPlateLogical
@@ -971,356 +974,356 @@ Read 2001 events from file data-tracks/tracks-20GeV.dat
Number of F1 Tiles with Positive energy : 57
Number of F2 tiles with Positive energy : 0
Visisble Energy in S1 , S2 , S3 in (MeV)
2.57907 7.33766 6.69549
1.71242 3.02495 3.42835
Visible Energy in Hole Counter (MeV)
0 177.551
0 40.8575
Visible Energy in Upstream Dead Materials
2691.63
1172.24
Visible Energy in Tail Catcher Scintillator
0 0 0 0 0 0 0
Visible Energy in Tail Catcher Absorber
0 0 0 0 0 0
N Tracks out of world 104
N Tracks out of world 47
N Secondaries 86
EmEdep is=15075.4 MeV
HadEdep is=0.703927 MeV
Edep in FCAL1 FCAl2 : 15075.4 0.703927
EmEdep is=18147.5 MeV
HadEdep is=0 MeV
Edep in FCAL1 FCAl2 : 18147.5 0
**** Primary : 2
Vertex : (-3.76032,10.9751,32740)
Number of F1 Tiles with Positive energy : 42
Number of F1 Tiles with Positive energy : 59
Number of F2 tiles with Positive energy : 0
Visisble Energy in S1 , S2 , S3 in (MeV)
1.8573 1.55694 1.61062
1.94017 1.97877 1.65557
Visible Energy in Hole Counter (MeV)
0 32.5707
0 114.66
Visible Energy in Upstream Dead Materials
284.29
1220.42
Visible Energy in Tail Catcher Scintillator
0 0 0 0 0 0 0
Visible Energy in Tail Catcher Absorber
0 0 0 0 0 0
N Tracks out of world 22
N Secondaries 238
EmEdep is=19110.7 MeV
HadEdep is=0 MeV
Edep in FCAL1 FCAl2 : 19110.7 0
N Tracks out of world 54
N Secondaries 176
EmEdep is=17026.2 MeV
HadEdep is=7.83971 MeV
Edep in FCAL1 FCAl2 : 17026.2 7.83971
**** Primary : 3
Vertex : (13.1951,2.677,32740)
Number of F1 Tiles with Positive energy : 44
Number of F2 tiles with Positive energy : 0
Visisble Energy in S1 , S2 , S3 in (MeV)
1.44848 1.73766 1.74269
Visible Energy in Hole Counter (MeV)
0 0.119893
Visible Energy in Upstream Dead Materials
15.6324
Visible Energy in Tail Catcher Scintillator
0 0 0 0 0 0 0
Visible Energy in Tail Catcher Absorber
0 0 0 0 0 0
N Tracks out of world 10
N Secondaries 306
EmEdep is=19431.7 MeV
HadEdep is=13.2519 MeV
Edep in FCAL1 FCAl2 : 19431.7 13.2519
**** Primary : 4
Vertex : (-8.66148,-8.80731,32740)
Number of F1 Tiles with Positive energy : 41
Number of F2 tiles with Positive energy : 0
Visisble Energy in S1 , S2 , S3 in (MeV)
2.31389 1.56181 1.57264
Visible Energy in Hole Counter (MeV)
0 0
Visible Energy in Upstream Dead Materials
2.59633
Visible Energy in Tail Catcher Scintillator
0 0 0 0 0 0 0
Visible Energy in Tail Catcher Absorber
0 0 0 0 0 0
N Tracks out of world 4
N Secondaries 133
EmEdep is=19799.4 MeV
HadEdep is=0 MeV
Edep in FCAL1 FCAl2 : 19799.4 0
**** Primary : 5
Vertex : (4.75859,7.01622,32740)
Number of F1 Tiles with Positive energy : 45
Number of F2 tiles with Positive energy : 0
Visisble Energy in S1 , S2 , S3 in (MeV)
1.65902 1.61061 2.35777
Visible Energy in Hole Counter (MeV)
0 0
Visible Energy in Upstream Dead Materials
9.84591
Visible Energy in Tail Catcher Scintillator
0 0 0 0 0 0 0
Visible Energy in Tail Catcher Absorber
0 0 0 0 0 0
N Tracks out of world 2
N Secondaries 180
EmEdep is=19663.7 MeV
HadEdep is=0 MeV
Edep in FCAL1 FCAl2 : 19663.7 0
**** Primary : 6
Vertex : (1.94335,14.9228,32740)
Number of F1 Tiles with Positive energy : 49
Number of F2 tiles with Positive energy : 0
Visisble Energy in S1 , S2 , S3 in (MeV)
1.54924 1.55628 1.69596
Visible Energy in Hole Counter (MeV)
0 66.1231
Visible Energy in Upstream Dead Materials
530.44
Visible Energy in Tail Catcher Scintillator
0 0 0 0 0 0 0
Visible Energy in Tail Catcher Absorber
0 0 0 0 0 0
N Tracks out of world 25
N Secondaries 222
EmEdep is=18988.3 MeV
HadEdep is=0 MeV
Edep in FCAL1 FCAl2 : 18988.3 0
**** Primary : 7
Vertex : (-10.9878,-6.7949,32740)
Number of F1 Tiles with Positive energy : 57
Number of F2 tiles with Positive energy : 0
Visisble Energy in S1 , S2 , S3 in (MeV)
1.89929 1.53525 1.78492
Visible Energy in Hole Counter (MeV)
0 94.4816
Visible Energy in Upstream Dead Materials
4633.9
Visible Energy in Tail Catcher Scintillator
0 0 0 0 0 0 0
Visible Energy in Tail Catcher Absorber
0 0 0 0 0 0
N Tracks out of world 125
N Secondaries 178
EmEdep is=13553.3 MeV
HadEdep is=0.53408 MeV
Edep in FCAL1 FCAl2 : 13553.3 0.53408
**** Primary : 8
Vertex : (10.9757,-1.49585,32740)
Number of F1 Tiles with Positive energy : 46
Number of F2 tiles with Positive energy : 0
Visisble Energy in S1 , S2 , S3 in (MeV)
1.73757 2.05683 1.91495
2.28585 1.6463 1.89284
Visible Energy in Hole Counter (MeV)
0 0
0 3.28206
Visible Energy in Upstream Dead Materials
11.4031
Visible Energy in Tail Catcher Scintillator
0.129634 0 0 0 0 0 0
Visible Energy in Tail Catcher Absorber
0 0 0 0 0 0
N Tracks out of world 3
N Secondaries 222
EmEdep is=19696.8 MeV
HadEdep is=0.28744 MeV
Edep in FCAL1 FCAl2 : 19696.8 0.28744
**** Primary : 9
Vertex : (-27.7734,3.36444,32740)
Number of F1 Tiles with Positive energy : 63
Number of F2 tiles with Positive energy : 0
Visisble Energy in S1 , S2 , S3 in (MeV)
1.64165 1.63314 1.90006
Visible Energy in Hole Counter (MeV)
0 78.158
Visible Energy in Upstream Dead Materials
3514.35
Visible Energy in Tail Catcher Scintillator
0 0 0 0 0 0 0
Visible Energy in Tail Catcher Absorber
0 0 0 0 0 0
N Tracks out of world 119
N Secondaries 273
EmEdep is=14512 MeV
HadEdep is=0.0139527 MeV
Edep in FCAL1 FCAl2 : 14512 0.0139527
**** Primary : 10
Vertex : (-22.5474,4.1006,32740)
Number of F1 Tiles with Positive energy : 47
Number of F2 tiles with Positive energy : 0
Visisble Energy in S1 , S2 , S3 in (MeV)
1.85332 1.59136 2.22846
Visible Energy in Hole Counter (MeV)
0 0
Visible Energy in Upstream Dead Materials
1.86358
3.81961
Visible Energy in Tail Catcher Scintillator
0 0 0 0 0 0 0
Visible Energy in Tail Catcher Absorber
0 0 0 0 0 0
N Tracks out of world 1
N Secondaries 268
EmEdep is=19870.7 MeV
N Secondaries 190
EmEdep is=19810.2 MeV
HadEdep is=0 MeV
Edep in FCAL1 FCAl2 : 19870.7 0
---> Begin of event: 11
**** Primary : 11
Vertex : (-6.31939,21.5056,32740)
Number of F1 Tiles with Positive energy : 47
Edep in FCAL1 FCAl2 : 19810.2 0
**** Primary : 4
Vertex : (-8.66148,-8.80731,32740)
Number of F1 Tiles with Positive energy : 48
Number of F2 tiles with Positive energy : 0
Visisble Energy in S1 , S2 , S3 in (MeV)
3.4047 1.59351 1.57649
2.40198 2.15547 3.42258
Visible Energy in Hole Counter (MeV)
0 0
0 147.616
Visible Energy in Upstream Dead Materials
11.0831
1517.96
Visible Energy in Tail Catcher Scintillator
0 0 0 0 0 0 0
Visible Energy in Tail Catcher Absorber
0 0 0 0 0 0
N Tracks out of world 3
N Secondaries 147
EmEdep is=19724 MeV
N Tracks out of world 90
N Secondaries 81
EmEdep is=17255.5 MeV
HadEdep is=0 MeV
Edep in FCAL1 FCAl2 : 19724 0
**** Primary : 12
Vertex : (17.1015,6.30557,32740)
Number of F1 Tiles with Positive energy : 45
Edep in FCAL1 FCAl2 : 17255.5 0
**** Primary : 5
Vertex : (4.75859,7.01622,32740)
Number of F1 Tiles with Positive energy : 57
Number of F2 tiles with Positive energy : 0
Visisble Energy in S1 , S2 , S3 in (MeV)
2.81625 1.76504 1.77859
1.70248 1.69631 2.37992
Visible Energy in Hole Counter (MeV)
0 0
Visible Energy in Upstream Dead Materials
10.2501
138.73
Visible Energy in Tail Catcher Scintillator
0 0 0 0 0 0 0
Visible Energy in Tail Catcher Absorber
0 0 0 0 0 0
N Tracks out of world 54
N Secondaries 169
EmEdep is=18728.6 MeV
HadEdep is=21.9452 MeV
Edep in FCAL1 FCAl2 : 18728.6 21.9452
**** Primary : 6
Vertex : (1.94335,14.9228,32740)
Number of F1 Tiles with Positive energy : 42
Number of F2 tiles with Positive energy : 0
Visisble Energy in S1 , S2 , S3 in (MeV)
1.70774 2.16739 1.83596
Visible Energy in Hole Counter (MeV)
0 25.5978
Visible Energy in Upstream Dead Materials
266.758
Visible Energy in Tail Catcher Scintillator
0.00559612 0 0 0 0 0 0
Visible Energy in Tail Catcher Absorber
0 0 0 0 0 0
N Tracks out of world 16
N Secondaries 217
EmEdep is=19553.4 MeV
HadEdep is=0 MeV
Edep in FCAL1 FCAl2 : 19553.4 0
**** Primary : 7
Vertex : (-10.9878,-6.7949,32740)
Number of F1 Tiles with Positive energy : 82
Number of F2 tiles with Positive energy : 0
Visisble Energy in S1 , S2 , S3 in (MeV)
1.73317 2.5286 4.20759
Visible Energy in Hole Counter (MeV)
0 137.889
Visible Energy in Upstream Dead Materials
10641.7
Visible Energy in Tail Catcher Scintillator
0 0 0 0 0 0 0
Visible Energy in Tail Catcher Absorber
0 0 0 0 0 0
N Tracks out of world 247
N Secondaries 81
EmEdep is=7116.57 MeV
HadEdep is=0.198643 MeV
Edep in FCAL1 FCAl2 : 7116.57 0.198643
**** Primary : 8
Vertex : (10.9757,-1.49585,32740)
Number of F1 Tiles with Positive energy : 43
Number of F2 tiles with Positive energy : 0
Visisble Energy in S1 , S2 , S3 in (MeV)
3.36536 4.39939 4.64825
Visible Energy in Hole Counter (MeV)
0 0
Visible Energy in Upstream Dead Materials
13.0571
Visible Energy in Tail Catcher Scintillator
0 0 0 0 0 0 0
Visible Energy in Tail Catcher Absorber
0 0 0 0 0 0
N Tracks out of world 5
N Secondaries 329
EmEdep is=19733.4 MeV
HadEdep is=10.1646 MeV
Edep in FCAL1 FCAl2 : 19733.4 10.1646
**** Primary : 9
Vertex : (-27.7734,3.36444,32740)
Number of F1 Tiles with Positive energy : 71
Number of F2 tiles with Positive energy : 0
Visisble Energy in S1 , S2 , S3 in (MeV)
1.65848 2.38752 1.60677
Visible Energy in Hole Counter (MeV)
0 136.633
Visible Energy in Upstream Dead Materials
5872.82
Visible Energy in Tail Catcher Scintillator
0 0 0 0 0 0 0
Visible Energy in Tail Catcher Absorber
0 0 0 0 0 0
N Tracks out of world 170
N Secondaries 277
EmEdep is=11835.1 MeV
HadEdep is=0.150674 MeV
Edep in FCAL1 FCAl2 : 11835.1 0.150674
**** Primary : 10
Vertex : (-22.5474,4.1006,32740)
Number of F1 Tiles with Positive energy : 51
Number of F2 tiles with Positive energy : 0
Visisble Energy in S1 , S2 , S3 in (MeV)
2.00786 1.66681 2.065
Visible Energy in Hole Counter (MeV)
0 0
Visible Energy in Upstream Dead Materials
23.3451
Visible Energy in Tail Catcher Scintillator
0 0 0 0 0 0 0
Visible Energy in Tail Catcher Absorber
0.318116 0 0 0 0 0
N Tracks out of world 5
N Secondaries 161
EmEdep is=19751.1 MeV
HadEdep is=6.18244 MeV
Edep in FCAL1 FCAl2 : 19751.1 6.18244
---> Begin of event: 11
**** Primary : 11
Vertex : (-6.31939,21.5056,32740)
Number of F1 Tiles with Positive energy : 70
Number of F2 tiles with Positive energy : 0
Visisble Energy in S1 , S2 , S3 in (MeV)
1.63399 1.86588 2.5733
Visible Energy in Hole Counter (MeV)
0 76.0273
Visible Energy in Upstream Dead Materials
3029.53
Visible Energy in Tail Catcher Scintillator
0 0 0 0 0 0 0
Visible Energy in Tail Catcher Absorber
0 0 0 0 0 0
N Tracks out of world 116
N Secondaries 166
EmEdep is=14735.1 MeV
HadEdep is=0.892604 MeV
Edep in FCAL1 FCAl2 : 14735.1 0.892604
**** Primary : 12
Vertex : (17.1015,6.30557,32740)
Number of F1 Tiles with Positive energy : 49
Number of F2 tiles with Positive energy : 0
Visisble Energy in S1 , S2 , S3 in (MeV)
1.97063 4.62456 5.49351
Visible Energy in Hole Counter (MeV)
0 13.7257
Visible Energy in Upstream Dead Materials
735.33
Visible Energy in Tail Catcher Scintillator
0.0356716 0 0 0 0 0 0
Visible Energy in Tail Catcher Absorber
0 0 0 0 0 0
N Tracks out of world 28
N Secondaries 175
EmEdep is=18719.5 MeV
HadEdep is=4.35726 MeV
Edep in FCAL1 FCAl2 : 18719.5 4.35726
**** Primary : 13
Vertex : (-24.9484,11.8659,32740)
Number of F1 Tiles with Positive energy : 24
Number of F2 tiles with Positive energy : 0
Visisble Energy in S1 , S2 , S3 in (MeV)
2.01042 1.48438 1.89312
Visible Energy in Hole Counter (MeV)
0 63.952
Visible Energy in Upstream Dead Materials
18102.7
Visible Energy in Tail Catcher Scintillator
0 0 0 0 0 0 0
Visible Energy in Tail Catcher Absorber
0 0 0 0 0 0
N Tracks out of world 168
N Secondaries 166
EmEdep is=894.898 MeV
HadEdep is=0 MeV
Edep in FCAL1 FCAl2 : 894.898 0
**** Primary : 14
Vertex : (-0.133696,18.3151,32740)
Number of F1 Tiles with Positive energy : 40
Number of F2 tiles with Positive energy : 0
Visisble Energy in S1 , S2 , S3 in (MeV)
1.66628 1.56597 1.59652
Visible Energy in Hole Counter (MeV)
0 0
Visible Energy in Upstream Dead Materials
5.13535
Visible Energy in Tail Catcher Scintillator
0.0295447 0 0 0 0 0 0
Visible Energy in Tail Catcher Absorber
0 0 0 0 0 0
N Tracks out of world 5
N Secondaries 155
EmEdep is=19831 MeV
HadEdep is=0 MeV
Edep in FCAL1 FCAl2 : 19831 0
**** Primary : 15
Vertex : (17.3196,17.6617,32740)
Number of F1 Tiles with Positive energy : 46
Number of F2 tiles with Positive energy : 0
Visisble Energy in S1 , S2 , S3 in (MeV)
1.61689 1.54991 1.45078
Visible Energy in Hole Counter (MeV)
0 0
Visible Energy in Upstream Dead Materials
15.0612
Visible Energy in Tail Catcher Scintillator
0 0 0 0 0 0 0
Visible Energy in Tail Catcher Absorber
0 0 0 0 0 0
N Tracks out of world 2
N Secondaries 105
EmEdep is=19802.3 MeV
HadEdep is=2.07056 MeV
Edep in FCAL1 FCAl2 : 19802.3 2.07056
**** Primary : 13
Vertex : (-24.9484,11.8659,32740)
Number of F1 Tiles with Positive energy : 30
N Secondaries 338
EmEdep is=19915.5 MeV
HadEdep is=1.57817 MeV
Edep in FCAL1 FCAl2 : 19915.5 1.57817
**** Primary : 16
Vertex : (-20.8489,10.8988,32740)
Number of F1 Tiles with Positive energy : 52
Number of F2 tiles with Positive energy : 0
Visisble Energy in S1 , S2 , S3 in (MeV)
3.48366 1.68488 1.68961
2.05147 1.63419 2.14497
Visible Energy in Hole Counter (MeV)
0 104.454
0 147.125
Visible Energy in Upstream Dead Materials
17906.7
6049.69
Visible Energy in Tail Catcher Scintillator
0 0 0 0 0 0 0
Visible Energy in Tail Catcher Absorber
0 0 0 0 0 0
N Tracks out of world 257
N Secondaries 202
EmEdep is=990.173 MeV
HadEdep is=2.52591 MeV
Edep in FCAL1 FCAl2 : 990.173 2.52591
**** Primary : 14
Vertex : (-0.133696,18.3151,32740)
Number of F1 Tiles with Positive energy : 44
N Tracks out of world 192
N Secondaries 171
EmEdep is=12235.4 MeV
HadEdep is=0.555008 MeV
Edep in FCAL1 FCAl2 : 12235.4 0.555008
**** Primary : 17
Vertex : (-9.96316,-9.33478,32740)
Number of F1 Tiles with Positive energy : 47
Number of F2 tiles with Positive energy : 0
Visisble Energy in S1 , S2 , S3 in (MeV)
1.79406 3.41436 1.98361
1.85844 2.56686 1.65162
Visible Energy in Hole Counter (MeV)
0 0
0 3.65441
Visible Energy in Upstream Dead Materials
9.17599
0.985284
Visible Energy in Tail Catcher Scintillator
0 0 0 0 0 0 0
Visible Energy in Tail Catcher Absorber
0 0 0 0 0 0
N Tracks out of world 3
N Secondaries 238
EmEdep is=19633.6 MeV
HadEdep is=0 MeV
Edep in FCAL1 FCAl2 : 19633.6 0
**** Primary : 15
Vertex : (17.3196,17.6617,32740)
Number of F1 Tiles with Positive energy : 40
Number of F2 tiles with Positive energy : 0
Visisble Energy in S1 , S2 , S3 in (MeV)
1.73439 1.69628 1.67912
Visible Energy in Hole Counter (MeV)
0 0
Visible Energy in Upstream Dead Materials
4.35334
Visible Energy in Tail Catcher Scintillator
0 0 0 0 0 0 0
Visible Energy in Tail Catcher Absorber
0 0 0 0 0 0
N Tracks out of world 5
N Secondaries 247
EmEdep is=19836.2 MeV
HadEdep is=0 MeV
Edep in FCAL1 FCAl2 : 19836.2 0
**** Primary : 16
Vertex : (-20.8489,10.8988,32740)
Number of F1 Tiles with Positive energy : 62
Number of F2 tiles with Positive energy : 0
Visisble Energy in S1 , S2 , S3 in (MeV)
1.5838 1.83274 1.58777
Visible Energy in Hole Counter (MeV)
0 211.385
Visible Energy in Upstream Dead Materials
9068.27
Visible Energy in Tail Catcher Scintillator
0 0 0 0 0 0 0
Visible Energy in Tail Catcher Absorber
0 0 0 0 0 0
N Tracks out of world 291
N Secondaries 250
EmEdep is=8706.49 MeV
HadEdep is=6.93863 MeV
Edep in FCAL1 FCAl2 : 8706.49 6.93863
**** Primary : 17
Vertex : (-9.96316,-9.33478,32740)
Number of F1 Tiles with Positive energy : 43
Number of F2 tiles with Positive energy : 0
Visisble Energy in S1 , S2 , S3 in (MeV)
1.78068 1.99306 1.57576
Visible Energy in Hole Counter (MeV)
0 0
Visible Energy in Upstream Dead Materials
7.79939
Visible Energy in Tail Catcher Scintillator
0 0 0 0 0 0 0
Visible Energy in Tail Catcher Absorber
0 0 0 0 0 0
N Tracks out of world 5
N Secondaries 307
EmEdep is=19807.9 MeV
HadEdep is=3.73092 MeV
Edep in FCAL1 FCAl2 : 19807.9 3.73092
N Secondaries 234
EmEdep is=19859.2 MeV
HadEdep is=2.02064 MeV
Edep in FCAL1 FCAl2 : 19859.2 2.02064
**** Primary : 18
Vertex : (-9.96316,-9.33478,32740)
Number of F1 Tiles with Positive energy : 53
Number of F1 Tiles with Positive energy : 44
Number of F2 tiles with Positive energy : 0
Visisble Energy in S1 , S2 , S3 in (MeV)
1.67632 1.61008 2.24746
1.82491 2.1432 1.87469
Visible Energy in Hole Counter (MeV)
0 23.6075
0 127.822
Visible Energy in Upstream Dead Materials
2644.33
3749.68
Visible Energy in Tail Catcher Scintillator
0 0 0 0 0 0 0
Visible Energy in Tail Catcher Absorber
0 0 0 0 0 0
N Tracks out of world 98
N Secondaries 128
EmEdep is=15685.5 MeV
HadEdep is=0.881462 MeV
Edep in FCAL1 FCAl2 : 15685.5 0.881462
N Tracks out of world 112
N Secondaries 201
EmEdep is=14790.3 MeV
HadEdep is=0.25415 MeV
Edep in FCAL1 FCAl2 : 14790.3 0.25415
Run terminated.
Run Summary
Number of events processed : 18
User=3.670000s Real=3.796691s Sys=0.000000s
User=3.580000s Real=3.583918s Sys=0.000000s
Graphics systems deleted.
Visualization Manager deleting...
G4 kernel has come to Quit state.
Deleting G4Run (id:0)
UserDetectorConstruction deleted 0x1232440
UserPhysicsList deleted 0x1233650
UserActionInitialization deleted 0x13eed20
UserDetectorConstruction deleted 0x2137af0
UserPhysicsList deleted 0x2138d00
UserActionInitialization deleted 0x22f4dd0
UserWorkerInitialization deleted 0
UserWorkerThreadInitialization deleted 0
UserRunAction deleted.
@@ -1330,17 +1333,17 @@ G4SDManager deleted.
EventManager deleted.
Units table cleared.
TransportationManager deleted.
Total navigation history collections cleaned: 45
Total navigation history collections cleaned: 46
G4RNGHelper object is deleted.
================== Deleting memory pools ===================
Pool ID '20G4NavigationLevelRep', size : 0.0625 MB
Pool ID '20G4NavigationLevelRep', size : 0.0634 MB
Pool ID '24G4ReferenceCountedHandleIvE', size : 0.000961 MB
Pool ID '17G4DynamicParticle', size : 0.0798 MB
Pool ID '7G4Event', size : 0.000961 MB
Pool ID '15G4PrimaryVertex', size : 0.000961 MB
Pool ID '17G4PrimaryParticle', size : 0.000961 MB
Pool ID '15G4HCofThisEvent', size : 0.000961 MB
Pool ID '7G4Track', size : 0.159 MB
Pool ID '7G4Track', size : 0.16 MB
Pool ID '18G4TouchableHistory', size : 0.00577 MB
Pool ID '15G4CountedObjectIvE', size : 0.000961 MB
Pool ID '10G4Fragment', size : 0.00192 MB
@@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo
**************************************************************
Geant4 version Name: geant4-11-03-patch-02 (25-April-2025)
Geant4 version Name: geant4-11-03-ref-06 (30-June-2025)
Copyright : Geant4 Collaboration
References : NIM A 506 (2003), 250-303
: IEEE-TNS 53 (2006), 270-278
@@ -28,23 +28,24 @@ Registered graphics systems are:
ASCIITree (ATree)
DAWNFILE (DAWNFILE)
G4HepRepFile (HepRepFile)
RayTracer (RayTracer)
RayTracer (RT)
VRML2FILE (VRML2FILE)
gMocrenFile (gMocrenFile)
TOOLSSG_OFFSCREEN (TSG_OFFSCREEN, TSG_FILE)
OpenGLImmediateQt (OGLIQt, OGLI)
OpenGLStoredQt (OGLSQt, OGL, OGLS)
OpenGLStoredQt (OGLSQt, OGLS)
OpenGLImmediateXm (OGLIXm, OGLIQt_FALLBACK)
OpenGLStoredXm (OGLSXm, OGLSQt_FALLBACK)
OpenGLImmediateX (OGLIX, OGLIQt_FALLBACK, OGLIXm_FALLBACK)
OpenGLStoredX (OGLSX, OGLSQt_FALLBACK, OGLSXm_FALLBACK)
RayTracerX (RayTracerX)
RayTracerX (RTX)
RayTracerQt (RTQt)
Qt3D (Qt3D)
TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK)
TOOLSSG_X11_ZB (TSG_X11_ZB, TSGX11ZB)
TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK)
TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB)
TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG)
TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG, OGL)
TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB)
You may choose a graphics system (driver) with a parameter of
the command "/vis/open" or "/vis/sceneHandler/create",

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